전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

이론/JPA

N+1 문제란?

2022. 12. 18. 19:04
  • N+1 문제란 무엇일까?
    • 연관관계가 있는 엔티티를 조회할 경우 조회된 데이터의 갯수(N) 만큼 조회 쿼리가 추가로 발생하는 문제
  • N+1 문제 발생 이유
    • JpaRepository 가 JPQL 로 쿼리를 실행할 때는 Fetch 전략을 따르지 않고 JPQL 자체만을 이용하기 때문이다. JPQL 은 엔티티 객체와 필드를 가지고 쿼리를 한다. JPQL 입장에서는 연관관계를 모르고 해당 엔티티를 기준으로만 쿼리를 만든다. 그렇기 때문에 연관된 엔티티 데이터가 필요한 경우, Fetch 전략으로 지정한 시점에 조회를 별도로 호출하게 된다.
  • 해결 방법
    • Fetch join
      • 정의
        • JPQL 을 이용하여서 DB에서 데이터를 가져올 때 처음부터 연관된 데이터까지 같이 가져오게 하는 방법
      • 단점
        • 연관관계 설정해놓은 Fetch 전략을 사용할 수 없다. Fetch join을 사용하게 되면 데이터 호출 시점에 모든 연관 관계의 데이터를 가져오기 때문에 FetchType을 Lazy로 해놓는것이 무의미하다.
        • 하나의 쿼리로 데이터를 가져오다보니 페이징 단위로 데이터를 가져오는 Paging API 사용 불가능
저작자표시 (새창열림)
    모달조아
    모달조아

    티스토리툴바