JPA의 즉시 로딩과 페치 조인의 차이

song yuheon·2023년 10월 2일
0

JPA

목록 보기
3/9
post-thumbnail

JPA의 즉시 로딩과 페치 조인의 차이


즉시 로딩페치 조인은 둘다 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 엔터티도 항상 함께 로드됩니다.


페치 조인


  • 패치 조인은?
    JPQL에서 사용되며 연관된 엔터티를 명시적으로 함께 조회하도록 지정하는 방법이다.
  • 특징
    • 특정 쿼리에서만 연관된 엔터티를 함께 로드하고자 할 때 사용한다.
    • JPQL의 JOIN FETCH 구문을 사용하여 로딩하려는 연관 엔터티를 지정한다.
List<C> C = em.createQuery("SELECT c FROM C c JOIN FETCH c.D", c.class)
                          .getResultList();

C 엔터티를 조회할 때 연관된 D 엔터티도 함께 로드된다.


차이점


  • 즉시 로딩
    관련 엔터티를 항상 함께 로드합니다.
  • 페치 조인
    특정 쿼리에서만 연관된 엔터티를 명시적으로 로드합니다.

정리


즉시 로딩은 연관된 엔터티를 무조건 함께 로드하므로 불필요한 데이터 로딩으로 인한 성능 저하가 발생할 수 있다.
반면 페치 조인은 필요한 상황에서만 특정 쿼리를 통해 연관된 엔터티를 로드하므로 더 효율적이다.
일반적으로 애플리케이션에서는 연관 관계를 주로 지연 로딩으로 설정하며 특쩡 상황에서 성능 최적화가 필요할 때만 페치 조인을 활용해야한다.
이 방식을 통해 필요 없는 데이터 로딩을 최소화하면서 필요할 때 효율적으로 데이터를 로딩할 수 있다.


profile
backend_Devloper

0개의 댓글