: 1번 쿼리를 실행하고 그 결과로 가져온 데이터의 수만큼 연관된 추가적인 쿼리를 실행하여 연관된 객체를 가져오는 문제입니다.
ex)
게시글 리스트를 조회할 때,
해당 게시글의 작성자를 가져오기 위해 쿼리를 추가로 실행하는 것입니다.
이렇게 추가적인 쿼리를 반복적으로 실행하면 데이터베이스 부하가 커지고
성능 저하를 초래할 수 있습니다.
FetchType.LAZY 설정: 연관된 엔티티를 필요로 할 때까지 로딩을 지연하는 방법입니다. 이 방법을 사용하면 처음 조회한 엔티티만 쿼리가 실행되고, 연관된 엔티티는 실제로 필요할 때 쿼리가 실행됩니다.
FETCH JOIN 사용: JPQL에서 FETCH JOIN를 사용하여 연관된 엔티티를 함께 로딩하는 방법입니다. 이 방법을 사용하면 처음 쿼리를 실행할 때, 연관된 엔티티를 함께 로딩하여 n+1 문제를 해결할 수 있습니다.
EntityGraph 사용: 연관된 엔티티를 함께 로딩할 수 있는 EntityGraph를 사용하는 방법입니다. EntityGraph를 사용하면 JPQL이나 Criteria API에서 한 번의 쿼리로 필요한 엔티티를 모두 로딩할 수 있습니다.
BatchSize 설정: @BatchSize 애노테이션을 사용하여 연관된 엔티티를 일괄적으로 로딩하는 방법입니다. 이 방법을 사용하면 하위 엔티티를 로딩하는 쿼리 수를 줄일 수 있습니다.