[JPA] 즉시로딩 & 지연로딩 (FetchType.EAGER, LAZY)
JPA에서 연관관계를 조회할 때, 참조하는 객체들의 조회 시점을 선택할 수 있으며, 즉시 로딩 & 지연 로딩이 있다.
■ 각 연관관계의 default 속성
@ManyToOne : EAGER
@OneToOne : EAGER
@ManyToMany : LAZY
@OneToMany : LAZY
즉시 로딩(EAGER Loading)
: 항상 OUTER JOIN 을 사용한다. ( OUTER JOIN보다 INNER JOIN이 성능 최적화에 더 유리함 )
: 특정 엔티티를 조회할 때 연관된 모든 엔티티를 같이 로딩하는 것
: 연관된 엔티티를 모두 가져온다는 장점
: 엔티티 간의 관계가 복잡해질수록 조인으로 인한 성능 저하를 피할 수 없고 JPQL에서 N + 1 문제를 일으킨다는 단점
** N+1 문제 해결 방법은 하단 블로그 참고!
지연 로딩(LAZY Loading)
: 특정 엔티티만 조회함.
: 따라서, 지연 로딩 상태에서 연관된 엔티티의 멤버에 접근할 경우 에러가 발생할 수 있음
→ 이를 해결하기 위해서는 데이터베이스와의 재 연결이 필요하며, @Transactional 을 통해 해결 가능
@Transactional 어노테이션은 해당 메소드를 하나의 '트랜잭션'으로 처리하라는 의미
트랜잭션으로 처리하면 필요할 때 다시 데이터베이스와의 연결이 생성되기 때문에 테스트는 정상적으로 실행될 것.
✏️ 지연 로딩'을 기본으로 사용하고, 상황에 맞게 사용하는 것을 권장함
출처 및 참고:
https://dev-coco.tistory.com/139
[JPA] 즉시로딩과 지연로딩 알아보기(FetchType.EAGER, LAZY)
JPA에서 연관관계를 조회할 때 참조하는 객체들의 조회 시점을 선택할 수 있도록 두 가지 방법을 제공하는데 바로 즉시 로딩(EAGER Loading)과 지연 로딩(LAZY Loading)이다. 간단한 예제를 통해 알아보
dev-coco.tistory.com
https://dev-coco.tistory.com/165
[JPA] N+1 문제 원인 및 해결방법 알아보기
JPA를 사용하면 자주 만나게 되는 것이 N + 1 문제이다. N + 1 문제는 성능에 큰 영향을 줄 수 있기 때문에 N + 1 문제가 무엇이고 어떤 상황에 발생되는지, 어떻게 해결하면 되는지에 대해 알아보고
dev-coco.tistory.com