JPA에서 "더티 체킹(Dirty Checking)"은 엔티티 상태의 변경을 자동으로 감지하여 데이터베이스에 동기화하는 기능이다. 이는 JPA가 엔티티 객체의 변경을 추적하고, 트랜잭션이 커밋될 때 변경된 내용을 자동으로 데이터베이스에 반영하는 메커니즘을 말한다.
엔티티의 원본 상태 저장: JPA는 엔티티를 로드할 때, 엔티티의 원본 상태를 내부적으로 저장.
엔티티의 변경 감지: 엔티티의 속성을 수정하면, JPA는 이 변경을 감지. 하지만 이 단계에서는 아직 데이터베이스에 반영되지 않음.
변경된 엔티티 추적: 트랜잭션이 커밋되기 전에, JPA는 변경된 엔티티를 모두 추적. 여기서 "더티"는 "변경된"을 의미함.
SQL 생성 및 실행: JPA는 변경된 엔티티에 대해 적절한 SQL UPDATE 쿼리를 생성하고, 트랜잭션이 커밋될 때 이 쿼리를 실행.
코드 복사
Product product = entityManager.find(Product.class, productId);
product.setPrice(newPrice);
@Transactional
public void updateProductPrice(Long productId, int newPrice) {
Product product = entityManager.find(Product.class, productId);
product.setPrice(newPrice); // 여기서 엔티티의 상태를 변경
// 트랜잭션이 커밋되면 더티 체킹이 일어나고, 변경된 값이 DB에 반영됨
}