
OSIV(Open Session In View)란 세션 관리 전략 중 하나로, 영속성 컨텍스트를 View 영역까지 열어 두는 것을 말한다.
이 전략은 기본적으로 spring.jpa.open-in-view가 true로 설정되어 있으며, 상황에 맞게 전략을 유연하게 가져갈 수 있다.

OSIV ON일 경우, 데이터베이스 커넥션 시작 시점(트랜잭션 시작 시점)부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 이 설정을 통해 영속성 컨텍스트가 계속 열려 있기 때문에 view template이나 API 컨트롤러에서 지연 로딩이 가능하다.
하지만, 이 전략은 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하므로 실시간 트래픽이 중요한 애플리케이션에서는 커넥션 부족이 발생할 수 있다.

OSIV OFF로 설정하면, 트랜잭션이 종료될 때 영속성 컨텍스트가 닫히고, 데이터베이스 커넥션도 반환된다. 이렇게 하면 커넥션을 더 이상 유지하지 않으므로 커넥션 리소스를 낭비하지 않는다.
하지만, OSIV를 끄면 모든 지연로딩을 트랜잭션 내에서 처리해야 한다. 즉, 트랜잭션이 끝나기 전에 지연 로딩을 강제로 호출해 두어야 하므로 코드가 복잡해질 수 있다.
OSIV OFF 상태에서 복잡성을 관리하는 좋은 방법이다.
화면에 맞춘 조회 api (query) 는 코드가 변경될 가능성이 많지만, 핵심 비즈니스 로직 api (command) 들은 자주 변경되지 않는다. 따라서 이 둘의 라이프 사이클이 다르기 때문에 이 둘을 명확하게 분리하는 것이 유지보수 관점에서 좋다.