Spring JPA에서의 OSIV (Open Session In View)는 데이터베이스 세션을 HTTP 요청이 시작될 때 열고, HTTP 응답이 끝날 때까지 열어두는 패턴을 의미한다. 이 방법은 지연 로딩(Lazy Loading) 같은 JPA의 특징을 활용할 때 유용하다.
spring.jpa.open-in-view:true
커넥션 유지: @Transactional 어노테이션이 붙은 메서드를 벗어나더라도 OSIV가 활성화되어 있으면 DB 커넥션을 계속 유지한다. 이는 API 응답이 나가고 화면이 렌더링될 때까지 영속성 컨텍스트를 유지한다는 것을 의미한다.
지연 로딩 활용: 영속성 컨텍스트가 계속 유지되기 때문에, View Template이나 Controller 단에서도 지연 로딩으로 데이터를 효율적으로 가져올 수 있다. 지연 로딩은 영속성 컨텍스트가 살아 있어야만 가능하다.
DB 커넥션 사용 시간: OSIV는 DB 커넥션을 오랫동안 사용하게 만들 수 있다. 실시간 트래픽이 중요한 애플리케이션에서는 이로 인해 커넥션이 부족해질 수 있으며, 결국 성능 문제나 장애로 이어질 수 있다.
외부 API 호출과의 관계: 로직 상에서 외부 API를 호출할 경우, 그 처리 시간만큼 DB 커넥션 리소스를 반환하지 못할 수 있다. 이는 성능 저하나 리소스 낭비로 이어질 수 있다.
장점: OSIV의 주요 장점 중 하나는 지연 로딩을 적극 활용할 수 있다는 것이다. 이는 데이터 로딩을 보다 효율적으로 관리할 수 있게 해준다.