OSIV와 성능 최적화

slee2·2022년 3월 22일
0

OSIV ON

spring.jpa.open-in-view: true 기본값

쉽게 말해 뷰 템플릿을 통해 표시할 때까지 영속성 생명 주기를 더 길게 늘려주는 것이다. 커넥션을 유지한다는 것 자체가 장점인 것이다.

단점은 너무 오래 유지하는 것이다. 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 어플리케이션에서는 커넥션이 모자랄 수 있다.

OSIV OFF

spring.jpa.open-in-view: false OSIV 종료

트랜잭션을 종료할때 영속성 컨텍스트를 닫고, 데이터베이스 커넥션도 반환한다.
이로인해 커넥션 리소스를 낭비하지 않게 된다.
단점은 이 방법을 사용한다면 모든 지연로딩을 트랜잭션 안에서 처리해야 한다. 이 예제해서 많은 지연로딩이 컨트롤러에 들어있는데, 이를 트랜잭션 안으로 넣어야 한다.

이 단점을 해결할 수 있는 몇 가지 방법이 있다.
그 중에서 추천하는 것은 OSIV를 끈 상태로,
커맨드와 쿼리를 분리하는 것이다.

쉽게 말해 컨트롤러는 컨트롤러 일만 하고, 쿼리 관련 지연로딩 관련 모든 트랜잭션 비즈니스 로직을 전용 서비스를 따로 만드는 것이다.

OrderService

  • OrderService : 핵심 비즈니스 로직
  • OrderQueryService : 화면이나 API에 맞춘 서비스 (주로 읽기 전용(readOnly) 트랜잭션 사용)

보통 서비스 계층에서 트랜잭션을 유지한다.

코딩만 생각하면 OSIV를 키는것이 편하고 좋다.
성능을 생각하면 OSIV를 끄는것이 유지보수하기 좋다.

오프셋을 통한 설계가 필요하다.

0개의 댓글

관련 채용 정보