AOS
주식회사 에오스모바일
← 개발자 노트
Web · · 조회 10

Spring Boot + JPA 환경에서 N+1 쿼리 문제 진단 및 Fetch Join 최적화

데이터베이스 성능 저하의 주범인 ORM N+1 쿼리 현상을 실제 로그를 통해 분석하고 Fetch Join과 EntityGraph를 통해 쿼리 1번으로 성능을 대폭 개선하는 방법을 다룹니다.

Spring Data JPA를 사용하는 웹 프로젝트에서 엔티티 간 연관 관계가 설정되어 있을 때 지연 로딩(Lazy Loading)으로 인해 조회 대상 수만큼 추가 SQL이 실행되는 N+1 문제는 고질적인 성능 저하의 원인입니다. 예를 들어 10개의 게시글을 조회했는데 각 게시글의 댓글을 읽어오기 위해 10번의 추가 SELECT 쿼리가 나가는 현상입니다. 이 글에서는 JPQL의 FETCH JOIN 키워드를 활용해 단 한 번의 INNER/LEFT JOIN으로 연관 데이터까지 깔끔하게 가져오는 해결책을 제시합니다. 아울러 컬렉션 페치 조인 시 데이터가 중복되는 현상을 방지하기 위한 DISTINCT 키워드 사용법과 페이징 처리가 필요한 경우 대안이 되는 hibernate.default_batch_fetch_size 설정 팁을 전해드립니다.