WEB/spring

JPA open-in-view와 Lazy 연관

bpeach 2023. 12. 14. 19:12

open in view는 주로 스프링과 JPA 또는 Hibernate에서 관리되는 트랜잭션 범위에서 데이터베이스 세션을 유지하는 방식

 

 

1. open-in-view : false

  1. 클라이언트로 부터 요청이 들어온다.
  2. 디스패처에서 Controller로 전달된다. 이때 세션이 말들어진다. (세션 : DB를 접근할 수 있는 권한)
  3. Controller은 Service에게 전달하고 Service는 Repository에게 전달한다.
  4. 연속성 컨테이너를 지나 DB로 부터 데이터를 받고 클라이언트에게 응답하기 위해 위의 과정을 돌아간다.
  5. 이때 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 로딩으로 인한 문제를 방지하고 뷰 렌더링까지 데이터베이스 세션을 유지할 수 있도록 한다.