상세 컨텐츠

본문 제목

[SPRING] JPA 활용2 | OSIV와 성능 최적화

JAVA/기본 & 강의복습

by ranlan 2021. 4. 21. 02:36

본문

728x90

OSIV(Open Session In View) ON

spring.jpa.open-in-view=true(기본값)

 

트랜잭션 시작(최초 데이터베이스 커넥션 시작)부터 API 응답이 완벽히 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 트랜잭션 시작 시 영속성 컨텍스트가 데이터베이스 커넥션을 가져온다.

- 장점) : 지연 로딩이 가능하고 코드의 중복이 줄어 유지보수성이 증가한다.

- 단점 : 커넥션을 오래 사용하기 때문에 실시간 트래픽이 중요할 경우 커넥션이 모자라 장애를 발생시킬 수 있다.

 

 

OSIV(Open Session In View) OFF

spring.jpa.open-in-view=false

 

OFF

트랜잭션이 끝나면 영속성 컨텍스트를 닫고 데이터베이스 커넥션을 반환한다.

- 장점 : 리소스를 낭비하지 않는다.

- 단점 : 모든 지연로딩을 트랙잭션 안에서 처리해야하며 view template이 지연로딩 안에서 작동하지 않는다. 트랜잭션이 끝나기 전 강제로 지연로딩을 호출해야한다.

 

 

OSIV 활용

1. 커맨드와 쿼리 분리

OSIV를 끈 상태에서 복잡성을 관리하는 방법으로 복잡한 화면을 출력하기 위한 쿼리는 화면에 맞춰 성능을 최적화하는 것이 중요하다. 서비스를 핵심 비지니스 로직 / 화면이나 API에 맞춘 로직(주로 읽기전용 트랜잭션)으로 나눠 관리함으로써 유지보수성 높인다.

2. 서비스 특성에 맞는 OSIV

트래픽이 많은 실시간 API에서는 OSIV를 끄고 트래픽이 많지 않고 커넥션을 많이 사용하지 않는 서비스에서는 OSIV를 킨다.

 

 

 

 

728x90

관련글 더보기

댓글 영역