[JPA]영속성 컨텍스트(1차 캐시)

백승호·2022년 4월 7일
0

JPA는 객체와 테이블(어플리케이션과 데이터베이스)간 통역의 역할을 해주는 ORM 중 하나입니다.

JPA는 특히나 영속성 컨텍스트가 굉장히 중요시 되는데요,
영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다.

("영속성" : 엔티티를 영구 저장하는 환경)

그래서 영속성 컨텍스트는 뭐가 좋길래 JPA의 핵심이라 할까?

영속성 컨텍스트가 엔티티를 관리하면 얻게되는 장점

  • 1차 캐시
  • 동일성(identity) 보장
  • 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
  • 변경 감지(Dirty Checking)
  • 지연 로딩(Lazy Loading)

위와 같은 구조가 영속성 컨텍스트이고 장점인데, 오늘은 1차 캐시에 관해서만 얘기를 나눠보겠습니다.


1차 캐시

영속성 컨텍스트는 내부에 캐시를 가지고 있는데 이것을 1차 캐시라 합니다. 영속 상태의 엔티티는 모두 이곳에 저장됩니다. 쉽게 말해 영속성 컨텍스트 내부에 Map이 하나 있는데 (1차 캐시), 키는 @Id로 매핑한 식별자고 값은 엔티티 인스턴스입니다.

1차 캐시의 흐름

  1. 최초 조회할 때는 1차 캐시에 엔티티가 없다.
  2. save 시 엔티티를 1차 캐시와 db에 보관한다.
  3. 1차 캐시에 보관된 결과를 반환한다.
  4. 이후 같은 엔티티를 조회하면 1차 캐시에 같은 엔티티가 있으므로 데이터베이스를 조회하지 않고 1차 캐시의 엔티티를 그대로 반환한다.

1차 캐시의 추가 특징

  1. 1차 캐시는 객체의 동일성 (a == b)를 보장한다.
  2. 1차 캐시는 한 트랜잭션 단위에서만 유효하다.
profile
처음처럼

0개의 댓글