본문 바로가기

전체 글70

[성능 최적화] K6로 발견한 N+1 문제, 84개 쿼리를 6개로 줄여 응답속도 93% 개선기 - 2편 [성능 최적화] K6로 발견한 N+1 문제, 84개 쿼리를 6개로 줄여 응답속도 93% 개선기 - 2편서론이번 2편에서는 지난 [1편 링크] 에서 K6 부하 테스트를 통해 채팅 메시지 조회 API에서 심각한 N+1 문제를 해결하기 위한 구체적인 코드 개선 과정과, 그로 인해 얼마나 성능이 향상되었는지를 데이터로 확인해 보겠습니다.문제의 원인 : 반복 조회로 인한 N+1 쿼리부하 테스트를 통해 확인한 병목의 근본 원인은, 쿼리가 N+1 로 실행되는 문제였습니다.아래 코드 첫 번째 스크린샷에서 보시는 것처럼, 조회된 21개의 채팅 메시지 목록(List)을 스트림으로 처리하며 각 메시지에 대한 추가 정보를 개별적으로 조회하고 있었습니다.즉, 하나의 메시지(ChatEntity)를 처리할 때마다 아래 4개의 추가.. 2025. 8. 13.
[성능 최적화] K6로 발견한 N+1 문제, 84개 쿼리를 6개로 줄여 응답속도 93% 개선기 - 1편 [성능 최적화] K6로 발견한 N+1 문제, 84개 쿼리를 6개로 줄여 응답속도 93% 개선기 - 1편서론사이드 프로젝트 ‘토론철’에서 채팅 기능을 개발하며, 단순히 기능을 구현 하는데 그치지 않고 확장 가능한 성능까지 확장하고 개선하고 싶었습니다."내 채팅 API가 실제로 얼마나 많은 사용자를 감당할 수 있을까?"“실제로 많은 사용자가 몰리면 어떤 문제가 발생할까?”라는 궁금증이 생겼습니다.이러한 문제의식을 설정하고, 실제 사용자 패턴을 가정해서 K6 부하 테스트로 API별 커스텀 메트릭을 수집했고, 특히 채팅 메시지 조회 API의 응답 시간을 집중적으로 추적했습니다.그 결과, p95 기준 4.6초에서 최대 37초까지 치솟는 심각한 병목 현상을 발견하고, API 1회 호출에 84개의 SQL이 실행되는 .. 2025. 8. 1.
join - 데이터 집합 레벨 변화 join - 데이터 집합 레벨 변화💡 집합 레벨의 의미 집합 : 단일테이블,조인테이블,grup by 의 결과 등 의 조회 데이터 집합 레벨 : 집합(테이블)의 유일성(기본키)이 어떤 레벨(고유한지(Unique), 중복되는지(Many) ) 인지를 말한다.직원 테이블(emp)empnonamedeptno1Alice102Bob203Carol104Dave305Eve20- 직원 테이블 집합 레벨 : empno로 unique하며, deptno로 중복(M) 레벨이다.  부서 테이블(dept)deptnodeptname10HR20IT30Sales- dept 테이블 집합 레벨 : 기본키는 deptno임으로 유니크 레벨 이다. emp 테이블, dept 테이블 deptno로 조인selectemp.empname,dept.dep.. 2024. 4. 25.
JDBC - 커넥션풀(Connection pool) Connection pool JDBC API 를 이용해서 DB와 Connection 을 하는작업은 비용이 많이 발생한다. Connection Pool을 이용하면 애플리케이션 로딩 시점에 Connection 객체를 미리 생성하고, 애플리 케이션에서 디비 연결이 필요할 경우 미리 준비된 Connection 객체를 상용하여 애플리케이션 성능을 향상 시킬 수 있다. 다음은 MYSQL 문서에 나와있는 테이블이 행을 산입하는데 필요한 대략적인 수치(시간의 비율)이다. 아래 문서에서 알 수 있듯 행을 삽입할때 디비 연결 단계가 가장 비용(시간)이 든다는 것을 알 수 있다. 행을 삽입하는 데 필요한 시간은 다음에 따라 결정됩니다. 숫자는 대략적인 수치를 나타내는 다음 요소들 크기: 연결: (3) 서버로 쿼리 보내기: .. 2023. 12. 13.
리눅스 파일 구조 Linux - directory structure 사진 출처 - https://linuxhandbook.com/linux-directory-structure/ 💡 리눅스 디렉토리 구조 설명 글 리눅스 배포판은Linux Foundation에서 유지관리하는 (FHS)파일시스템 계층구조 표준 v3.0을 따르기 때문에 거의 모두 동일한 파일 구조를 갖고있다. /bin 사용자가 실행할 수 있는 명령어 Binary파일들을 모아둔곳 (EX:) cat,touch,ping…) cd /bin /etc 호스트별 시스템 전체 구성파일이 있으며 프로그램들의 환경 설정을 할수있는 파일들이 있다. EC:) nginx.conf, java.conf, ssg.conf /usr 주로 시스템 유저가 설치한 소프트웨어와 관련된 파일들이 위치.. 2023. 11. 21.
[PostgreSQL] PostgreSQL 데이터베이스 접속 후 관련 문제 해결: 'more'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 문제 상황 Postgres의 pg_dump 명령어를 사용 하기 위해 cmd에서 postgres(ArisysDB)접속 접속 후 psql (모든)명령어 입력 시 아래와 같은 에러 메시지 응답 'more'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 조치 했던 것 윈도우 psql 환경변수 설정 후 다시 시도 → 안됨 해결 방법 PAGER 환경 변수 설정 set PAGER=less psql 실행시 -P pager=off 옵션 추가하여 페이징 비활성화 psql -h 127.0.0.1 -d ArisysDB -U postgres -P pager=off \d 테이블 조회 PAGER 환경 변수 설정 후 psql 명령어 정상 실행 원인 일단 psql 콘솔에서 \d 명.. 2023. 6. 15.