새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

1 분 소요

영속성 컨택스트는 트랜잭션 범위에서 동작하는 로컬 캐시라고 생각됩니다.

캐시를 관리하는 기법은 LRU,LFU 방식이 존재하며 LFU를 보완한 방식도 있습니다.

메모리에 저장되는 데이터는 누군가 관리를 하여 일정 범위를 넘어가지 못하도록 제어해야합니다.

영속성 컨텍스트는 JPA가 제공하는 캐시 메모리 컨테이너로 캐시 관리에 대한 책임을 개발자가 가지고 있습니다.

그래서 캐시를 관리할 수 있도록 하며, 영속성 컨택스트에 관리하는 엔티티는 영속성 상태를 통해 캐시 제어를 하며

영속성에 저장되어 관리가 되면 아래와 같은 기능을 제공합니다.

  1. 동일성 보장
  2. 트랜잭션 레벨 보장
  3. 변경 감지
  4. 지연 로딩
  5. 쿼리 자동 생성

영속성 컨택스트는 왜 캐시 무효화 정책이 없을까?

영속성 컨택스트는 트랜잭션 단위로 유요한 캐시 영역입니다.

입력된 영속성 명령어는 즉시 DB에 반영되지 않고, 변경을 감지하고 flush()를 한 시점에서 쿼리를 몰아서 작성됩니다.(쓰기 지연)

따라서 캐시에 저장된 오브젝트는 반드시 DB에 반영되어야할 중요한 상태가 됩니다.

캐시이지만 데이터 일관성을 보장해야합니다.

캐시 무효화 정책이 필요한 이유는 메모리는 제한되므로 무한 저장을 못합니다.

그러나 영속성 컨택스트는 무효화 정책보다 트랜잭션내 캐시의 일관성이 더 중요하기 때문입니다.

사용자가 그 일관성을 유지하고, DB에 반영하고, 혹은 영속성 컨택스트에서 메모리를 삭제할 수 있습니다.

그러니 자동으로 하게 되면 사용자는 어디에서 반영되었는지 알수 있어야하기 때문입니다

영속성 상태

  1. 영속
  2. 준영속
  3. 삭제
  4. 비영속

image-20250515204916595

영속

변경감지, 1차 캐시에 저장됨 , 지연쓰기 적용

비영속

영속성 컨택스트에 저장되지 않은 상태로 엔티티만 존재합니다.

준영속

과거에 영속성 컨택스트에 저장되었던 객체를 말합니다.

삭제

영속성 컨택스트에서 삭제하는 것을 말하며 이미 저장된 지연쓰는 바꾼 것

댓글남기기