PSD( Private-Self-Development )

OSIV( Open Session In View ) 성능 최적화 본문

Backend/JPA

OSIV( Open Session In View ) 성능 최적화

chjysm 2022. 12. 12. 15:49

OSIV 란?

DB 커넥션 유지를 언제까지 할 것인가를 설정하는 값이다.

트랜젝션 시작 시(보통은 Service 단) 영속성 콘텍스트와 DB 커넥션을 연결하고 

이를 OSIV 설정 값에 따라 언제까지 할 것인가를 설정한다.

 

왜 연결을 유지해야 하는가?

지연 로딩을 위함(영속성 콘텍스트 유지)이다. 

지연 로딩으로 인해 실 엔티티 데이터를 조회하기 위해 연결을 유지해 둬야 한다.

 

단점

DB 커넥션을 너무 오래 유지하면  실시간 트래픽이 중요한 서비스의 경우 커넥션이 모자랄 수 있다.

이는 곳 장애로 이어진다.

 

설정 값에 따른 동작 

  • spring.jpa.open-in-view : true(기본값)
    • Response 가 사용자에게 완전히 반환될 때까지 영속성 콘텍스트를 유지한다.
    • 너무 오래 DB 커넥션을 유지한다는 단점이 있다.
  • spring.jpa.open-in-view : false
    • Transaction 종료 시(Service 단 까지) DB 커넥션을 닫고 영속성 콘텍스트를 사용하지 않는다. 
    • 지연 로딩을 트랜잭션 안으로 넣어야 하는 단점이 있다.

 

OSIV 설정을 끈 경우의 단점 보완법 

Command(핵심 비즈니스 로직)와 Query(화면이나 API 맞춘 서비스 - 읽기 전용 Transaction) 서비스를 따로 판다.

 

 


참고 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-API%EA%B0%9C%EB%B0%9C-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94/dashboard

 

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

스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

'Backend > JPA' 카테고리의 다른 글

JPA 조회 성능 최적화  (0) 2022.12.01
JPA 의 쿼리 작성 라이브러리  (0) 2022.10.20
JPA 값 타입  (0) 2022.10.14
JPA 의 프록시, 지연 로딩, 즉시 로딩  (0) 2022.10.12
JPA 의 상속  (0) 2022.10.11