OSIV (Open Session In View)

KangHo Lee's avatar
Nov 29, 2024
OSIV (Open Session In View)
💡
스프링 OSIV 설정은 HTTP 요청이 완료될 때까지 데이터베이스 세션을 열어둘지 여부를 결정하는 설정입니다.
// application.properties 에서 설정합니다. spring.jpa.open-in-view=true or false

1. OSIV true 일 때

장점

  1. 지연 로딩 지원
      • 지연 로딩된 엔티티에 대해 뷰 렌더링 시점까지 데이터베이스 세션이 열려 있어 안전하게 접근할 수 있습니다.
      • 뷰 계층에서 엔티티의 지연 로딩을 원활하게 수행할 수 있습니다.
  1. 코드 간결화
      • 데이터베이스 세션이 유지되므로, 서비스 계층에서 필요한 모든 데이터를 미리 로드할 필요가 없어 코드가 간결해집니다.
  1. 개발 용이성
      • 개발자가 데이터베이스 세션의 범위를 명확히 관리하지 않아도 되므로, 개발과 디버깅이 용이합니다.
      • 뷰 계층에서 바로 엔티티에 접근할 수 있습니다.

단점

  1. 성능 저하
      • 데이터베이스 세션이 HTTP 요청이 완료될 때까지 유지되므로, 오래 지속되는 연결로 인해 성능이 저하될 수 있습니다.
      • 이는 데이터베이스 리소스의 비효율적 사용으로 이어질 수 있습니다.
  1. 메모리 사용 증가
      • 지연 로딩된 엔티티가 뷰 렌더링 시점까지 메모리에 유지되므로, 메모리 사용량이 증가할 수 있습니다.
      • 이는 메모리 관리에 신경 써야 하는 상황을 초래할 수 있습니다.
  1. 잠금 문제
      • 긴 트랜잭션으로 인해 데이터베이스 잠금이 오래 지속될 수 있으며, 이는 다른 트랜잭션의 성능에 영향을 미칠 수 있습니다.

2. OSIV false 일 때

장점

  1. 트랜잭션 경계 명확화
      • 데이터베이스 세션이 서비스 계층에서 시작되고 종료되므로, 트랜잭션 경계가 명확해집니다.
      • 트랜잭션 관리와 디버깅을 용이하게 합니다.
  1. 성능 최적화
      • 데이터베이스 세션이 짧게 유지되므로, 데이터베이스 연결의 오랜 유지로 인한 성능 저하를 방지할 수 있습니다.
      • 데이터베이스 리소스의 효율적인 활용을 돕습니다.
  1. 메모리 사용 절약
      • 지연 로딩된 엔티티가 뷰 렌더링 시점에 로드되지 않으므로, 불필요한 메모리 사용을 줄일 수 있습니다.
      • 메모리 사용량을 최적화하고, 애플리케이션의 안정성을 향상시킵니다.

단점

  1. 지연 로딩 문제
      • OSIV가 비활성화되면 지연 로딩된 엔티티에 접근하려고 할 때 LazyInitializationException이 발생할 수 있습니다. 이를 방지하기 위해 필요한 데이터를 서비스 계층에서 미리 로드해야 합니다.
  1. 코드 복잡도 증가
      • 서비스 계층에서 필요한 모든 데이터를 명시적으로 로드해야 하므로, 코드의 복잡도가 증가할 수 있습니다.
      • 이는 개발자에게 추가적인 작업을 요구할 수 있습니다.
  1. 개발 부담 증가
      • 데이터베이스 세션의 범위를 명확히 관리해야 하므로, 개발자가 트랜잭션과 데이터 로딩을 더 신중하게 관리해야 합니다.
 
Share article

devleekangho