[Spring Boot] 더티 체킹(Dirty Checking)

조애옹·2025년 6월 19일

🔍 더티 체킹이란?

  • 엔티티 객체의 변경을 자동으로 감지하고 DB에 반영해주는 기능
  • JPA가 영속성 컨텍스트에서 관리 중인 엔티티의 변경 사항을 추적

✅ 동작 원리

  1. 트랜잭션 내에서 엔티티를 조회 (영속 상태)
  2. 엔티티의 필드 값을 변경
  3. 트랜잭션 커밋 시점에 스냅샷(초기 상태)과 비교
  4. 값이 달라졌다면 UPDATE SQL 자동 생성

✅ 주의사항

  • 반드시 트랜잭션 범위 안에서만 더티 체킹이 동작함 (@Transactional 필요)
  • 영속 상태가 아닌 객체(Detached 상태)는 변경해도 반영되지 않음
  • 실수로 트랜잭션 밖에서 수정하면 UPDATE가 발생하지 않음
  • 즉시 반영이 아닌 flush() 또는 커밋 시점에 쿼리 실행

💻 코드 예제로 보기

@Transactional
public void updateMember(Long id, String newName) {
    Member member = memberRepository.findById(id).orElseThrow();
    member.changeName(newName); // setName보단 도메인 메서드 권장
} // 트랜잭션 종료 시 자동으로 UPDATE 실행
  • save()update()를 직접 호출하지 않아도 됨
  • 트랜잭션 커밋 시점에 UPDATE member SET name=? WHERE id=? 쿼리가 자동 발생
profile
아자잣

0개의 댓글