OSIV란 Open-Session-In-View의 약자로 JPA의 영속성을 관리하는 범위에 대해 설정하는 값이다. 해당 내용을 궁금하게 된 이유는
spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
service를 설계한던 중 다음과 같은 warning 메세지를 보게 되었는데 최대한 warning 메세지를 없애가면서 작업을 하려고 해서 찾게 되었다.
OSIV의 default일 경우 true
의 값으로 다음과 같이 적용되어진다. 영속성 컨텍스트의 범위가 트랜잭션의 범위보다 크기 때문에 filter, interceptor나 controller에서도 영속성 컨텍스트에 접근할 수 있게된다.
하지만 OSIV를 false
로 주었을 경우 다음과 같이 트랜잭션범위와 영속성 컨텍스트의 생존 범위가 동일해지기 때문에 filter, interceptor와 controller에서 접근할 수 없게 되므로 service와 repository에서 영속성 컨텍스트에 접근하여 데이터를 가져와야만 하게된다.
OSIV를 꼭 false로 세팅할 필요는 없지만 true로 놓고 사용하게 되면 jpa를 사용할 때 영속성 컨텍스트를 길게 사용하는 만큼 connection의 사용 시간도 늘어나게 되므로 성능적 측면으로 볼때 false로 세팅해주는게 좀 더 좋은 설정이 될수 있다. 하지만 프로젝트 구조나 특성상 영속성의 범위가 filter와 controller에서도 사용해야할 경우 굳이 변경할 필요까진 없다!