페치 조인(fetch join)이란?
- SQL 조인 종류 X
- JPQL에서 성능 최적화를 위해 제공하는 기능
- 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능
- join fetch 명령어 사용
- 페치 조인 ::= [ LEFT[OUTER] | INNER] JOIN FETCH 조인경로
예시 코드를 통해 fetch join에 대해 더 자세히 알아보겠습니다.
fetch join을 사용하지 않을때
위의 Member, Team 예시로 설명해보자면
위처럼 fetch join을 사용하지 않고 Member를 조회하여 Team의 정보까지 확인한다면,
이처럼, 기존에 @ManyToOne 을 LAZY로 걸어놨기 때문에 Team은 프록시 객체로 불러오게 되고 그로인해 member.getTeam().getName() 메서드를 호출했을때 쿼리문을 호출해서 Team정보를 찾아오기 때문에 총 3개의 쿼리문이 발생하게 됩니다. 즉, N + 1 문제가 발생하게 되는것입니다. 여기서 1은 최초의 Member을 조회하는 쿼리이고 , N은 Team의 getName()메서드를 호출하여 발생하는 쿼리문을 의미합니다.
fetch join을 사용한다면..
fetch join을 사용하여 데이터를 조회한다면
위처럼 최초에 Member와 Team의 정보를 join하여 한번에 불러오게 되고, 별도로 발생하는 쿼리문없이 정보를 한번에 조회할 수 있게됩니다.
'Spring Data' 카테고리의 다른 글
즉시 로딩과 지연 로딩 (0) | 2021.11.27 |
---|---|
프록시란? (0) | 2021.11.26 |
엔티티의 생명주기 (0) | 2021.11.24 |
영속성 컨텍스트 (0) | 2021.11.24 |