-
OSIV(Open Session In View) default 값을 사용해야할까?스터디/JPA 2023. 7. 31. 00:08728x90
OSIV에 대해 공부하면서, 기본 설정값을 그대로 사용하는 것이 적절한지에 대한 의문이 들었습니다. 이에 관해 정리하여 포스팅을 작성하려고 합니다.
OSIV란
OSIV는 영속성 컨텍스트를 View 영역까지 열어두는 기능입니다. 즉, View Layer에서도 LazyLoading으로 엔티티를 조회할 수 있다는 말입니다.
OSIV ture일 경우 (default)
OSIV 전략은 트랜잭션이 시작되는 시점, 즉 최초 데이터베이스 커넥션이 생성될 때부터 API 응답이 완료될 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지하는 방식입니다. 이로 인해 View Layer에서 지연 로딩을 활용할 수 있습니다.
또한, View Layer에서는 트랜잭션 범위에 포함되지 않기 때문에 엔티티를 수정해도 쿼리가 발생하지 않습니다. 즉, 엔티티를 수정할 수 없습니다.
OSIV default로 사용 시
개발 편의성 상승
View Layer에서 엔티티에 대한 조회를 수행할 수 있어 간단한 API의 경우 개발 편의성이 상승합니다.
커넥션 점유 문제 발생
View Layer에서 조회가 가능해서 확장성은 좋지만, 커텍션을 오래가지고 있을 수 있는 위험성이 있습니다. 이로 인해 커넥션이 부족해져 시스템 장애가 일어날 수도 있습니다.
결론
저는 트래픽이 많은 API에서는 OSIV를 비활성화하고, 트래픽이 적거나 개발 리소스를 절약하고 싶은 경우, 또는 화면 변경이 잦은 경우에는 OSIV를 활성화하여 사용하려고 합니다.
728x90'스터디 > JPA' 카테고리의 다른 글
단방향 @OneToMany를 지양해야 하는 이유 (0) 2023.08.15