JPA에서 N+1문제란?
- 요청이 1개의 쿼리로 처리되길 기대했는데, N개의 추가 쿼리가 발생하는 현상(사실1+N)
- 연관관계 이슈에서 자주발생
지연 로딩일때
크루Repository.findAll()을 날리면
- 크루를 한명씩 조회하는 쿼리는 1개만 날아감
- List<할일>목록은 지연로딩 설정으로 프록시객체로 날아옴
여기서 할일.getsize() 명령을 입력하면,
- 1차캐시에 있는지 확인 -> 없네? -> 쿼리를 만들어서 DB에가서 가져옴
- 위 과정이 * N번이 반복되는 문제
해결방법 : Fetch join
- 연관된 entity나 collections을 한번에 같이 조회하는 기능(연관된 entity까지 영속성 컨텍스트에 전부 올림)
이렇게조치후, 할일.getsize() 명령을 입력하면
- 1캐시에 있는지 확인 - 있다! -> 바로조회
- DB를 거치지 않음!!!
출처 : https://www.youtube.com/watch?v=ni92wUkAmQI&t=171s