JPA dirty checking

jkjan·2022년 3월 24일
0

JPA는 1차 캐싱와 쓰기 지연을 지원한다.

1차 캐시는 엔터티 매니저에 의해 관리되고 있는 것들을 저장하여

데이터를 찾고자 할 때 새로 쿼리를 날리지 않아도 JPA가 저장하고 있는 캐시에서 찾아올 수 있도록 한다.

이것은 데이터를 수정할 때도 유용하다.

엔터티 매니저가 관리하고 있는 엔터티의 일부 인스턴스를 수정하면
JPA가 이를 자동으로 감지하여 수정 쿼리를 날릴 수 있다.

이를 더티 체킹이라고 한다.

더티 체킹의 특징은 다음과 같다.

  1. 수정 여부에 관계 없이 모든 칼럼을 수정한다.
  2. 다음 두 가지 조건을 만족해야 한다.
    1. Transaction 으로 동작해야 할 것
    2. 엔터티 매니저에 의해 관리되어야 할 것

JPA 에서 엔터티는 다음과 같은 생명주기를 가진다.

여기서 트랜잭션으로 동작하는 로직에서 Managed 상태에 있는 엔터티를 수정하면 Dirty checking 이 발동한다.

(물론 쓰기 지연 때문에 로직의 끝에서 한꺼번에 수정이 일어난다. 이는 쿼리 수를 줄이기 위함이다.)

0개의 댓글