본문 바로가기
  • Adillete
【와신상담】

[jpa] OSIV(Open Session In View)

by 아딜렛 2025. 3. 12.
OSIV(Open Session In View): 영속성 컨텍스트를 뷰까지 열어 두는 기능

 

스프링 프레임워크 속 OSIV

 

OSIV 방식


ⓐ비즈니스 계층에서 트랜잭션으로 사용
ⓑ클라이언트의 요청이 들어오면 영속성 컨텍스트를 생성
ⓒ서비스 계층에서 @Transactional 으로 트랜잭션을 시작할때 1번에서 미리 생성해둔  영속성컨텍스트를 찾아와서 트랜잭션을 시작
ⓓ서비스 계층이 끝나면 트랜잭션을 커밋하고 영속성 컨텍스트를 플러시
(해당 시점은 트랜잭션은 끝나도 영속성 컨텍스트는 지속됨? 플러시하고 clear 안해서 지속되는건가?

a: no close()를 안해서 그런거임 clear를 하면 준영속성 컨텍스트가 되는거임) 
ⓔ컨트롤러와 뷰까지 영속성 컨텍스트 유지 조회한 엔티티가 영속 상태를 유지

ⓕ서블릿이나 스프링 인터셉터로 요청 돌어오면 영속성 컨텍스트를 종료


osiv의 장점
클라이언트의 요청이 들어올때 영속성 컨텍스트를 생성 -> 요청 종료해달라고 할때까지 하나의 영속성 컨텍스트를 유지
엔티티의 수정은 트랜잭션이 있는 계층에서만 가능

단점:

①영속성 컨텍스트와 데이터 베이스가 직접 연결되어 데이터베이스 자원을 비효율적으로 사용할수 있음
②뷰 단계의 엔티티를 수정하고 비즈니스 로직을 수행하면 엔티티가 수정될수 있다.
③osiv를 적용하면 하나의 영속성 컨텍스트를 여러 트랜잭션이 공유할수도 있다.
④프레젠테이션 계층에서 엔티티의 값을 변경할때 변경된 엔티티 영속성 컨텍스트에 관리중이기 때문에 변경감지의 대상으로 다른 트랜잭션시 함께 변경될수 있음

 

[참고]

https://ykh6242.tistory.com/entry/JPA-OSIVOpen-Session-In-View%EC%99%80-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94

 

JPA - OSIV(Open Session In View) 정리

OSIV(Open Session In View) OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 영속성 컨텍스트가 유지되면 엔티티도 영속 상태로 유지된다. 뷰까지 영속성 컨텍스트가 살아있다면

ykh6242.tistory.com