연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우, 조회된 데이터 갯수 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상
jpaRepository에 정의한 인터페이스 메서드를 실행 시, JPA는 메서드 이름을 분석해서 JPQL을 생성하고 실행한다. 이 때, 연관관계를 무시하고 해당 엔티티 기준으로 쿼리를 조회한다. 만약 연관된 엔티티 데이터가 필요한 경우, 지정한 FetchType 시점에 조회를 별도로 호출하게 된다.
jpaRepository 인터페이스 메소드 실행 시, 바로 N+1문제 발생
jpaRepository 인터페이스 메소드 실행 시에는 문제가 없지만 연관된 데이터를 사용하려 할 때 N+1문제 발생
👉 즉, 발생 시점이 다른 것이지 지연 로딩이 N+1문제를 해결하는 것은 아니다!
ex) @Query("select c from Company c join fetch c.employee")
때문에 이 방식은 추천하지 않는다.
결국 동일하게 N+1문제가 발생하긴 한다.
연관 관계에 대한 설정은 모두 FetchType.LAZY(지연로딩)을 사용하고, 추가로 성능 최적화가 필요한 부분은 FetchJoin이나 QueryBuilder(추천)을 같이 사용하자!
https://incheol-jung.gitbook.io/docs/q-and-a/spring/n+1
https://programmer93.tistory.com/83