N+1 문제에 대해 설명해 주세요.
N + 1문제란, 하나의 쿼리를 수행하는 데 N개의 쿼리가 더 수행된다는 의미이다.연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터 개수만큼 연관 관계의 조회 쿼리가 추가로 발생하여 데이터를 읽는 문제를 말한다.
보통 최적화를 위해 즉시 로딩보다는 지연 로딩을 사용하는데, 지연 로딩은 프록시 객체를 불러오고 이 프록시 객체에서 실제 조회할 때마다 쿼리를 수행하게 된다.
그래서 처음 조회할 때 1번, 이후에 N개의 쿼리가 추가로 수행된다고 해서
N + 1문제라고 한다.
N + 1 문제 해결방안
fetch join
JPQL의 페치 조인을 사용하면 지연 로딩으로 설정되어 있어도, 프록시가 아닌 실제 엔티티가 반환된다.
@EntityGraph도 페치 조인을 사용한다.
@BatchSize
하이버네이트가 제공하는
@BatchSize를 이용하면 연관된 엔티티를 조회할 때 지정한 size만큼IN절로 조회한다.개별 적용은
@BatchSize, 글로벌 설정은hibernate.default_batch_fetch_size로 설정할 수 있다.
Last updated