DB와의 상호 작용을 처리할 때, JPA를 사용하는 경우 Entity 간의 연관 관계를 설정할 때 지연 로딩과 즉시 로딩 두 가지 전략 사용 가능
@OneToMany
Fetch Type의 default 값: LAZY
@ManyToOne
Fetch Type의 default 값: EAGER
📌 지연 로딩 (Lazy)
- Entity 조회 시 연관된 Entity를 실제로 사용할 때까지 로드 X
장점
- 초기 조회 시 불필요한 데이터 로드하지 않아 메모리 사용량 적다
- 연관된 데이터를 필요시에만 로드하기에 전체 성능 개선
단점
- 연관된 데이터 사용할 때마다 추가 쿼리 발생 가능
- 프록시 객체로 인해 예상치 못한
LazyInitializationException
발생 가능 (Entity를 영속성 컨텍스트 밖에서 접근하려 할 때 발생)
📌 즉시 로딩 (Eager)
- Entity 조회할 때 연관된 모든 Entity 함께 조회
→ 주 Entity 로드할 때 관련된 모든 Entity 즉시 메모리에 로드
장점
- 이후 데이터 접근 시 추가 쿼리 발생 X
- 코드가 간단해지고, DB와의 상호작용 횟수 줄어 성능 개선
단점
- 불필요한 데이터 미리 로드할 수 있어 메모리 사용량 증가
- 복잡한 연관 관계 있는 경우, 한 번의 조회로 매우 큰 양의 데이터 로드될 수 있어 오히려 성능 저하 가능