개발/스프링 개념

[Spring] Open-In-View란?

용꿀 2022. 11. 19. 14:55

Open-In-View는 Open-Session-In-View 또는 Open-EntityManager-In-View라고 불리기도 한다.

 

Default값은 true이며, 이 경우에는 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다.

API에서는 클라이언트에게 응답될 때까지, View에서는 View가 렌더링될 때까지 영속성 컨텍스트가 살아있다.

 

아래처럼 application.properties에서 false로 설정해주었다면, 영속성 컨텐스트는 트랜잭션을 종료할 때 같이 닫히게 된다.

spring.jpa.open-in-view=false

위 그림은 OSIV(Open-Session-In-View)가 True일 때를 보여준다. 

위 그림은 OSIV(Open-Session-In-View)가 False일 때를 보여준다. 

 

OSIV가 True일 때의 장점

  • 엔티티 수정이 트랜잭션이 있는 계층에서만 동작
  • 트랜잭션이 없는 프레젠테이션 계층에서는 Lazy Loading을 포함한 조회만 가능

 

OSIV가 True일 때의 단점

  • PersistenceContext를 여러 트랜잭션이 공유할 수 있어 문제가 발생 가능(특히 Rollback 시 골치 아픔)
  • 프레젠테이션 계층에서 Lazy Loading에 의해 SQL이 실행되기 때문에 쿼리 튜닝 시에 관리 포인트가 넓어짐
  • OSIV는 엔티티를 영속 상태로 유지하기 때문에 DB 커넥션 리소스를 길게 사용해 실시간 트래픽이 중요한 서비스일 경우 커넥션이 모자라 장애 발생 가능

 

출처 : https://gracelove91.tistory.com/100

 

[JPA]open-session-in-view 를 알아보자

Open-In-View 또는 Open-Session-In-View 또는 Open-EntityManager-In-View 란? 관례상 OSIV 라고 한다. true일 경우 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. Api라면 클라이언트에게 응답될

gracelove91.tistory.com

출처 : https://jaimemin.tistory.com/2080

 

[SpringBoot] OpenSessionInView

개요 JPA를 사용하는 서비스를 개발하는 도중 Controller에서 데이터를 변경했는데도 불구하고 DB에 변경이 되지 않는 문제가 발생했습니다. 검색해보니 이는 Transactional 범위 밖에서 데이터를 변경

jaimemin.tistory.com