[10분 테코톡] 수달의 JPA N+1 문제

youngkyu MIn·2023년 9월 4일

movie

1:N 관계 에서의 N+1 발생

  • 지연(Lazy) 로딩
    - 연관관계의 Entity 를 proxy 객체로 가지고 있음, 실제로 해당 데이터를 사용하게 될 때 쿼리가 다시 날라감 ( N + 1 발생 )
    - Fetch join 연관관계의 Entity 까지 한번에 조회
  • 즉시(Eager) 로딩
    - 연관관계의 Entity 는 무시하고 조회 대상 Entity 를 우선 조회, 그 후 글로벌 패치 전략을 확인하고 즉시 연관관계의 Entity 를 조회 하면서 쿼리가 다시 날라감 ( N + 1 발생 )
    - 지연(Lazy) 로딩 권장, fetch join 을 함께 사용하기를 권장
  • fetch join
    - limit 을 통해 페이징 시도 시, 데이터 누락이 발생할 수 있음
    - fetch join 시 데이터 전체를 가져온 후 메모리에서 가공을 진행, 때문에 데이터의 양이 많아지면 메모리가 힘드렁
    - 권장 : ManyToOne 관계에서 페이징, @BatchSize() 사용
profile
한 줄 소개

0개의 댓글