본문 바로가기

개발 공부

JPA의 더티 체킹

JPA의 더티 체킹(Dirty Checking)
  • 이터베이스의 엔티티 상태가 변경되었을 때 이를 자동으로 감지하여 업데이트하는 기능
  • JPA가 제공하는 영속성 컨텍스트의 한 기능으로, 엔티티의 상태를 관리하며, 트랜잭션이 종료될 때 변경된 엔티티를 데이터베이스에 자동으로 반영 함.
동작방식?
  1. 엔티티 조회 및 변경: 영속성 컨텍스트에 엔티티를 로드할 때, 해당 엔티티의 원본 상태를 스냅샷으로 보관 → 개발자가 엔티티의 상태를 변경하면, 이 변경 사항은 아직 데이터베이스에는 반영되지 않은 상태.
  2. 변경 감지: 트랜잭션이 종료되어 커밋되기 전, 영속성 컨텍스트는 엔티티의 현재 상태와 저장해둔 원본 스냅샷을 비교. 이 과정에서 변경된 부분을 감지 함.
  3. 더티 체킹 실행: 변경이 감지된 엔티티에 대해, JPA는 자동으로 UPDATE SQL 문을 생성하여 데이터베이스에 반영. 이 과정을 더티 체킹이라고 함.
주의점
  • 엔티티의 상태를 직접 업데이트 하기 위한 별도의 SQL을 작성할 필요가 없어 개발자가 비즈니스 로직에 더 집중할 수 있게 해주고 변경된 필드만을 대상으로 업데이트 쿼리가 실행되므로 불필요한 데이터베이스 접근을 줄일 수 있는 장점이 있지만 더티 체킹을 위한 비교 연산이 많아질경우 성능 저하가 발생할 수 있음.
  • 트랜잭션 범위 내에서 동작하므로 트랜잭션 관리가 중요하며 트랜잭션이 제대로 종료되지 않으면 변경 사항이 반영되지 않을 수 있음.

'개발 공부' 카테고리의 다른 글

영속성 컨텍스트? 1-1  (0) 2024.03.11
N+1 문제  (0) 2024.02.01
AOP, Interceptor, Filter  (0) 2024.01.31
스프링의 Lifecycle  (0) 2024.01.30
오버라이드와 오버로드  (2) 2024.01.26