Yebali

Spring JPA의 OSIV 본문

Spring

Spring JPA의 OSIV

예발이 2021. 10. 11. 20:38

OSIV란?

Open Session In View의 줄임말. 하이버네이트에서 사용하는 단어이다.
JPA에서는 Open EntityManager In View가 정식 명칭이지만 관례상 OSIV라고 한다.

 

OSIV는 영속성 컨텍스트의 생존 범위를 지정하는 것이다.

 

OSIV ON!

'spring.jpa.open-in-view : true(기본값)'일 때는 커넥션 시작부터 API응답이 끝날 때까지 영속성 컨텍스트가 유지된다.

위의 설정에서는 Controller에서도 지연 로딩을 사용 할 수 있다.
영속성 컨텍스트는 기본적으로 DB 커넥션을 유지하기 때문에 이것 자체가 큰 장점이지만 
DB커넥션을 오랫동안 사용하기 때문에 실시간 트래픽이 몰리면 커넥션이 말라버린다(부족해진다).

 

OSIV OFF!

'spring.jpa.open-in-view : false'일 때는, 트랜잭션이 종료될 때 영속성 컨텍스트를 닫고 DB커넥션도 반환한다. 따라서 커넥션 리소스를 낭비하지 않는다.
단, OSIV를 끄면 모든 지연로딩을 트랜잭션 안에서 처리해야 한다.