본문 바로가기
JPA

[JPA] OSIV(Open Session In View)

by 감자b 2024. 12. 29.

OSIV

최초 데이터베이스 커넥션 시작 시점(트랜잭션 시작)부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지시키는 기능이다.

이로 인해 View Template이나 API 컨트롤러에서 지연 로딩이 가능해진다.

(지연 로딩은 영속성 컨텍스트가 살아있어야 하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지)

하지만 해당 기능은 오랜 시간 데이터베이스 커넥션 리소스를 사용하므로 실시간 트래픽이 중요한 애플리 케이션에서는 커넥션이 모자라 장애로 이어지는 문제가 발생할 수 있다.

spring.jpa.open-in-view : 기본값 true
spring.jpa.open-in-view: false : OSIV 종료

OSIV를 끄면 트랜잭션을 종료할 때 영속성 컨텍스트를 닫고, 데이터베이스 커넥션도 반환.

즉 View template에서는 지연 로딩이 동작하지 않기에 모든 지연 로딩을 트랜잭션 끝나기 전에 강제로 호출해야 한다.

이로 인해 트랜잭션 안에서 복잡성이 증가할 수 있는데, 이는 Command와 Query를 분리하여 복잡성을 관리할 수 있다.

핵심 비즈니스, 화면이나 API 스펙에 맞춘 서비스 이 둘의 관심사를 명확하게 분리한다.

  • XxxService: 핵심 비즈니스 로직
  • XxxQueryService: 화면, API에 맞춘 서비스 (주로 읽기 전용 트랜잭션을 사용)

참고

 

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 강의 | 김영한 - 인프런

김영한 | 스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 스프링 부트, 실무에서 잘 쓰고 싶다면? 복잡한 문제까지 해결하는 힘을 길

www.inflearn.com

 

'JPA' 카테고리의 다른 글

[Spring Data JPA] @Modifying  (0) 2024.12.30
[Spring Data JPA] Page, Slice  (1) 2024.12.29
[JPA] JPQL  (0) 2024.12.29
[JPA] 데이터 타입  (0) 2024.12.29
[JPA] 영속성 전이, 고아 객체  (0) 2024.12.29