OSIV ( Open Session In View )

youngkyu MIn·2023년 12월 16일
0

OSIV

Spring JPA에서의 OSIV (Open Session In View)는 데이터베이스 세션을 HTTP 요청이 시작될 때 열고, HTTP 응답이 끝날 때까지 열어두는 패턴을 의미한다. 이 방법은 지연 로딩(Lazy Loading) 같은 JPA의 특징을 활용할 때 유용하다.

OSIV true

spring.jpa.open-in-view:true
  • 커넥션 유지: @Transactional 어노테이션이 붙은 메서드를 벗어나더라도 OSIV가 활성화되어 있으면 DB 커넥션을 계속 유지한다. 이는 API 응답이 나가고 화면이 렌더링될 때까지 영속성 컨텍스트를 유지한다는 것을 의미한다.

  • 지연 로딩 활용: 영속성 컨텍스트가 계속 유지되기 때문에, View Template이나 Controller 단에서도 지연 로딩으로 데이터를 효율적으로 가져올 수 있다. 지연 로딩은 영속성 컨텍스트가 살아 있어야만 가능하다.

  • DB 커넥션 사용 시간: OSIV는 DB 커넥션을 오랫동안 사용하게 만들 수 있다. 실시간 트래픽이 중요한 애플리케이션에서는 이로 인해 커넥션이 부족해질 수 있으며, 결국 성능 문제나 장애로 이어질 수 있다.

  • 외부 API 호출과의 관계: 로직 상에서 외부 API를 호출할 경우, 그 처리 시간만큼 DB 커넥션 리소스를 반환하지 못할 수 있다. 이는 성능 저하나 리소스 낭비로 이어질 수 있다.

  • 장점: OSIV의 주요 장점 중 하나는 지연 로딩을 적극 활용할 수 있다는 것이다. 이는 데이터 로딩을 보다 효율적으로 관리할 수 있게 해준다.


OSIV의 작동 원리

  • HTTP 요청 시작: 사용자의 HTTP 요청이 들어오면, Spring은 데이터베이스 세션을 연다.
  • 비즈니스 로직 처리: 서비스 또는 컨트롤러 계층에서 비즈니스 로직을 처리한다. 이 단계에서 필요한 데이터는 세션을 통해 지연 로딩할 수 있다.
  • HTTP 응답 종료: HTTP 응답이 완료되면, 열려 있던 세션이 닫힌다.

OSIV의 장점과 단점

장점

  • 지연 로딩을 편리하게 사용할 수 있다.
  • 애플리케이션 계층에서 복잡한 로딩 로직을 줄일 수 있다.

단점

  • 세션이 너무 오래 열려 있어서, 리소스 사용이 증가할 수 있다.
  • 데이터베이스 연결이 더 많이 필요할 수 있어, 성능 저하가 발생할 수 있다.
profile
한 줄 소개

0개의 댓글

관련 채용 정보