지연로딩/즉시로딩

박준수·2023년 3월 9일
0

[JPA]

목록 보기
11/14

지연로딩

fetch = FetchType.LAZY

  • 지연 로딩 LAZY을 사용해서 프록시로 조회
  • member1.getTeam().getName() ==> 실제 team을 사용하는 시점에 초기화(DB 조회)

즉시로딩

fetch = FetchType.EAGER

  • Member조회시 항상 Team도 조회(프록시가 아니라 진짜 엔티티를 가져옴)

프록시와 즉시 로딩시 주의

  • 가급적 지연 로딩만 사용(특히 실무에서)
  • 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생
  • 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다.
  • @ManyToOne, @OneToOne은 기본이 즉시 로딩-> LAZY로 설정
  • @OneToMany, @ManyToMany는 기본이 지연 로딩
    결론 : 모든 연관관계에 지연 로딩을 사용해라! 실무에서 즉시 로딩은 상상하지 못한 쿼리가 나갈 수 있기에 사용하지 마라!

N+1문제

  • 즉시 로딩 사용시 JPQL로 쿼리를 작성했을 때 멤버 객체(1)를 조회할 목적으로 사용했는데 멤버들과 관계되어 있는 팀(N)도 같이 조회하게 된다.
profile
방구석개발자

0개의 댓글