[20210614] Open Session In View In Spring

Open Session In View 에 대해 알아보자.

원래 영속성 컨텍스트는 트랜잭션과 생명주기를 같이한다. 그렇게 되면 트랜잭션이 종료되면 영속성 컨텍스트도 함께 사라진다.

Open Session In View

  • Session은 영속성 컨텍스트를 의미(예전에 영속성 컨텍스트를 session이라 불렀음)
  • 영속성 컨텍스트를 View까지 열어둔다는 뜻

왜 열어둘까?

  • 일반적으로 트랜잭션은 Service와 Repository 단에서 시작되고 종료됨
  • 만약 트랜잭션이 종료되는 시점에 영속성 컨텍스트도 사라진다면 View 단에서 dirty checking이랑 lazy loading이 불가능해짐
  • 스프링부트에서는 spring.jpa.open-in-view 속성을 기본적으로 true로 설정

OSIV On 장&단점

장점

  • Controller나 View 에서도 지연로딩이 가능해짐

단점

  • DB Connection resource를 오래 잡고 있으므로 자원 낭비
  • 극단적으로 모든 커넥션이 사용중이라면 장애 발생 가능

OSIV Off 장&단점

장점

  • DB와의 커넥션 리소스 절약

단점

  • 모든 지연로딩을 트랜잭션 안에서 처리해야함
  • 트랜잭션이 끝나기 전에 지연 로딩을 강제로 호출해 두어야 한다.
  • 이를 위한 별도 메소드를 추가로 정의해야 함.

정리

  • 서비스 서버에서는 일반적으로 OSIV를 끄고, 관리자 페이지와 같이 동시 접속이 많지 않은 상황에서는 편의를 위해 켤 수 있음.