자바 공부
2023.09.19 / JPA - 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER)
개발지혜
2023. 9. 19. 01:00
FetchType
엔티티 간의 관계를 로딩할 때 사용되는 전략을 결정하는 열거형.
어떤 상황에서 관련된 엔티티를 로딩할지 결정하는 중요한 요소이며,
데이터 액세스 패턴과 성능을 고려하여 적절한 타입을 설정해야함.
크게 두가지 타입으로 나뉘는데 Eager 전략과 Lazy 전략이 있다.
즉시로딩(EAGER)
- FetchType.EAGER로 설정하여 사용.
- 연관된 엔티티를 조회할 때, 즉시 관련된 엔티티를 모두 함께 로딩.
- 관련된 데이터를 한 번에 모두 가져오기 때문에 성능 저하 가능성이 있음.
- 일반적으로 연관된 객체가 항상 필요한 경우에 사용.
지연로딩(LAZY)
- FetchType.LAZY로 설정하여 사용.
- 연관된 엔티티를 실제로 사용할 때 까지 로딩 지연.
- 연관된 엔티티에 접근할 때 해당 엔티티 로딩.
- 연관된 객체가 필요한 경우에만 로딩되어 성능 최적화.
- 주의점은 지연로딩은 영속성 컨텍스트 내에서만 동작하기 때문에
속성 컨텍스트가 살아있는 동안에만 사용 가능.
* 영속성 컨텍스트
- JPA에서 엔티티 객체를 관리하는 논리적인 컨테이너.
- 엔티티 매니저를 통해 엔티티를 데이터배이스와 상호작용할 때 사용.
- 엔티티의 상태를 추적하고 엔티티를 데이터베이스와 동기화.
- 엔티티 조회 시 반복적인 데이터베이스 접근을 줄여주는 캐시역할도 함.
관련글