변경 감지
영속성 컨텍스트가 관리하는 엔티티의 상태 변화를 트랜잭션 커밋 시점에 자동으로 감지하여 UPDATE SQL을 실행하는 JPA 메커니즘입니다.
동작 방식
- 영속성 컨텍스트는 엔티티 조회 시 최초 상태의 스냅샷을 저장
- 트랜잭션 커밋 또는 플러시 시점에 현재 엔티티 상태와 스냅샷을 비교
- 변경 사항이 있으면 UPDATE SQL을 생성하여 쓰기 지연 SQL 저장소에 등록
- 플러시 시점에 DB에 반영
조회 → 스냅샷 저장
│
엔티티 수정 (setter 등)
│
커밋/플러시 → 스냅샷과 비교 → 변경 감지 → UPDATE SQL 실행
주의 사항
- 영속 상태인 엔티티에만 동작 (준영속·비영속 상태는 감지 안 됨)
- OSIV 패턴 사용 시: 표현 계층에서 엔티티 수정 후 서비스 계층을 호출하면 의도치 않게 변경 감지가 발생할 수 있음
- 전체 필드를 UPDATE하는 기본 방식 대신 변경된 필드만 반영하려면
@DynamicUpdate사용
핵심 정리
개발자가 명시적으로 update 메서드를 호출하지 않아도 영속성 컨텍스트 내 엔티티 변경 사항이 자동으로 DB에 반영됩니다.