연관관계를 가지는 Entity를 조회할 때 발생할 수 있다. 상황을 가정해보자.
사람이 10명 있다. 각 인물은 고양이를 5마리씩 키우고 있다.
이 때 사람을 조회하면
people을 조회하는 쿼리 1개 + 각 사람이 기르고 있는 고양이들을 조회하는 쿼리 1개씩 총 10개
총합 11개의 쿼리가 나간다.
엔티티 정의 시 fetchType을 LAZY로 설정하면 N+1문제가 해결된다고 알고 있는 분들이 많은데 해결되는 것이 아니라 N+1 문제의 발생 시점에 차이가 있을 뿐이다.
EAGER 타입으로 설정하면 해당 엔티티를 조회하는 순간 N+1 문제가 발생하고
LAZY 타입으로 설정하면 해당 엔티티를 가져온 후 실제 사용하는 순간 N+1 문제가 발생한다.
fetchJoin을 사용해 엔티티를 조회할 때 연관관계에 해당하는 Entity까지 한 번에 가져오도록 하면 해결 가능하다.
@BatchSize
사용으로 보완)