yesforlog
yes Log
yesforlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • dev log
    • Algorithm
    • Algorithm Study
    • CS
    • log

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • TIL
  • dev log
  • Algorithm
  • Algorithm Study
  • CS

공지사항

인기 글

태그

  • SpringBoot #JWT #SpringSecurity
  • TIL
  • 알고리즘
  • devlog #dev
  • 자율프로젝트
  • SSAFY
  • SSAFY #삼성청년SW아카데미 #수료 #5기 #SSAFY5기
  • backend #dev
  • 백준 #알고리즘 #algorithm #boj
  • AWS #EC2
  • Safers
  • issue #dev
  • TIL #devlog
  • SSAFY5기
  • 싸피
  • jpa #springboot
  • 알고리즘 #백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yesforlog

yes Log

dev log

JPA Fetch 전략

2021. 8. 3. 20:36

Fetch Type

JPA가 하나의 Entity를 조회할 때, 연관관계에 있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정값

  • Eager : 연관 관계에 있는 Entity들을 모두 가져온다.
  • Lazy : 연관 관계에 있는 Entity를 가져오지 않고, getter로 접근할 때 가져온다.

N+1 문제

@ManyToOne, @OneToOne의 FetchType을 LAZY로 했을 때 발생

→ DB에 상당한 부하를 일으키게 된다.

N+1 문제 해결 방법

  1. join fetch 사용
    • inner join
    • 불필요한 쿼리문이 추가되는 단점이 있다.
  2. @EntityGraph 사용
    • outer join → Cartesian Product ⇒ 중복이 발생한다.
      1. 1:n 필드의 타입을 Set으로 선언한다. → LinkedHashSet을 사용하여 순서 보장, 중복 제거
      2. query에 distinct를 사용하여 중복 제거
    • → 해결 방법
    • attributePaths에 query 수행시 바로 가져올 필드명을 지정하면 Eager 조회로 가져온다.

글로벌 fetch 기본 전략

@OneToOne, @ManyToOne : Eager

@OneToMany, @ManyToMany : Lazy

참고 자료

  • https://bk-investing.tistory.com/36
  • https://jojoldu.tistory.com/165
저작자표시 비영리 (새창열림)

'dev log' 카테고리의 다른 글

홈동 개발을 마치면서  (0) 2021.08.30
Spring Boot, Spring Security, jwt를 이용한 회원가입과 로그인  (0) 2021.07.26
MariaDB의 장점(MySQL과의 비교)  (0) 2021.07.21
[AWS] AWS EC2 서버 환경 만들기  (0) 2021.04.07
[Backend] Servlet 정리  (0) 2021.04.05
    'dev log' 카테고리의 다른 글
    • 홈동 개발을 마치면서
    • Spring Boot, Spring Security, jwt를 이용한 회원가입과 로그인
    • MariaDB의 장점(MySQL과의 비교)
    • [AWS] AWS EC2 서버 환경 만들기
    yesforlog
    yesforlog
    yes log

    티스토리툴바