JPA 지연 로딩(fetch=FetchType.LAZY)

KMS·2022년 4월 7일
0

JPA Basics

목록 보기
10/20

LAZY Vs. EAGER

1. EAGER(즉시 로딩)

	@ManyToOne // DEFAULT == FetchType.EAGER (==즉시 로딩)
    @JoinColumn(name = "MEMBER_ID")
    private Member memberId;

2. LAZY(지연 로딩)

	@ManyToOne(fetch = FetchType.LAZY) //지연 로딩
    @JoinColumn(name = "MEMBER_ID")
    private Member memberId;

즉시 로딩에서는 Order를 조회 했을때 연관 되어 있는 Member 테이블까지 JOIN해서 조회되며, 엔티티 자체를 사용하는 것을 볼 수 있습니다.
반면, 지연 로딩에서는 JOIN을 하지 않고 Order를 조회하며, 프록시를 사용하는 것을 볼 수 있습니다.
@ManyToOne, @OneToOne은 DEFAULT가 FetchType.EAGER. @ManyToMany, @OneToMany는 DEFAULT가 FetchType.LAZY

실무에서는 지연 로딩 방식을 사용하는 것이 매우 권장됩니다.
즉시 로딩시, 연관된 테이블들을 JOIN으로 모두 가져오기 때문에, 예상하치 못한 SQL문이 처리되며, JPQL에서는 의도한 쿼리 + 연관된 테이블의 객수 N개 만큼, 총 N+1개의 쿼리가 처리 됩니다.

profile
Student at Sejong University Department of Software

0개의 댓글