: fetch join이란 객체 그래프를 한번에 엮어서 가져오게 해주는 것이다.
fetch join은 JPA와 JPQL에서 성능 최적화와 N + 1 문제를 해결하기 위해 사용한다 (실무 필수)
fetch join을 자세히 설명해보자면 먼저 연관관계가 있는 예를들어 member.team()
이렇게 객체를 타고 들어가는것을 객체 그래프 라고 하는데 연관관계를 join하며 한방쿼리로 연관관계를 한번에 조회해버리는 방식이다.
(fetch join을 사용하면 연관된 엔티티를 한방쿼리로 모두 조회한다는 말이다.fetch join을 쓰지않으면 지연로딩때문에 처음에 프록시로 가져오고 프록시로 가져 온 값을 사용 할 때마다 쿼리들이 추가로 더 나가게 되는 상황이 일어난다(N + 1))
JPQL 예제를 봐보자 (실무에선 모두 지연로딩을 세팅해놓는다)
- Member를 조회할때 연관된 Team을 같이 한방쿼리로 다 끌고온다 (지연로딩으로 설정했어도 프록시로 가져오지 않고 진짜 DB에 있는 값(엔티티값)을 가져온다)
SELECT m from Member m left join fetch m.team
이렇게 한방쿼리로 조회해온다면 하나의 쿼리로 인해 다른 쿼리들이 더 나가지 않게되니 N + 1 문제를 fetch join으로 푸는 것 이다. (성능최적화까지)
(JPQL 페치조인은 명시적으로 동적인 타이밍에 원하는 객체그래프를 탐색할 수 있어 유용하다.)