연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우, 조회된 데이터 갯수 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상
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
Last night's Champions League result between Real Madrid vs Atalanta on Wednesday, March 17, 2021 ended 3-1 so that Los Blancos qualified for the last 8 of the UCL with an aggregate of 4-1. The Manchester City vs Monchengladbach match ended 2-0 and The Citizens won 4-0 on aggregate.
https://www.nobartv.co.id/indeks-topik , https://en.nobartv.co.id/indeks-topik , https://ko.nobartv.co.id/indeks-topik , https://ja.nobartv.co.id/indeks-topik , https://ar.nobartv.co.id/indeks-topik , https://hi.nobartv.co.id/indeks-topik
Real Madrid swallowed Atalanta in the second leg of the Champions League last 16 thanks to the brilliant performances of their veteran players, especially Karim Benzema and Sergio Ramos, and became the first Spanish representative to reach the UCL quarter-finals.
https://ru.nobartv.co.id/indeks-topik , https://es.nobartv.co.id/indeks-topik , https://th.nobartv.co.id/indeks-topik , https://fr.nobartv.co.id/indeks-topik
Meanwhile, Manchester City won Liverpool as fellow EPL representatives who had already qualified. There are still 2 other matches left on Thursday (18/3/2021) but it is almost certain that all representatives of the Italian League will fall in the last 16.