본문 바로가기

Web Sever 개발과 CS 기초/스프링

OpenInView의미와 꺼야 하는 이유

OpenInView 의미와 꺼야 하는 이유

OpenInView는 하이버네이트에서는, Open Session In View이고, JPA에서는 Open EntityManager In View이다.

OSIV가 켜져 있으면, DB 커넥션과 영속성 컨텍스트의 사용 범위를, API 응답이 끝날 때까지 유지한다.

Controller에서 return을 하기 직전까지, 영속성 컨텍스트를 사용할 수 있는 것이다.

 

장점으로는 영속성 컨텍스트를 이용한 지연로딩을 Controller 영역에도 사용할 수 있다.

문제점은, 데이터베이스 커넥션을 너무 유지된다.

트래픽이 많은 서비스의 경우, 각 쓰레드마다, 커넥션을 늦게 반납하여, 커넥션 고갈 문제가 생긴다.

끄는 방법

spring:
 jpa:
   open-in-view: false

설정을 통해, 영속성 컨텍스트 범위를 트랜잭션안으로 설정할 수 있다.

트랜잭션 밖에서, 지연로딩을 사용할 경우, LazyInitializationException 예외 발생을 주의해야 한다.

(영속성 컨텍스트가 자체가 지워졌기 때문에)