WEB/spring
JPA open-in-view와 Lazy 연관
bpeach
2023. 12. 14. 19:12
open in view는 주로 스프링과 JPA 또는 Hibernate에서 관리되는 트랜잭션 범위에서 데이터베이스 세션을 유지하는 방식
1. open-in-view : false
- 클라이언트로 부터 요청이 들어온다.
- 디스패처에서 Controller로 전달된다. 이때 세션이 말들어진다. (세션 : DB를 접근할 수 있는 권한)
- Controller은 Service에게 전달하고 Service는 Repository에게 전달한다.
- 연속성 컨테이너를 지나 DB로 부터 데이터를 받고 클라이언트에게 응답하기 위해 위의 과정을 돌아간다.
- 이때 Open In View가 False라면 Service에서 Controller로 가기 전에 세션이 종료된다.
이렇게 되면, Controller는 Lazy로딩이 지원 불가능해진다. Lazy 로딩을 시도할 때 사용된 세션이나 영속성 컨테이너가 이미 종료되 었기 때문에 LazyInitializtionException이 발생한다.
2.open-in-view : true
OPEN IN VIEW를 True로 설정하면 스프링은 HTTP 요청이 처리될 때마다 Hibernate 세션을 열고 요청이 완료될 때 세션을 닫지 않고 유지하여 사용자에게 응답을 보낼 때까지 DB 연결을 유지한다. 그래서 LAZY 로딩이 가능하다.
웹에서 데이터를 뷰에 표시할 때 LAZY 로딩을(필요한 데이터만 가져오기 위해) 사용하기 위해서는 OPEN IN VIEW 설정을 활성화(True)하여 LAZY 로딩으로 인한 문제를 방지하고 뷰 렌더링까지 데이터베이스 세션을 유지할 수 있도록 한다.