코드 그라데이션

fetch join (페치 조인) (1) 기본 본문

Database/JPQL

fetch join (페치 조인) (1) 기본

완벽한 장면 2023. 9. 2. 13:27

실무에서 정말정말완전완전대박 중요함

 

페치 조인

 

엔티티 페치 조인

  • 즉시 로딩 가져올 때와 같다.

 

 

예제 구조

예제의 단순화를 위해 회원 4는 제외하고 만들었음.

 

 

실행 결과

Member와 Team의 연관관계가 manytoone이고, 지연로딩 설정 되어 있다.

그러면 팀은 프록시로 들어온다. 지연 로딩이 일어나고, 실제 member.getTeam().getName()을 호출한 시점에 그때마다 데이터베이스에 쿼리를 날린다. 

영속성 컨텍스트에서 조회

 

결과적으로 보면

쿼리 총 3번 나갔다.

회원 100명? 그럼 쿼리 100번 나가야 한다.

N + 1.

 

1은 회원을 가져오기 위해서 첫 번째로 날린 쿼리

첫 번째 쿼리로 얻은 결과와 맞는 쿼리를 N번 날리게 되는 것.

이게 N + 1 문

 

이걸 해결하려면

 

페치 조인 사용 코드

 

실행 결과 보면

 

지연로딩을 설정해놔도 fetch join이 우선순위가 더 높다.

 

 

 

728x90
Comments