1. 페치 조인의 한계
- 📌 페치 조인 대상에는 별칭 사용 X
String query = "select m from Member m join fetch m.team as t";
- 📌 둘 이상의 컬렉션은 페치 조인 X
- 📌 컬렉션을 페치 조인할 경우 페이징 API 사용 X
=> hibernate는 경고 로그 & 메모리에서 페이징
- 일대다의 경우 '다'에 맞춰서 데이터 뻥튀기가 발생하기 때문
- 일대일,다대일의 경우 페치 조인해도 페이징 가능
- 해결방법은?
- batch size 지정을 통해 N+1 문제를 어느정도 해소 가능
- 컬렉션-조회-최적화
2. 페치 조인의 특징
- 연관된 엔티티들을 SQL 한 번으로 조회 => 성능 최적화
- 엔티티에 직접 적용하는 글로벌 로딩 전략보다 우선함
- @OneToMany(fetch=FetchType.LAZY) //글로벌 로딩 전략
- 실무에서 글로벌 로딩 전략은 모두 지연 로딩으로 사용할 것
- 최적화가 필요한 곳은 페치 조인 적용
- 실무에서 대부분의 조회 성능 이슈는 N+1에서 발생하므로 페치 조인으로 어느정도 해결
3. 정리