목록전체 글 (49)
세상에 나쁜 코드는 없다
블로그를 이전했습니다. 예전부터 a to z 까지 직접 개발하여 배포한 블로그를 운영하고 싶다는 생각은 갖고 있었는데, 이번 기회에 만들게 되어 티스토리를 떠나려 합니다. 물론 열심히 하진 않았지만 나름 정들어서 괜시레 아쉬움이 느껴지네요. 사실 처음에 티스토리를 개발 블로그로 선택한 이유는 Notion To Tistory라는 오픈소스 라이브러리가 있었기 때문입니다. 과거에는 노션에 글을 쓰고 글을 티스토리에 발행하는 절차가 반자동으로 이루어졌어서 무척 편했는데, 2024년을 시작으로는 티스토리 API 제공이 중단되어 위 방법을 사용하지 못하게 되니 팍 식게 되더라구요. 결국 만들어진 웹앱은 Petefolio입니다. 제가 주로 사용하는 영어이름 'Pete'와 서류가방을 뜻하는 'Portfolio'를 합친..
Generic Programming이란? Generic programming centers around the idea of abstracting from concrete, efficient algorithms to obtain generic algorithms that can be combined with different data representations to produce a wide variety of useful software. 제너릭 프로그래밍이란 구체적인 알고리즘, 로직, 혹은 행동을 서로 다른 데이터 타입에 대해 적용하기 위해 하나의 일반화된 알고리즘, 로직, 혹은 행동으로 추상화하는 프로그래밍 방법입니다. 이는 추상화의 한 방법이기에, 소프트웨어 문제를 어떻게 추상화하고자 하는가에 ..
상속이 안티패턴이라고? 항간에는 상속이 안티패턴이며, 사용을 하지 않아야 한다는 얘기도 들리는 것으로 보입니다. 이러한 말은 어떤 상황에서 나왔을까요? Is Inheritance That Evil? Why inheritance is considered as a pillar of OOP when so many developers criticize it? We'll see where inheritance comes from and what problems it solves. thevaluable.dev Do Not Use Inheritance | Simple Code 2020.11.06 - 2021.02.14 petozoltan.gitbook.io InstrumentedHashSet 예제로 알아보는 상속의 ..
개요함께 만들어나가는 지식의 별자리, Stelligence 는 구름톤 트레이닝 파이널 프로젝트에서 수행한 사용자 참여형 그래프 기반 지식 공유 애플리케이션입니다. 저는 백엔드 팀장으로 이 프로젝트에 참여했습니다.사이트 주소 http://www.stelligence.sitewww.stelligence.sitegithub GitHub - Eagle-Strike-7/stelligence-backend: 지식을 별처럼 연결해 탐색하는 사용자 참여형 지식 공유 플랫지식을 별처럼 연결해 탐색하는 사용자 참여형 지식 공유 플랫폼, stelligence 백엔드 - Eagle-Strike-7/stelligence-backendgithub.com프로젝트 소개저희 프로젝트의 목표는 정보 검색의 새로운 패러다임과 함께 사용자..
알림을 잘 보내보자요구사항문제점saveAll 호출 시 왜 엔티티 개수만큼의 쿼리가 발생하나?벌크성 삽입의 도입결함률을 줄이기 위한 방법 도입연관관계 매핑, 꼭 해야할까요?Notification - Member FK 연결을 하지 않는다면알림을 잘 보내보자요구사항현재 진행중인 프로젝트의 기능 중에는 특정 안건에 대해 투표를 받는 기능이 있습니다. 투표가 종료되는 순간 그 결과를 담은 알림을 모든 투표자들에게 보내야하며, 알림 정보는 DB에 저장되어야 합니다. 알림 테이블이 필요로 하는 정보는 아래와 같습니다.문제점일반적으로 JPA를 사용하여 DB에 정보를 저장하는 방법은 엔티티 객체를 만들고 영속화 메서드를 호출하는 것입니다.Notification noti = new Notification(); em.per..
0. Intro1. UMC 활동 종료2. 쉬어가는 학기 3-13. 나는 구르미 플레이어4. 블로그는 어떻게 변했나5. 돌아보면 아쉬움만 남는6. 마무리7. 번외편0. Intro2022 회고. https://sbslc.tistory.com/552022 연말에 갑자기 회고를 쓰고 싶어서 헐레벌떡 이틀만에 쓴 이후로 내년에는 좀 더 진득히 시간을 가지고 쓰리라 다짐했는데, 올해도 30일이 다 되어서야 회고록을 쓰기 시작합니다. 사람은 쉽게 변하지 않는다는 말을 이럴 때에 쓰는 것 같습니다.2022년 회고 제목은 다시 학생이 되다 였습니다. 이는 2년간의 군휴학을 마치고 다시 학생으로서 살아가는 제 모습에 대한 표현입니다. 그리고 올해, 저는 복학 1년만에 다시 휴학을 하게 되었습니다. 올해 초만 하더라도 제가..
개요주요 기능아키텍처도커 컨테이너를 통한 컴파일과 실행컴파일실행터미널 기능을 제공하려면ECSEFS컨테이너의 실행 출력구현 포인트프로젝트프로젝트 생성프로젝트와 컨테이너프로젝트 입장 로직컨테이너의 종료터미널터미널 처럼 동작하는 프론트엔드 컴포넌트ECS Exec명령어의 가공출력값 전달파일 및 디렉터리 관리EFS사용자의 파일 조작사용자 간 디렉터리 동기화데모 영상마무리개요구름톤 트레이닝에서 12월 약 한달 간 수행했던 프로젝트인 "ChatGPT와 함께하는 Web IDE" 프로젝트를 소개합니다.저는 백엔드 4명, 프론트엔드 3명으로 구성된 팀에서 백엔드 개발자이자 팀장으로서 프로젝트를 리드했습니다. https://github.com/The-Great-Sign/IDE-Project-backend주요 기능기본적으로는..
🔗대규모 데이터를 처리하는 게시판 시리즈 (1) - 웹애플리케이션 개발 및 더미데이터 생성 (2) - JMeter와 테스트플랜 생성, 최초 성능 테스트 (3) - Index(1) (4) - Index(2) (4) - DB Connection (5) - InnoDB Buffer Pool (6) - Replication, Partitioning성능 개선 지점 : Connection PoolResource PoolingDBCP와 성능 trade-offConnection Pool의 개수는 어떻게 설정해야하는가?새로운 테스트 방법성능 테스트의 종류어떻게 테스트할 것인가테스트 수행Connection Pool 개수 설정하는 법테스트 결과Connection Pool 개수 결정성능 개선 지점 : Connection Po..
🔗대규모 데이터를 처리하는 게시판 시리즈 (1) - 웹애플리케이션 개발 및 더미데이터 생성 (2) - JMeter와 테스트플랜 생성, 최초 성능 테스트 (3) - Index(1) (4) - Index(2) (4) - DB Connection (5) - InnoDB Buffer Pool (6) - Replication, Partitioning인덱싱Title Index 설정결과Full-Text SearchFull-Text Index 생성Repository 수정결과Backward Index Scan 문제 해결근본적인 원인은 OFFSET커서 기반 페이징애플리케이션 레벨에서 수행되는 쿼리를 바꿔보자구현결과인덱싱이전 글에서 애플리케이션에서 발생하는 쿼리들을 분석한 결과, 크게 2가지의 문제점이 있었습니다.Backw..
🔗대규모 데이터를 처리하는 게시판 시리즈 (1) - 웹애플리케이션 개발 및 더미데이터 생성 (2) - JMeter와 테스트플랜 생성, 최초 성능 테스트 (3) - Index(1) (4) - Index(2) (4) - DB Connection (5) - InnoDB Buffer Pool (6) - Replication, Partitioning성능 개선 지점 : DB와 쿼리암달의 법칙IndexOptimizer와 힌트슬로우 쿼리 확인RDS 설정쿼리 속도 확인쿼리 분석게시판 페이지 조회시 발생하는 쿼리Article count 쿼리개별 글 조회 쿼리게시판 글 검색 시 발생하는 쿼리Article Search의 페이징을 위한 쿼리성능 개선 지점 : DB와 쿼리암달의 법칙암달의 법칙을 통해 시스템에서 우선적으로 개선해..