-
Sneakers Mania - 더티 체킹(Dirty Checking)Projects/Problem & Solution 2022. 1. 4. 14:12
더티 체킹(Dirty Checking)
더티 체킹(Dirty Checking)이란?
JPA는 EntityManager가 Entity를 저장/조회/수정/삭제를 한다.
그런데, EntityManager의 메서드를 찾아보면, 저장(persist)/조회(find)/삭제(delete)로 수정에 해당하는 메서드는 존재하지 않는다.
대신에 더티 체킹(Dirty Checking)이라는 개념이 존재한다. 더티 체킹은 트랜잭션 안에서 Entity의 변경이 일어나면, 변경 내용은 자동으로 DB에 반영하는 JPA의 특징이다.
또한, 영속성 컨텍스트 안에 있는 Entity를 대상으로 더티 체킹이 발생한다. 여기서 Dirty란 Entity 데이터의 변경된 부분으로 해석하면 된다. 즉, Entity의 변경된 부분을 확인해서 DB에 반영한다는 뜻이다.
더티 체킹이 일어나기 위해서는 아래 두 가지 조건이 충족되어야 한다.
1. 트랜잭션 안에서 Entity를 변경하는 경우
2. 영속화된 Entity를 변경하는 경우
영속화란?
영속화란 영속성 컨텍스트가 관리하는 Entity를 말한다. 여기서 영속성 컨텍스트는 Entity를 영구적으로 저장하는 환경을 의미한다.
영속성 컨텍스트에 Entity를 저장함으로써, 동일성을 보장해주고 트랜잭션의 변경을 감지해주는 역할을 수행한다.
추가로, 영속성 컨텍스트에 대한 자세한 내용은 아래 링크에서 확인이 가능하다.
더티 체킹(Dirty Checking)의 활용
게시물 내용 변경
기존의 DB에 저장되어 있는 게시물의 정보(제목, 내용, 썸네일 등)를 변경하고자 한다. 이때, 더티 체킹을 활용해서 DB의 내용을 변경해보겠다.
우선, 더티 체킹이 일어나기 위해서는 두 가지의 조건이 충족되어야 한다.
1. 트랜잭션 안에서 Entity를 변경하는 경우
2. 영속화된 Entity를 변경하는 경우
첫 번째 조건의 경우 메서드에 "@Transactional" 애너테이션을 지정함으로써, 해당 메서드가 트랜잭션 처리를 지원하도록 설정해준다.
두 번째 조건의 경우 Entity를 영속화시켜주기 위해 DB에 있는 기존의 게시물을 조회하였다.
두 가지 조건을 충족시킨 후 DB로부터 조회한 게시물 Entity의 정보를 변경해주었다. Entity의 정보 변경이 끝났으면, 해당 함수가 종료될 시 업데이트된 Entity가 DB에 자동으로 반영된다.
728x90'Projects > Problem & Solution' 카테고리의 다른 글
Sneakers Mania - Summernote 이미지 파일 업로드 시 고유 URL 생성 (0) 2022.01.29 Sneakers Mania - @ControllerAdvice, @ExceptionHandler를 이용한 전역 예외 처리 (0) 2022.01.03 Sneakers Mania - ENUM 타입을 이용한 사용자 권한 처리 (0) 2021.12.31 Sneakers Mania - 카카오 로그인(4) (0) 2021.12.28 Sneakers Mania - 카카오 로그인(3) (0) 2021.12.27