나의 개발 성장일지

영속성컨텍스트와 더티체킹 본문

개인 공부/스프링부트 개념정리

영속성컨텍스트와 더티체킹

qkq5821 2022. 11. 22. 17:20



https://ict-nroo.tistory.com/130

[JPA] 영속성 컨텍스트와 플러시 이해하기

영속성 컨텍스트JPA를 공부할 때 가장 중요한게객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping) 과영속성 컨텍스트를 이해하는 것 이다. 두가지 개념은 꼭 알고 JPA를 활용하자.

ict-nroo.tistory.com






1.더티체킹
1-1 USER정보를 수정후 DB에 Save함수를 호출하지않아도 @Transactional을 붙이니 수정됨


2.영속성 컨텍스트와 더티체킹의 원리

2-1 더티체킹(Dirty Checking)이란 상태 변경 검사이다.
JPA에서는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스 반영한다.
그렇기 때문에 값을 변경한 뒤, save 하지 않더라도 DB에 반영되는 것이다
이러한 상태 변경 검사의 대상은 영속성 컨텍스트가 관리하는 엔티티에만 적용된다.(준영속, 비영속된 객체X)
 
2-2 더티체킹(Dirty Checking) 원리: ·
영속성 컨텍스트란 서버와 DB사이에 존재한다. ·
JPA는 엔티티를 영속성 컨텍스트에 보관할 때, 최초 상태를 복사해서 저장해둔다.(일종의 스냅샷) ·
트랜잭션이 끝나고 flush할 때 스냅샷과 현재 엔티티를 비교해 변경된 엔티티를 찾아낸다.
· JPA는 변경된 엔티티를 DB단에 반영하여 한번에 쿼리문을 날려준다.



3. 영속성 컨텍스트의 원리
3-1 Jpa가 영속성컨텍스트를 갖고있음
3-2 컨트롤러에서 user를 save-> 영속성컨텍스트에 user를 1차캐시저장(영속화) ->COMMIT전상태
3-3 영속화된객체를 ->DB에 저장하기 ->플러시(1차캐시비우지않음)
3-4 select시 영속화된 user를 가져와 db에 접근 x
3-5 update시 일단 select로 2번데이터를 1차캐시로가져와 영속화시킨다.
3-6 영속화된 2번데이터를 컨트롤러로 가져와 변경
3-7 save시 영속화된 2번데이터를 변경해줌
3-8 변경된 데이터를 플러시해서 db에 저장

4. 트랜잭션과 영속성컨텍스트

4-1 컨트롤러에 updateuser메소드에 @Transactional을 붙이면 트랜잭션처리를한다.
4-2 메소드가 종료되어 return할때 트랜잭션이 종료되고 자동 Commit이된다.
4-3 영속화된 User를 컨트롤러로 가져와서 변경시키고 함수종료하면 Commit이되고
영속화된객체와 컨트롤러에 수정객체를 비교하여 자동으로 인식하고 업데이트를 해준다
4-4 트랜잭션 메소드종료시 영속화된객체의 변화를 인지하고 DB에 업데이트문을 수행해준다.(더티체킹)
4-5 영속화된객체를 변화없이 메소드가 끝나고 COMMIT이된다면 그대로 DB에들어감




'개인 공부 > 스프링부트 개념정리' 카테고리의 다른 글

예외처리페이지만들기  (0) 2022.11.23
쓰레드와 프로세스정리  (0) 2022.11.22
Crud 테스트 2  (0) 2022.11.21
DB 칼럼과 Enum제약조건  (0) 2022.11.21
테이블 연관관계의 주인(보완필요)  (0) 2022.11.20