즉시 로딩
과 페치 조인
은 둘다 JPA에서 연관된 엔터티를 조회하는 방법이다.
하지만 둘 다 연관된 엔터티를 함께 로딩하는 것은 맞지만 작동 방식과 사용하는 상황이 조금 다르다.
즉시 로딩이란?
연관된 엔터티를 메인 엔터티와 함께 즉시 로딩하는 방법이다.
특징
@ManyToOne
, @OneToOne
과 같은 연관 관계 매핑에서 fetch
속성을 FetchType.EAGER
로 설정하여 사용한다.@Entity
public class A {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "b_id")
private B B;
}
A
엔터티를 조회할 때마다 연관된 B
엔터티도 항상 함께 로드됩니다.
JOIN FETCH
구문을 사용하여 로딩하려는 연관 엔터티를 지정한다.List<C> C = em.createQuery("SELECT c FROM C c JOIN FETCH c.D", c.class)
.getResultList();
C
엔터티를 조회할 때 연관된 D
엔터티도 함께 로드된다.
즉시 로딩은 연관된 엔터티를 무조건 함께 로드하므로 불필요한 데이터 로딩으로 인한 성능 저하가 발생할 수 있다.
반면 페치 조인은 필요한 상황에서만 특정 쿼리를 통해 연관된 엔터티를 로드하므로 더 효율적이다.
일반적으로 애플리케이션에서는 연관 관계를 주로 지연 로딩
으로 설정하며 특쩡 상황에서 성능 최적화가 필요할 때만 페치 조인을 활용해야한다.
이 방식을 통해 필요 없는 데이터 로딩을 최소화하면서 필요할 때 효율적으로 데이터를 로딩할 수 있다.