Lazy Loading은 연관된 엔티티를 실제로 사용할 때까지 로딩을 지연시키는 방식입니다. 즉, 필요할 때까지 데이터를 가져오지 않고, 연관된 엔티티를 처음 접근할 때 데이터를 로드합니다.
성능 최적화
초기 로딩 시 불필요한 데이터를 로드하지 않으므로, 성능이 향상될 수 있습니다.
지연 로딩의 유연성
연관된 엔티티를 반드시 필요할 때만 로드하므로, 데이터베이스에 불필요한 쿼리를 보내지 않습니다.
지연 로딩 시 성능 저하
연관된 엔티티를 접근할 때 추가 쿼리가 실행되어 성능이 저하될 수 있습니다.
LazyInitializationException 발생 가능
트랜잭션이 종료된 후 연관된 엔티티에 접근하면 예외가 발생할 수 있습니다.
추가 복잡성
지연 로딩을 사용할 때는 데이터 접근 시점을 신중하게 관리해야 합니다.
Eager Loading은 연관된 엔티티를 즉시 로딩하는 방식입니다. 즉, 엔티티를 조회할 때 관련된 모든 데이터를 한꺼번에 로드합니다.
단순성
연관된 엔티티가 즉시 로딩되므로 코드가 단순해집니다.
예측 가능성
엔티티를 조회할 때 연관된 모든 데이터가 로드되므로, 추가적인 쿼리가 발생하지 않습니다.
LazyInitializationException 방지
연관된 엔티티가 미리 로드되므로 트랜잭션 종료 후에도 안전하게 접근할 수 있습니다.
성능 저하
불필요한 데이터를 한꺼번에 로드하므로, 메모리 사용량이 증가하고 성능이 저하될 수 있습니다.
초기 로딩 지연
초기 엔티티 로딩 시 시간이 더 걸릴 수 있습니다.
데이터 과다 로딩
모든 연관된 엔티티를 한꺼번에 로드하므로, 필요하지 않은 데이터까지 가져오게 됩니다.
ManyToOne 의 fetchType 전략에 대해서 장단점을 다시 한번 공부하는 계기가 되었다.
면접 때 질문 잘할 수 있도록 숙지해야겠다.