JPA가 제공하는 영속성 컨텍스트의 한 기능으로, 엔티티의 상태를 관리하며, 트랜잭션이 종료될 때 변경된 엔티티를 데이터베이스에 자동으로 반영 함.
동작방식?
엔티티 조회 및 변경: 영속성 컨텍스트에 엔티티를 로드할 때, 해당 엔티티의 원본 상태를 스냅샷으로 보관 → 개발자가 엔티티의 상태를 변경하면, 이 변경 사항은 아직 데이터베이스에는 반영되지 않은 상태.
변경 감지: 트랜잭션이 종료되어 커밋되기 전, 영속성 컨텍스트는 엔티티의 현재 상태와 저장해둔 원본 스냅샷을 비교. 이 과정에서 변경된 부분을 감지 함.
더티 체킹 실행: 변경이 감지된 엔티티에 대해, JPA는 자동으로 UPDATE SQL 문을 생성하여 데이터베이스에 반영. 이 과정을 더티 체킹이라고 함.
주의점
엔티티의 상태를 직접 업데이트 하기 위한 별도의 SQL을 작성할 필요가 없어 개발자가 비즈니스 로직에 더 집중할 수 있게 해주고 변경된 필드만을 대상으로 업데이트 쿼리가 실행되므로 불필요한 데이터베이스 접근을 줄일 수 있는 장점이 있지만 더티 체킹을 위한 비교 연산이 많아질경우 성능 저하가 발생할 수 있음.
트랜잭션 범위 내에서 동작하므로 트랜잭션 관리가 중요하며 트랜잭션이 제대로 종료되지 않으면 변경 사항이 반영되지 않을 수 있음.