-
JPA 더티 체킹(Dirty Checking)
엔티티(Entity)의 변경 사항을 자동으로 감지하여 데이터베이스에 반영하는 JPA의 기능이다.
개발자가 변경된 데이터를 데이터베이스에 업데이트하는 SQL 문을 작성하지 않아도 JPA가 알아서 처리한다.❓ 엔티티 매니저의 메서드는 저장(persist)/조회(find)/삭제(delete)로 수정에 해당하는 메서드가 없다. ❔
동작원리
1. 엔티티 상태 감시
- JPA는 Persistence Context(영속성 컨텍스트)에 의해 엔티티 객체를 관리한다.
- 영속성 컨텍스트는 엔티티의 스냅샷(초기 상태)을 저장해 둔다.
2. 변경 사항 감지
- 트랜잭션이 커밋되거나, 영속성 컨텍스트의 flush()가 호출될 때 JPA는 스냅샷과 현재 엔티티 상태를 비교한다.
- 두 상태를 비교하여 변경된 필드가 있으면 해당 변경 사항을 반영하는 UPDATE SQL을 생성한다.
3. 데이터베이스에 반영
- 변경된 엔티티에 대해 자동으로 SQL 문을 실행해 데이터베이스에 반영한다.
예제
@Entity @Getter @Setter public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int age; } @Transactional public void updateMember(Long id, String newName, int newAge) { Member member = em.find(Member.class, id); member.setName(newName); // 필드 값 변경 member.setAge(newAge); // 트랜잭션 커밋 시점에 변경 사항 자동 반영 }
setName과 setAge로 엔티티 값을 변경하면 트랜잭션 커밋 시점에 더티 체킹이 발생
UPDATE Member SET name = ?, age = ? WHERE id = ?;
'CS > 웹개발' 카테고리의 다른 글
JPA N+1 문제 (0) 2025.01.19 CI/CD (1) 2025.01.16 google.com을 검색했을 때 일어나는 과정 (0) 2025.01.08 OAuth (0) 2025.01.06 OSI 7계층 (0) 2025.01.05 댓글