본문 바로가기

백/spring

스프링부트의 트랜잭션, 스프링 jpa의 osiv전략

전통적인 스프링의 트랜잭션. 여기엔 문제점이 있음!

 

OSIV(Open Session In View)

OSIV는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다.

yml 이거 false로 바꾸면 레이지로딩 불가(영속성 컨텍스트가 닫히므로)

 

위의 경우 LAZY전략으로 조회시 롯데팀에 대한 정보가 조회되지 않는다.

이유는 서비스에서 영속성 컨텍스트가 종료되었기 때문이다.

이와 같은 경우를 해결하기 위해 영속성 컨텍스트 종료를 컨트롤러에서 종료하게 하여,

컨트롤러에서도 롯데팀에 대해서 조회 할 수 있게 한다.

단, 이때 프록시를 통해 정보를 조회(s) 할 수는 있으나, I, U, D와 같은 기능은 할 수 없다.(트랜잭션이 종료되었기 때문에)

 

정리해서 다시 그리면 아래와 같음

- 세션의 시작(사용자가 request한 시점)은 서블릿이 시작되는 시점 부터~ (세션은 영속성 컨텍스트를 포함)

- 트랜잭션의 시작은 서비스 레이어부터, JDBC 커넥션도 이 시점부터.

- 트랜잭션의 종료는 서비스 계층에서 종료, JDBC 커넥션도 이 시점 부터 종료.

- 세션은 컨트롤러 영역까지 끌고 가기 때문에 영속성이 보장되어 select가 가능해지고 lazy-loading이 가능해진다.

eager전략이면 바로 팀 객체를 들고가지만 lazy전략이면 팀 객체가 아니라 팀 프록시가됨. 영속성이 보장되어 트랜잭션 종료 후에도 호출가능.

 

아직 무슨소린지 모르겠다,, 나중에 예시 추가할 예정

' > spring' 카테고리의 다른 글

스프링 기본파싱전략과 json통신  (0) 2023.07.30
스프링 시큐리티 2- ng처리  (0) 2023.07.12
스프링 시큐리티 1  (0) 2023.07.11
파일 업로드 부터 수정까지  (0) 2023.06.28
트랜잭션이란!??!?!!?!??!  (0) 2023.06.22