Development/JPA

그놈의 N + 1 문제

DevKTak 2023. 4. 10. 22:37

즉시 로딩(FetchType.EAGER)

  • @ManyToOne
  • @OneToOne

지연 로딩(FetchType.LAZY)

  • @OneToMany
  • @ManyToMany

 

JPA N + 1 문제란?

1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것을 의미한다.



1:N 또는 N:1 관계를 가진 엔티티를 조회할 때, JPA Repository를 활용해 인터페이스 findAll() 호출 시

  1. Fetch EAGER 전략으로 데이터를 조회하는 경우
  2. Fetch LAZY 전략으로 데이터를 가져온 이후에 연관 관계인 하위 엔티티를 다시 조회하는 경우

N + 1 문제가 발생한다.

 

기본 전략을 LAZY로 가져가고 필요 시 EAGER를 사용하는 방향으로 개발하던 중 2번과 같은 상황이 나에게도 드디어!

 

 

나의 프로젝트 코드 중 일부...

ㅎㅎㅎ자세한 내용이 궁금하시다면 =>>> https://github.com/DevKTak/OTL/blob/main/project_issue/JPA%20N%20%2B%201%20%EB%AC%B8%EC%A0%9C.md

 

 

* 참고: fetch join은 Fetch 전략을 무시한다.