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
출처 : https://jaimemin.tistory.com/2080
'개발 > 스프링 개념' 카테고리의 다른 글
[Spring] Session이란? (0) | 2023.01.25 |
---|---|
[Spring] Select에 @Transaction을 사용하는 이유 (0) | 2023.01.20 |
[Spring] Spring 웹 계층 구조 (0) | 2023.01.20 |
[Spring] 의존성 주입이란? (0) | 2023.01.13 |
[Spring] 영속성 컨텍스트와 @Transactional 어노테이션 (0) | 2022.11.19 |