OSIV (open-session-in-view / open-in-view)

최준호·2022년 5월 18일
0

업무

목록 보기
10/31
post-thumbnail

💬OSIV를 왜 궁금해짐?

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란?

OSIV의 default일 경우 true의 값으로 다음과 같이 적용되어진다. 영속성 컨텍스트의 범위가 트랜잭션의 범위보다 크기 때문에 filter, interceptor나 controller에서도 영속성 컨텍스트에 접근할 수 있게된다.

하지만 OSIV를 false로 주었을 경우 다음과 같이 트랜잭션범위와 영속성 컨텍스트의 생존 범위가 동일해지기 때문에 filter, interceptor와 controller에서 접근할 수 없게 되므로 service와 repository에서 영속성 컨텍스트에 접근하여 데이터를 가져와야만 하게된다.

👊결론

OSIV를 꼭 false로 세팅할 필요는 없지만 true로 놓고 사용하게 되면 jpa를 사용할 때 영속성 컨텍스트를 길게 사용하는 만큼 connection의 사용 시간도 늘어나게 되므로 성능적 측면으로 볼때 false로 세팅해주는게 좀 더 좋은 설정이 될수 있다. 하지만 프로젝트 구조나 특성상 영속성의 범위가 filter와 controller에서도 사용해야할 경우 굳이 변경할 필요까진 없다!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글