개발의 시작과 끝

2023.09.19 / JPA - 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER) 본문

자바 공부

2023.09.19 / JPA - 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER)

개발지혜 2023. 9. 19. 01:00

FetchType

엔티티 간의 관계를 로딩할 때 사용되는 전략을 결정하는 열거형.

어떤 상황에서 관련된 엔티티를 로딩할지 결정하는 중요한 요소이며,

데이터 액세스 패턴과 성능을 고려하여 적절한 타입을 설정해야함.

 

크게 두가지 타입으로 나뉘는데 Eager 전략과 Lazy 전략이 있다.

 

즉시로딩(EAGER)

- FetchType.EAGER로 설정하여 사용.

- 연관된 엔티티를 조회할 때, 즉시 관련된 엔티티모두 함께 로딩.

- 관련된 데이터를 한 번에 모두 가져오기 때문에 성능 저하 가능성이 있음.

- 일반적으로 연관된 객체가 항상 필요한 경우에 사용.

 

지연로딩(LAZY)

- FetchType.LAZY로 설정하여 사용.

- 연관된 엔티티를 실제로 사용할 때 까지 로딩 지연.

- 연관된 엔티티에 접근할 때 해당 엔티티 로딩.

- 연관된 객체가 필요한 경우에만 로딩되어 성능 최적화.

- 주의점은 지연로딩은 영속성 컨텍스트 내에서만 동작하기 때문에

  속성 컨텍스트가 살아있는 동안에만 사용 가능.

 

* 영속성 컨텍스트

- JPA에서 엔티티 객체를 관리하는 논리적인 컨테이너.

- 엔티티 매니저를 통해 엔티티를 데이터배이스와 상호작용할 때 사용.

- 엔티티의 상태를 추적하고 엔티티를 데이터베이스와 동기화.

- 엔티티 조회 시 반복적인 데이터베이스 접근을 줄여주는 캐시역할도 함.

 

 

관련글

- http://jaynewho.com/post/39