Skip to main content

DirtyChecking

더티 체킹

Spring Data JPA를 포함한 몇몇 ORM에서 지원하는 엔티티 상태 변경 검사를 의미한다.

더티 체킹에서의 더티상태의 변화가 생긴 정도를 의미한다. 변화가 있다의 기준은 엔티티 최초 조회 상태로 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 DB에 자동으로 업데이트해준다.

JPA

JPA는 엔티티를 조회할 때, 해당 엔티티의 상태로 스냅샷을 생성하고, 트랜잭션이 종료되는 시점에 생성해둔 스냅샷과 비교하여 차이점이 있다면 UPDATE 쿼리를 데이터베이스로 전달한다. 영속성 컨텍스트가 관리하는 엔티티에만 상태 변경 검사가 적용된다. 준영속/비영속 상태인 엔티티의 경우, 더티 체킹의 대상에 포함되지 않는다.
ex)

  • detach된 엔티티 (준영속)
  • DB에 반영되기 전 처음 생성된 엔티티 (비영속)

더티 체킹으로 생성되는 UPDATE 쿼리는 기본적으로 대상 엔티티와 연관된 테이블의 모든 필드를 업데이트하는 방식을 사용한다. 해당 방식은 서버 애플리케이션 실행 시점에 미리 생성해두고 쿼리의 재사용이 가능하다는 장점이 있다. 만약 업데이트 대상 테이블의 필드 개수가 20~30개 이상인 경우, UPDATE 쿼리가 부담스러울 수 있다.