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 로딩으로 인한 문제를 방지하고 뷰 렌더링까지 데이터베이스 세션을 유지할 수 있도록 한다.
'WEB > spring' 카테고리의 다른 글
페이스북 로그인 연동 (0) | 2023.12.22 |
---|---|
관점 지향 프로그래밍과 객체 지향 프로그래밍을 합쳐서 간단하게 (0) | 2023.12.22 |
JPA에서 사용되는 EAGER(즉시로딩)과 LAZY(지연로딩) (0) | 2023.12.14 |
웹 페이지를 만들 때, 사진에서 엑박 생기는 이유와 UUIID 사용해서 이미지 이름 지정 (0) | 2023.12.14 |
@AuthenticationPrincipal 애너테이션 방식 (0) | 2023.12.05 |