개발 공부 · 1 min read

Spring Boot JPA N+1 문제 해결 정리

프로젝트 하면서 겪은 N+1 문제와 해결 방법을 정리했어요

박지연

Spring Boot JPA N+1 문제 해결

프로젝트에서 API가 느려서 로그 찍어봤더니 쿼리가 100개 넘게 나가고 있었어요 😱

N+1 문제란?

1개의 쿼리로 N개의 데이터를 가져왔는데, 연관 관계 조회할 때 N개의 추가 쿼리가 발생하는 것

// 게시글 10개 조회 → 쿼리 1개
// 각 게시글의 작성자 조회 → 쿼리 10개
// 총 11개 쿼리 발생!
List<Post> posts = postRepository.findAll();
for (Post post : posts) {
post.getAuthor().getName(); // 여기서 추가 쿼리
}

해결 방법

1. Fetch Join

@Query("SELECT p FROM Post p JOIN FETCH p.author")
List<Post> findAllWithAuthor();

2. EntityGraph

@EntityGraph(attributePaths = {"author"})
List<Post> findAll();

3. Batch Size 설정

spring:
jpa:
properties:
  hibernate:
    default_batch_fetch_size: 100

결과

쿼리 100개 → 3개로 줄임! API 응답시간 2초 → 200ms

느낀 점

로그를 잘 봐야 한다. show_sql: true 설정 필수!

이 글 공유하기

댓글 0개

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

로그인하기

아직 댓글이 없습니다

첫 번째 댓글을 남겨보세요!