인프런 - 스프링/JPA 프로그래밍 - 기본편

[JPA] 즉시 로딩과 지연 로딩

서하빈 2023. 11. 28. 10:51

- 프록시 초기화 시점은 정확하게 그 객체의 메서드를 호출할 때이다. 단순히 그 객체를 가져오는 부분에서는 초기화가 안된다.

 

 

- 즉시 로딩은 JPQL에서 N + 1 문제를 일으킨다. 예를 들어서 회원과 팀이 N:1 관계에서 즉시 로딩으로 설정되었을 때 회원을 조회했을 때 10명이 조회되면 최초 쿼리 1개와 회원 10명의 팀을 각각 세팅하는 쿼리 10개가 추가적으로 나가는 상황이 발생하여 N + 1 문제라고 지칭하는 것이다. (주의할 점은 JPQL이 아닌 em.find로 조회하는 경우 조인을 하여 한번에 가져온다.)

- 지연 로딩으로 설정하여도 팀이 필요한 시점에 N개 만큼 추가적으로 쿼리가 날라가는 것은 동일하다. N+1 문제를 해결하는 대안은 일단 총 3가지 정도가 있다.

 

N+1 문제 해결하는 방법 3가지

- 일단 모든 연관관계를 지연로딩으로 설정한다. JPQL의 패치조인을 이용한다.

 

- 엔티티 그래프

- 배치 사이즈

 

 

 

 

출처: 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자

www.inflearn.com