더티체킹 (Dirty Checking)이란?
- 영속성 컨텍스트가 관리하는 엔티티의 상태가 변경되었을 때, Transaction에 끝나는 시점에 DB에 적용하는 기능
영속성 컨텍스트란?
- 엔티티 객체들을 관리하는 일종의 가상 공간
- 트랜잭션 시작 시, 영속성 컨텍스트 활성화. 트랜잭션 종료 시 영속성 컨텍스트가 종료.
예시
이전 코드
@Transactional
public void updateEntity(Long id) {
// 1. 엔티티 조회
MyEntity entity = entityManager.find(id);
// 2. 필드 값 변경
entity.setName("Updated Name");
// 3. 변경된 entity 저장
entityManager.save(entity);
}
수정 코드
@Transactional
public void updateEntity(Long id) {
// 1. 엔티티 조회
MyEntity entity = entityManager.find(id);
// 2. 필드 값 변경
entity.setName("Updated Name");
// 3. 메서드가 끝나면서 트랜잭션이 종료됨
// 영속성 컨텍스트가 변경 사항을 감지하고 UPDATE 쿼리를 실행
}
실행 과정
- 조회( find )한 엔티티는 영속성 컨텍스트에 저장.
- 값을 변경( setName )하면, JPA가 변경 감지를 통해 변경된 상태를 기록.
- 메서드가 끝나면서 트랜잭션 종료 → flush 호출 → UPDATE 쿼리 실행
내가 사용했던 방법
@Transactional을 사용해서 Update작업 시 사용
'Project' 카테고리의 다른 글
Redis ) Keyspace Notifications에 대한 궁금증 및 내가 사용했던 방법 (0) | 2024.12.19 |
---|---|
Redis Setting에 대한 궁금증 (0) | 2024.12.18 |