Dev/Spring
FetchType LAZY와 EAGER
마라탕천재
2024. 9. 30. 11:27
FetchType LAZY (게으른 로딩)
LAZY 전략은 말 그대로 '게으른' 방식으로 데이터를 로딩한다.
- 특징: 필요한 시점에 데이터를 가져온다.
- 작동 방식: 주 데이터만 먼저 로딩하고, 연관 데이터는 실제로 요청할 때 로딩한다.
- 예시: 책과 리뷰 관계에서 책 정보만 먼저 가져오고, 리뷰는 실제로 조회할 때 가져온다.
장점:
- 초기 로딩 속도가 빠르다.
- 불필요한 데이터 로딩을 줄여 리소스를 절약할 수 있다.
단점:
- 연관 데이터에 접근할 때마다 추가 쿼리가 발생할 수 있다.
- 잘못 사용하면 N+1 문제를 야기할 수 있다.
FetchType EAGER (즉시 로딩)
EAGER 전략은 LAZY와 반대로 '즉시' 모든 데이터를 로딩한다.
- 특징: 관련된 모든 데이터를 한 번에 가져온다.
- 작동 방식: 주 데이터와 연관 데이터를 동시에 로딩한다.
- 예시: 책 정보를 조회할 때 모든 리뷰 데이터도 함께 가져온다.
장점:
- 연관 데이터에 접근할 때 추가 쿼리가 필요 없어 후속 처리가 빠르다.
- 데이터 일관성을 유지하기 쉽다.
단점:
- 초기 로딩 시 더 많은 시간과 리소스가 필요하다.
- 사용하지 않을 수도 있는 데이터까지 모두 로딩하므로 비효율적일 수 있다.
결론
LAZY와 EAGER 중 어떤 전략을 선택할지는 상황에 따라 다르다. 자주 사용되는 연관 데이터라면 EAGER가 유리할 수 있고, 가끔 사용되거나 조건에 따라 필요한 데이터라면 LAZY가 더 효율적일 수 있다.