Spring Data JPA에서 Left Fetch Join과 Fetch Join은 모두 데이터를 검색할 때 연관된 엔티티를 함께 로드하는 데 사용하는 방법이다.
두 개의 방법은 다음과 같은 차이가 있다.
- Fetch Join
Fetch Join은 JPA에서 제공하는 기능으로, 관련된 엔티티를 한 번의 쿼리로 함께 로드한다. 이를 통해 지연 로딩(Lazy Loading)을 회피하고 성능을 향상시킬 수 있다. Fetch Join은 INNER JOIN으로 동작하며, 연관된 엔티티를 미리 로드하여 메모리에 올려놓는다.
- Left Fetch Join
Left Fetch Join은 Fetch Join과 유사하지만, LEFT OUTER JOIN을 사용하여 연관된 엔티티를 로드한다. 이는 연관된 엔티티가 없는 경우에도 기본 엔티티를 로드하고자 할 떄 유용하다(조인하는 엔티티가 NULL 값일 때). Left Fetch Join을 사용하면 연관된 엔티티가 없어도 기본 엔티티가 반환된다.
일반적으로 Fetch Join은 INNER JOIN으로 연관된 엔티티를 로드하며, Left Fetch Join은 LEFT OUTER JOIN으로 연관된 엔티티를 로드한다.
- Fetch Join은 연관된 엔티티가 반드시 있어야 하는 경우에 유용하다.
- Left Fetch Join은 연관된 엔티티가 없는 경우에도 기본 엔티티를 로드해야할 때 유용하다.