관리자 예약 목록 API `Broken pipe` 해결기 — 루프 안 N+1과 공유 DTO 반복 생성
트러블슈팅·15분 읽기
관리자용 예약 목록 API가 Broken pipe를 뱉던 원인을 추적해 루프 안 N+1 · 공유 Venue DTO 반복 생성 · 무제한 조회 세 가지를 구조로 풀고, DB 쿼리를 2,500회에서 5회로 줄인 과정을 정리합니다.
7개의 글
관리자용 예약 목록 API가 Broken pipe를 뱉던 원인을 추적해 루프 안 N+1 · 공유 Venue DTO 반복 생성 · 무제한 조회 세 가지를 구조로 풀고, DB 쿼리를 2,500회에서 5회로 줄인 과정을 정리합니다.
JPA에서 N+1을 줄이는 세 가지 도구인 fetch join, @EntityGraph, @BatchSize는 해결하는 축이 각각 다릅니다. 단일 연관과 컬렉션, 페이징 여부, 재사용성 관점에서 상황별 선택 기준을 정리합니다.
연관 관계 기본 Fetch 전략, 프록시로 구현되는 LAZY 동작, EAGER에서도 N+1이 생기는 이유, 컬렉션과의 조합에서 발생하는 카르테시안 폭발까지 JPA Fetch 전략의 내부 동작을 정리합니다.
N+1 쿼리가 무엇인지, 왜 성능을 망가뜨리는지, JPA와 서비스 레이어에서 어떻게 발생하는지, 그리고 어떤 방식으로 해결해야 하는지 정리합니다.
채팅 목록 전용 요약 API가 이름만 가벼웠던 이유를 추적하고, 응답 필드 최적화와 배치 조회로 DB 쿼리를 약 80% 줄인 과정을 정리합니다.
`Service` 계층에 침투한 Protobuf, 상품 목록 N+1, 매 요청마다 DB 조회, 공백 검색 불일치를 해결한 과정을 정리합니다.
리뷰 목록 40번 쿼리, 해시태그 N+1, 캐시 적중률 0%에 가까운 등급 뱃지 — 세 가지 성능 문제를 해결한 과정을 공유합니다.