다잘하고싶어

더티체킹 Dirty Checking 본문

이론학습/SRPING

더티체킹 Dirty Checking

챙영잉 2022. 9. 22. 15:21

[Spring Data]

스프링을 사용하면 별도로 데이터베이스에 save 하는 과정이 이루어지지 않는다.

과정을 살펴보면 다음과 같다.

1.  트랜잭션 시작

2. 엔티티 조회

3. 엔티티 값 변경(데이터 변경)

4. 트랜잭션 커밋

 

즉, 데이터베이스에 update 쿼리와 관련된 코드가 없다는 것. 

그러나 콘솔창을 확인해보면 자동으로 save 메서드로 변경사항을 저장하지 않아도 update 쿼리가 실행된 것을 확인할 수 있다.

 

이유는?

 더티체킹 Dirty Checking

 

Dirty = 상태의 변화가 생긴 정도

Dirty Checking = 상태 변경 검사

 

JPA에서는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영한다.

즉, save 메서드를 사용하지 않아도 자동으로 update쿼리를 날려준다는 것.

 

이때, 상태 변경 검사의 대상은 영속성 컨텍스트가 관리하는 엔티티에만 적용된다.

(+ 값을 변경해도 데이터베이스에 반영되지 않도록 하기 위해서는 @Transactional(readOnly = true) 어노테이션 사용한다)

 

--> 여러 사용자가 동시에 데이터에 접근할 경우, 데이터 중복변경이나 오류를 방지하기 위해 사용하는 방식이라고 기억하는데, 

 이에 대한 추가적인 공부가 필요할 것 같다.