2차 캐시

vs 1차 캐시

  • 1차 캐시는 영속성 컨텍스트를 통해 이루어진다.
  • 1차 캐시는 하나의 트랜잭션이 시작하고 종료할 때 까지만 유효하다.
  • OSIV(Open Session In View)를 이용하면 클라이언트의 요청이 들어오고 해당 요청이 끝날때 까지 1차 캐시를 유효하게하지만 애플리케이션 관점에서 DB에 대한 접근 횟수를 줄이기에는 역부족이다.

2차 캐시에 대하여

  • 애플리케이션 레벨에서 공유되므로 공유 캐시(shared cache)라 부르기도 한다.
  • 애플리케이션 종료시 까지 캐시가 유지된다.
  • 1차 캐시에 원하는 Entity가 없을 때 2차 캐시를 뒤지고, 이 때에도 없다면 DB를 조회헤 2차 캐시에 해당 Entity를 저장한다. 그리고 해당 Entity에 대한 복사본을 1차 캐시로 반환해준다. 이는 여러 곳에서 같은 객체를 동시에 수정하는 문제를 방지해준다.
  • Persistenct Unit 범위의 캐시이다.
  • 데이터베이스 기본키를 기준으로 캐시하지만, 영속성 컨텍스트가 다르면 객체의 동일성(a==b)을 보장하지 않는다.

설정방법

  1. @Cacheable
    @Entity
    public class Member {
       @Id @GeneratedValue
       private Long id;
    
       ...
    }

    와 같이 @Cacheable 어노테이션을 사용해준다.

  2. <persistencce-unit name="2ndCache">
       <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
    </persistencce-unit>

    와 같이 persistence.xmlshared-cache-mode를 설정함으로써 persistence unit 단위 캐시를 적용해준다.

'Backend > SpringBoot-JPA' 카테고리의 다른 글

@RestController 어노테이션  (0) 2021.04.29
Optimistic/Pessimistic Lock  (1) 2021.04.19
@Transactional  (0) 2021.03.21

+ Recent posts