Spring JPA OSIV전략

HakJun·2022년 2월 21일
1

SpringBoot_JPA_BlogProject

목록 보기
20/25

Spring2.0부터 적용된 기존의 Spring Transaction 전략보다 과부화 및 단계수를 줄이는 전략에 대해 공부하였다.

기존과 다른점은 Request->Controller layer에서 영속성 context가 시작되고, Controller와 Service사이에서 Transaction, Jdbc가 연결된다.
그리고 돌아오는 Service ->Controller에서 JDBC,Transaction이 종료됨으로써, 프로그램 과부화 및 단계수를 줄일 수 있다. 그리고 Controller->Response layer에서 영속성Context를 종료시킨다.

EX)
야구 팀, 플레이어 TABLE이 있다고 가정하자.

ManytoOne의 기본전략은 Eager, 양속성 context에서 '이대호'를 SELECT할 때 Team id
로 연결된 이대호 정보와, 롯데 팀정보를 같이 들고온다.

거기서 Repository 에서 팀 id와 연결된 이대호 정보 받아서, 그대로 Service로 이대호 정보를 보낸다.

Service에서 Controller로 넘어갈때,
.JDBC종료,Transaction 종료가 이루어진다.

이것은->Lazy(지연로딩) 전략으로 바꿀 수 있다.

이대호 정보를 요청했을때, 영속성 context 1차캐시에 롯데 팀정보는 안들고 온다.

똑같은 순서 이후 Controller에서 View를 만들 때 롯데 팀정보는 호출할 수 없다.

영속성 context에 롯데팀 Proxy 객체(데이터가 없는,연결된 빈 객체)를 들고온다.

Controller 까지 이대호-Proxy 객체가 존재한다.

그리고 Controller에서 롯데Proxy를 호출하면 -> 영속성context의 롯데팀 Proxy 객체에서 응답해서, JDBC커넥션을 시작시켜서, DB에서 롯데팀 정보를 가져온다.

그리고 커넥션을 종료시킨다.

그러면 Controller에 롯데 팀 객체가 추가된다.

Controller 에서 CUD는 불가능하다, Transaction이 종료되었기 때문이다.

//YAML
jpa:
    open-in-view: true

디폴트값으로, 이경우에는 Lazyload가 가능하다.

false로 하게 되면, 영속성 context 시작지점 및 종료가 Service 시점으로 변경되어서, Lazy load가 불가능하다.

//서블릿이란?

자바를 사용하여 웹을 만들기 위해 필요한 기술입니다.

클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다
//

이미지 출처
https://www.youtube.com/watch?v=fSXh4hWJtKo&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=47
https://getinthere.tistory.com/20

profile
백엔드 & 전공 공부

0개의 댓글