[JPA] 캐시(Cache)의 추상화와 사용 ( @Cacheable, @CachePut, @CacheEvict )

현주·2023년 4월 23일
0

📌 캐시에 대한 자세한 개념들은 아래 포스팅을 참고해주세요.
<[JPA] 캐싱(Caching)과 영속성(persistence)>

✏️ Spring 캐시(Cache)의 추상화

캐시는 트랜잭션과 마찬가지로 AOP를 이용하여,
캐시 관련 로직을 핵심 비즈니스 로직으로부터 분리할 뿐만 아니라, 메서드에 손쉽게 캐시 기능을 적용할 수 있습니다.

또, Spring은 캐시 구현 기술에 종속되지 않도록 추상화된 서비스를 제공하고 있기 때문에 환경이 바뀌거나 적용할 캐시 기술을 변경해도 애플리케이션 코드에 영향을 주지 않습니다.


✔ 캐시 사용법

  1. build.gradle에 의존성 추가
    implementation 'org.springframework.boot:spring-boot-starter-cache'
  1. Application 범위에 @EnableCaching 애너테이션 추가

  2. 메서드에 @Cacheable/@CachePut/@CacheEvict애너테이션을 붙여 캐시 사용

  • @Cacheable
    ➜ 캐시를 저장/조회를 위함

  • @CachePut
    ➜ 캐시 저장 만을 위함

  • @CacheEvict
    ➜ 캐시 제거를 위함


✔ 캐시 동시성 전략

@Cache의 속성인 usage의 값으로 CacheConcurrencyStrategy를 설정해서 캐시의 동시성 전략을 설정할 수 있음!!

  • READ_ONLY
    ➜ 읽기 전용으로 사용 (update 하려고 하면 exception을 던짐)
    ➜ 간단하고 성능이 좋음
    ➜ 항상 변하지 않는 데이터를 대상으로 사용하는게 좋음

  • NONSTRICT_READ_WRITE
    ➜ 객체 동시 수정 등에 대한 고려를 전혀 하지 않고 캐싱
    ➜ 이 방식은 하나의 객체가 동시에 수정될 가능성이 거의 없는 경우에 사용

  • READ_WRITE
    ➜ 엄격한 읽기/쓰기로 두 개 이상의 스레드에서 동시 수정할 가능성에 대해서 고려하고 만들어야 함

0개의 댓글