목록 보기
성능 테스트 결과를 보고 N+1을 걷어내다
백엔드

성능 테스트 결과를 보고 N+1을 걷어내다

넥스트리
넥스트리
2026년 10월 28일

두줄요약

부하 테스트로 공통 조회 API의 병목과 N+1 호출을 확인하고 응답 구조를 개선했습니다. 요약 조회와 호출 제거로 병목의 상대적 위치가 낮아졌음을 확인했습니다.

문제 상황

  • 약 110 req/s 부하 테스트에서 내 지원 목록 조회 평균 345ms로 다른 API 대비 높은 응답 시간
  • 구인 관리 목록의 글별 지원서 조회·건수 API 호출과 여러 화면의 반복 상세 조회
  • 내 지원 목록 API를 반장 홈·구인 목록·지원 현황·내 팀 화면에서 공통 사용

원인 분석

  • Worker별 지원서 엔티티 전체 조회와 큰 JSON 컬럼 읽기
  • 화면에 필요한 지원 여부·구인 글 요약 정보 부재로 목록 이후 추가 API 호출
  • 열린 구인 글별 미검토 지원자 조회, 무한 스크롤 페이지별 count 쿼리

해결 방법

  • 현재 페이지 구인 글 기준 지원서 건수 group by 조회, 화면별 건수 API useQueries 제거
  • 구인 글 목록의 applied 필드와 지원 목록의 구인 글 요약 정보 제공으로 반복 상세 호출 제거
  • JPA 요약 조회와 IN 조건으로 필요한 컬럼·조회 횟수 축소, limit + 1 방식으로 다음 페이지 판단

성능/운영 포인트

  • 재측정에서 내 지원 목록 평균 6.6ms, 동일 실행 내 비교 API 대비 주요 병목 해소
  • lab·로컬 환경과 시나리오 차이로 전후 절대 수치 비교 대신 상대적 병목 위치 비교
  • 상세 API의 열람 기록 같은 부수 효과와 전체 건수·근사값 차이의 명확한 안내 필요

다음 읽기

#성능 주제를 다룬 다른 회사 글

트렌비 리뷰 서비스의 성능 개선기

트렌비 리뷰 서비스의 성능 병목을 줄인 개선 사례를 정리했습니다. API 호출 축소, 트랜잭션 분리, 캐시와 인덱스 추가로 응답 속도와 안정성을 높였습니다.

트렌비
트렌비
백엔드
전체 보기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...