본문 바로가기
목차
Spring/Spring boot

스프링부트 강좌 29강(블로그 프로젝트) - 영속성 컨텍스트와 더티체킹

by 지각생 2022. 1. 22.
728x90

출처:

https://www.youtube.com/watch?v=dDsI1J4QC6g&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=31 

Insert한다고 치면

 

Controller에서 user객체 만들어서 save하면

 JPA 1차 캐시안에 user객체가 쌓인다.

그리고 DB에 넣는다.

 

만약 예를 들어 db3개가 있다면

4번째가 생긴다

그럼 1차 캐시에

user가 생긴걸

영속화라 한다

그리고 db에 넣는걸 flush라 한다.

 

예로 창고에 물건이 꽉차면 다른 창고에 넣어두면 비울수 있다.

 

대신 다른건 JPA 1차 캐쉬에 user가 날라가지 않는다.

 

그래서 DB로 부터 가져오지 않고 JPA에서 Controller로 바로 회신가능

 

여기서 2번 Update하고 싶다

 

그럼 2번을 JPA 1차 캐시에 가져온다.

그럼 이 상황은 위와 같다.

 

그리고나서 영속화된 2번user를 변경한다.

이렇게 변경한걸 다시 save하려 하면

save하려던 것과 기존 영속화된 2번  user를 비교했더니 같다.

그럼 바뀐 값만 update해준다.

그 후 flush해서 update된 2번 user를 DB 2번에 넣으면 update가 완료된다.

 

이 함수가 종료될때 Transactional이 뭘 하냐면

함수 종료시에 자동 commit이 됨.

이게 왜 update가 되냐면

언제 영속화 되냐면

47행 이때 영속화 된다

 

영속화된 후 

50, 51행에서 user오브젝트 변경 (이건 영속화된 오브젝트임)

그럼 영속화된거랑 변경된걸 비교해서 자동으로 변경됐다고 인식을 함.

그 뒤 종료되면 commit으로 DB에 업데이트해 준다.

이걸 더티체킹이라한다.

728x90

댓글