JPA에서 제공하는 기능 하나로, 트랜잭션 내에서 객체의 상태 변화를 자동으로 감지하고, 변화가 있을 경우 데이터베이스에 해당 변경 사항을 자동으로 반영하는 기능입니다. 이를 통해 개발자는 데이터베이스와의 상호작용에 대해 더욱 객체 지향적으로 접근할 있게 됩니다.

  1. 상태 변경 확인: JPA는 트랜잭션 내에서 관리되는(영속 상태인) 엔티티의 초기 상태를 저장해두고, 트랜잭션이 끝날 때 이 초기 상태와 비교합니다. 이렇게 해서 엔티티의 상태가 트랜잭션 내에서 변경되었는지를 확인하게 됩니다. 이런 확인 과정을 '더티 체킹'이라고 합니다.
  2. 변경 반영: 만약 엔티티의 상태가 변경되었다면 (즉, '더티'하다면), JPA는 이 변경을 데이터베이스에 반영합니다. 이를 위해 JPA는 적절한 SQL UPDATE 쿼리를 생성하고 실행합니다. 이렇게 해서 데이터베이스의 상태도 엔티티의 변경된 상태와 일치하게 됩니다.

즉, 더티 체킹은 JPA 엔티티의 변경을 자동으로 관리해주는 중요한 기능입니다. 덕분에 개발자는 SQL UPDATE 쿼리를 직접 작성하거나 실행할 필요 없이, 단순히 자바 코드를 통해 엔티티의 상태를 변경하기만 하면 됩니다.

 

더티 체킹이란 “상태 변경 검사”입니다. JPA에서는 트랜잭션이 끝나는 시점에 최초 조회 상태(변경기준)로부터 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해줍니다. 엔티티를 조회하면 해당 엔티티의 조회 상태 그대로 스냅샷을 만들어 놓고 트랜잭션이 끝나는 시점에는 이 스냅샷과 비교해서 다른점이 있다면 Update Query를 데이터베이스로 전달합니다. 상태 변경 검사의 대상은 영속성 컨텍스트가 관리하는 엔티티에만 적용됩니다. 즉, 준영속/비영속 상태의 엔티티는 더티 체킹의 대상에 포함되지 않아 값을 변경해도 데이터베이스에 반영되지 않습니다

 

더티 체킹이란 상태 변화 검사를 의미합니다. JPA는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해줍니다. 엔티티를 조회할 때 스냅샷을 만들고 트랜잭션이 끝나는 시점에 스냅샷과 비교를 하여 달라진 부분은 Update 합니다. 영속성 컨텍스트에 관리되는 엔티티만 검사 대상이며 이외 엔티티는 검사 대상이 아닙니다.

 

비영속: JPA와 전혀 관계없이 객체만 생성한 상태

준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태로 현재는 영속 상태가 아닌 상태

 

2023.05.23 - [Spring] - 영속성 컨텍스트(Persistence Context), 1차 캐시

 

'Mockterview' 카테고리의 다른 글

Index(인덱스), B-tree, Hash pt.1  (0) 2023.05.19
Annotation(@)  (0) 2023.05.19
JPA(Java Persistence API)  (0) 2023.05.19
MVC (Model View Controller)패턴  (0) 2023.05.19
Override(오버라이딩) 와 Overload(오버로딩)  (0) 2023.05.19