[Springboot] JPA, N + 1 쿼리 증가 문제

2021. 5. 15. 14:57·Programming/Springboot
728x90
반응형

 

JPA를 사용하다 보면 LAZY로딩에 의해서 더 많은 쿼리가 나가는 경우가 발생한다.

 

쿼리를 보낼 때 연관된 내용을 바로 찾지 않고 필요할때 다시 쿼리를 보내서 찾는 LAZY 방식을 사용하여 N+1 쿼리 문제가 발생하게 된다.

 

ToOne에 관계는 fetch join을 사용하여 한번에 값들을 모두 조회할 수 있지만 ToMany 같은 컬렉션 조회는 한개는 상관없지만 여러개를 fetch join을 걸게되면 MultipleBagFetchException 에러가 나게된다.

 

properties설정에 하이버네이트의 default_batch_fetch_size 글로벌 옵션을 걸거나 필요한 엔티티에 어노테이션 @BatchSize를 붙이면 된다.

이 옵션은 설정한 size만큼 in절로 묶어서 한번에 가져오기 때문에 쿼리를 줄일 수 있다. 

 

그리고 컬렉션에 fetch join을 쓰면 페이징 처리가 불가능 하지만 이 방식은 페이징 처리가 가능하다. 

max size는 1000으로 하는게 적당하다.

 

Reference


https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-API%EA%B0%9C%EB%B0%9C-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94/dashboard

 

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의

스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 본 강의는 자바 백엔드 개발의 실전 코스에 있는 활용2 강의 입니다. 스프링 부트와 J

www.inflearn.com

 

반응형
저작자표시 (새창열림)

'Programming > Springboot' 카테고리의 다른 글

[Springboot] 자바 ORM 표준 JPA 프로그래밍 - 3  (0) 2021.04.16
[Springboot] 자바 ORM 표준 JPA 프로그래밍 - 2  (0) 2021.04.11
[Springboot] 자바 ORM 표준 JPA 프로그래밍 - 1  (0) 2021.04.08
[Springboot] Spring 헷갈리는 내용 (21.03.25)  (0) 2021.03.25
'Programming/Springboot' 카테고리의 다른 글
  • [Springboot] 자바 ORM 표준 JPA 프로그래밍 - 3
  • [Springboot] 자바 ORM 표준 JPA 프로그래밍 - 2
  • [Springboot] 자바 ORM 표준 JPA 프로그래밍 - 1
  • [Springboot] Spring 헷갈리는 내용 (21.03.25)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196)
      • study (1)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    orm
    미니프로젝트
    파이썬
    그리디
    버그
    SFlash
    괄호
    java
    정리
    SpringBoot
    프로그래머스
    스파르타코딩클럽
    백준
    에러
    조합
    카카오코딩테스트
    알고리즘
    후기
    실전프로젝트
    카카오인턴
    jpa
    항해99
    회고
    브루트포스
    해결
    인프런
    김영한
    spring
    항해마켓
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[Springboot] JPA, N + 1 쿼리 증가 문제
상단으로

티스토리툴바