더티 체크 : 상태 변경 검사

JPA에서 영속성 컨텍스트가 관리하는 엔티티에만 적용한다.

JPA에서 영속성 컨텍스트에는 

각 EntityManager가 존재하는 시간에 일어난다.

EntityManager가 존재하는 시간에 하나의 Transaction이 존재하게 되는데

이 지역에서 발생하는 것을 1차 캐시에서 처리를 한다.

JPA 전체에 적용되는 캐시는 2차 캐시에서 처리가 되고

transaction 구간에서 잠깐 지역적으로 존재하는 것은 1차 캐시에서 처리한다.

이 1차캐시에는 id와 Entity 그리고 Snapshot이라는 공간이 존재한다.

이 때 객체형태의 Entity로 작업이 진행된다.

JPA에서 영속성에 속하는 Entity를 CRUD를 실행할 때 잠시 작업을 모아두는 곳이다.

여기에 저장이 되면 id에 Entity의 id와 Entity에 Entity가 그리고 Snapshot에 1차캐시에 저장되는 최초 Entity 상태가 저장이 된다.

Transaction 시간 동안 여러 변경이 일어나고

Commit을 진행하는 순간

Commit시점 저장되어 있는 Entity들이 최초 저장된Snapshot과 비교해서 변경이 일어났는지 확인을 하고 

변경이 일어났으면 Update구문을 자동으로 생성해서 Commit을 하기 전에 DB에 전달할 명령에 update구문을 추가해서 진행한다.

그러고 commit이 진행이 된다.

이렇게 변경을 감지하는 것을 Dirty Check이라고 한다.

눈에 들어올 수 있도록 정리해야 할 것 같다.

+ Recent posts