jae_coding

[Spring JPA] 지연로딩 vs 즉시로딩 본문

Spring, java/Spring_JPA

[Spring JPA] 지연로딩 vs 즉시로딩

재코딩 2022. 9. 15. 17:52
반응형

지연로딩 (fetch = FetchType.LAZY)

@ManyToOne(fetch=FetchType.LAZY)

엔티티 조회 시 연관관계 필드가 프록시 객체로 제공되며, 지연로딩을 이용하면, 연관관계를 참조하기 전까지는 프록시 객체가 초기화가 되지 않고, 프록시 객체를 참조할 때, 프록시 객체가 초기화되고 SQL이 발생한다.

 

즉시로딩 (fetch = FetchType.EAGER)

@ManyToOne(fetch=FetchType.EAGER)

엔티티 조회 시 연관관계에 있는 데이터를 한번에 조회하는 기능이며, 엔티티의 연관관계 필드에는 실제 엔티티 객체가 반환된다.

TIP

1. 가급적 지연 로딩만 사용 (실무)

2. 즉시 로딩을 이용하면 예상하지 못한 SQL이 발생

3. 즉시 로딩은 JPQL에서 N+1 문제를 일으킴

4. @ManyToOne, @OneToOne은 기본이 즉시로딩 -> LAZY로 설정

5. @OneToMany, @ManyToMany는 기본이 지연로딩

6. 함께 사용하면 즉시로딩, 가끔사용하면 지연로딩 권장

반응형
Comments