[TIL] 46. JPA에서 Lazy Loading과 Eager Loading 장단점

김지수·2024년 7월 2일

TIL

목록 보기
47/53

Lazy Loading


Lazy Loading은 연관된 엔티티를 실제로 사용할 때까지 로딩을 지연시키는 방식입니다. 즉, 필요할 때까지 데이터를 가져오지 않고, 연관된 엔티티를 처음 접근할 때 데이터를 로드합니다.

장점

성능 최적화

초기 로딩 시 불필요한 데이터를 로드하지 않으므로, 성능이 향상될 수 있습니다.

지연 로딩의 유연성

연관된 엔티티를 반드시 필요할 때만 로드하므로, 데이터베이스에 불필요한 쿼리를 보내지 않습니다.

단점

지연 로딩 시 성능 저하

연관된 엔티티를 접근할 때 추가 쿼리가 실행되어 성능이 저하될 수 있습니다.

LazyInitializationException 발생 가능

트랜잭션이 종료된 후 연관된 엔티티에 접근하면 예외가 발생할 수 있습니다.

추가 복잡성

지연 로딩을 사용할 때는 데이터 접근 시점을 신중하게 관리해야 합니다.

Eager Loading


Eager Loading은 연관된 엔티티를 즉시 로딩하는 방식입니다. 즉, 엔티티를 조회할 때 관련된 모든 데이터를 한꺼번에 로드합니다.

장점

단순성

연관된 엔티티가 즉시 로딩되므로 코드가 단순해집니다.

예측 가능성

엔티티를 조회할 때 연관된 모든 데이터가 로드되므로, 추가적인 쿼리가 발생하지 않습니다.

LazyInitializationException 방지

연관된 엔티티가 미리 로드되므로 트랜잭션 종료 후에도 안전하게 접근할 수 있습니다.

단점

성능 저하

불필요한 데이터를 한꺼번에 로드하므로, 메모리 사용량이 증가하고 성능이 저하될 수 있습니다.

초기 로딩 지연

초기 엔티티 로딩 시 시간이 더 걸릴 수 있습니다.

데이터 과다 로딩

모든 연관된 엔티티를 한꺼번에 로드하므로, 필요하지 않은 데이터까지 가져오게 됩니다.

오늘의 회고


ManyToOne 의 fetchType 전략에 대해서 장단점을 다시 한번 공부하는 계기가 되었다.
면접 때 질문 잘할 수 있도록 숙지해야겠다.

profile
서툴고 부족한 점이 많지만, 배우고 발전하며 성장하기 위해 노력하겠습니다.

0개의 댓글