JPA

[JPA] 즉시로딩 & 지연로딩 (FetchType.EAGER, LAZY)

hrming 2024. 3. 18. 18:14

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