Lazy Loading
Lazy Loading은 관련된 엔티티를 실제로 필요할 때까지 로딩하지 않는 방식입니다.
- 특징
- 연관된 엔티티가 실제로 접근될 때까지 데이터베이스에서 조회되지 않습니다.
- 프록시 객체를 사용하여 연관된 엔티티를 참조합니다.
- 장점
- 초기 로딩 시 불필요한 데이터를 로딩하지 않으므로 성능이 향상될 수 있습니다.
- 메모리 사용량을 줄일 수 있습니다.
- 불필요한 데이터베이스 쿼리를 줄일 수 있습니다.
- 단점
- 관련 데이터를 접근할 때 추가적인 데이터베이스 쿼리가 발생할 수 있습니다.
- 복잡한 경우, N+1 문제를 초래할 수 있습니다.
- 프록시 객체를 사용할 때 예상치 못한 동작이 발생할 수 있습니다.
Eager Loading
Eager Loading은 관련된 엔티티를 즉시 로딩하는 방식입니다.
- 특징
- 엔티티가 조회될 때 연관된 모든 엔티티도 함께 조회됩니다.
- 조인을 사용하여 한 번의 쿼리로 모든 데이터를 로딩합니다.
- 장점
- 처음에 필요한 모든 데이터를 한 번에 로딩하므로 추가적인 데이터베이스 쿼리를 피할 수 있습니다.
- 데이터베이스와의 상호작용을 최소화하여 네트워크 오버헤드를 줄일 수 있습니다.
- 데이터 일관성이 보장됩니다.
- 단점
- 불필요한 데이터를 로딩할 수 있어 메모리 사용량이 증가할 수 있습니다.
- 초기 로딩 시간이 길어질 수 있습니다.
- 복잡한 객체 그래프의 경우 쿼리가 복잡해지고 성능이 저하될 수 있습니다.