
백엔드
성능 테스트 결과를 보고 N+1을 걷어내다
두줄요약
부하 테스트로 공통 조회 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의 열람 기록 같은 부수 효과와 전체 건수·근사값 차이의 명확한 안내 필요





