본문 바로가기

웹 기술 쌈싸먹기/JPA

[JPA] 즉시로딩, 지연로딩

즉시로딩, 지연로딩

 

지연 로딩

 

  • 지연 로딩 LAZY을 사용해서 프록시로 조회

👉 프록시로 조회!!!
👉 team.getName()을 할 때 초기화가 일어난다!!!

 

 

즉시 로딩

  • 즉시 로딩 EAGER를 사용해서 함께 조회

 

  • JPA 구현체는 가능하면 조인을 사용해서 SQL 한번에 함께 조회

 

  • 프록시와 즉시로딩 주의
    • 가급적 지연 로딩만 사용(특히 실무에서)
    • 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생
    • 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다.
    • @ManyToOne, @OneToOne은 기본이 즉시 로딩 -> LAZY로 설정
    • @OneToMany, @ManyToMany는 기본이 지연 로딩

 

  • 지연 로딩 활용
    • Member와 Team은 자주 함께 사용 -> 즉시 로딩
    • Member와 Order는 가끔 사용 -> 지연 로딩
    • Order와 Product는 자주 함께 사용 -> 즉시 로딩
    • 모든 연관관계에 지연 로딩을 사용해라!
    • 실무에서 즉시 로딩을 사용하지 마라!
    • JPQL fetch 조인이나, 엔티티 그래프 기능을 사용해라! (뒤에서 설명)
    • 즉시 로딩은 상상하지 못한 쿼리가 나간다.

 

'웹 기술 쌈싸먹기 > JPA' 카테고리의 다른 글

[JPA] 고아 객체  (0) 2022.02.08
[JPA] CASCADE  (0) 2022.02.08
[JPA] 프록시  (0) 2022.02.08
[JPA] 상속관계 매핑, @MappedSuperclass  (0) 2022.02.08
[JPA] 연관관계 매핑시 고려사항 3가지  (0) 2022.02.07