내가 이해하기 쉽게 아이패드로 그림을 그려서 작성해 보았다.
OSIV라고도 하는 이 설정은
- 클라이언트 요청이 들어오면 디스패치에서 어디 Controller를 탈지 정해주고 이 과정에서 DB Session이 만들어진다(DB에 접근할 수 있는 세션).
- open-in-view가 false 상태이면 요청 후 session이 닫히는 타이밍은 그림에 3번에 위치에서 session이 닫힌다. (컨트롤러 단에서 Lazy로딩(지연로딩) 불가능) Controller 밑 view 단에서 Lazy 요청이 불가능하게 된다.
- open-in-view가 true 상태면 요청 후 session이 닫히는 타이밍은 그림에 4번에 위치에서 session이 닫힌다.
사용자에게 응답 또는 view가 렌더링 될 때까지 세션을 유지한다.
영속성 컨텍스트를 유지한다는 건, DB Connection 또한 계속 가지고 있다는 뜻이다.
실시간 트래픽이 중요한 어플리케이션에서는 DB Connection이 모자를 수 있다. 성능이 중요하다면 OSIV는 false로 설정하자.
참고자료