DB/JPA

[JPA] 더티 체킹 (Dirty Checking)

annovation 2025. 3. 13. 08:50

더티 체킹 (Dirty Checking)

JPA의 더티 체킹(Dirty Checking)이란 엔티티 객체의 변경 사항을 자동으로 감지하여 변경된 데이터만 DB에 반영하는 기능을 말합니다.

이 덕분에 개발자가 update SQL을 직접 작성하지 않아도 JPA가 자동으로 변경을 감지하고 업데이트를 수행합니다.


Spring Data JPA .save() 방식

@Transactional
public void modifyClassInfo(Long classId, ClassRequest.ModifyRequestData requestData) {
    ClassEntity classEntity = classRepository.findById(classId).get();
    
    // 엔티티 수정
    classEntity.setName(requestData.getName());
    classEntity.setDescription(requestData.getDescription());
    
    // DB에 저장
    classRepository.save(classEntity);
    
    // 실행되는 SQL문:
    // UPDATE class SET 
    //   name = ?, 
    //   description = ?, 
    //   favorite = ?,    <- 변경하지 않은 필드도 UPDATE
    //   master_id = ?,   <- 변경하지 않은 필드도 UPDATE
    //   created_at = ?   <- 변경하지 않은 필드도 UPDATE
    // WHERE id = ?
}
  • save(): 모든 필드를 UPDATE

JPA 더티체킹 방식

@Transactional
public void modifyClassInfo(Long classId, ClassRequest.ModifyRequestData requestData) {
    ClassEntity classEntity = classRepository.findById(classId).get();
    
    // 엔티티 수정만 하면 됨
    classEntity.updateInfo(requestData.getName(), requestData.getDescription());
    
    // 실행되는 SQL문:
    // UPDATE class SET 
    //   name = ?,
    //   description = ?  <- 변경된 필드만 UPDATE
    // WHERE id = ?
}
  • 더티 체킹 : 변경된 필드만 UPDATE
  • save()를 깜빡 잊어도 트랜잭션 종료 시점에 모든 변경사항이 자동으로 DB에 반영됨

출처

OpenAIChatGPT