Fetch Type
JPA가 하나의 Entity를 조회할 때, 연관관계에 있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정값
- Eager : 연관 관계에 있는 Entity들을 모두 가져온다.
- Lazy : 연관 관계에 있는 Entity를 가져오지 않고, getter로 접근할 때 가져온다.
N+1 문제
@ManyToOne, @OneToOne의 FetchType을 LAZY로 했을 때 발생
→ DB에 상당한 부하를 일으키게 된다.
N+1 문제 해결 방법
- join fetch 사용
- inner join
- 불필요한 쿼리문이 추가되는 단점이 있다.
- @EntityGraph 사용
- outer join → Cartesian Product ⇒ 중복이 발생한다.
- 1:n 필드의 타입을 Set으로 선언한다. → LinkedHashSet을 사용하여 순서 보장, 중복 제거
- query에 distinct를 사용하여 중복 제거
- → 해결 방법
- attributePaths에 query 수행시 바로 가져올 필드명을 지정하면 Eager 조회로 가져온다.
- outer join → Cartesian Product ⇒ 중복이 발생한다.
글로벌 fetch 기본 전략
@OneToOne, @ManyToOne : Eager
@OneToMany, @ManyToMany : Lazy
참고 자료
'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 |