Spring Cache

코찔찔이💻·2023년 5월 8일
0

스프링

목록 보기
2/3
post-thumbnail

cache?

자주 사용하는 데이터를 저장해서 재활용하는 기술

  • 일시적인 특징이 있는 데이터 집합을 서버에서 가지고 오는 것이 아닌, 캐시 기능을 사용하여 고속 데이터 스토리지에 저장
  • 필요 시, 캐시로 데이터를 요청하여 처리 가능하다.
  • 데이터의 재사용으로 효율성을 높이고, 속도 성능 측면에서도 이점을 가져갈 수 있다.
  • 동일한 리소스에 대한 빈번한 조회로 발생하는 DBMS 과부화를 줄이고자 사용

cache Abstraction(캐시 추상화)

  • 스프링의 캐시 추상화는 캐시 특정 기술에 종속되지 않고, AOP를 통해 적용
  • 애플리케이션 코드를 수정하지 않고 캐시 부가기능을 추가할 수 있다.
  • 즉 , 캐시 API를 코드에 추가하지 않고 쉽게 캐시 기능을 부여

cache Manager

  • 스프링에서 캐시 추상화를 하기 위해서는 캐시 기술을 지원하는 **캐시 매니저**를 빈으로 등록해야 한다.
  • ConcurrentMapCacheManager
    • java.util.concurrent.ConcurrentMap - 캐시 기능을 구현하는 간단한 캐시 매니저
  • CaffeineCacheManager
    • Java 9로 Guava 캐시를 재작성한 Caffeine 캐시를 사용하는 캐시 매니저
    • EhCacheCacheManager 와 함께 자주 사용하는 캐시 매니저

Cache 사용하기

의존성 추가

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
</dependencies>

@EnableCaching

  • 설정 클래스에 별도의 애노테이션 기반의 캐시 기능을 적용
  • 캐시에 데이터가 없을 경우, 기존의 로직을 실행한 후 캐시에 데이터를 추가, 있다면 캐시의 데이터를 반환
ElementDescriptionType
cacheName캐시 이름String[]
valuecacheName의 aliasString[]
key* 동적인 key 값을 사용하는 spEL(spring Expression Language) 표현식
* 동일한 cach를 사용하지만 구분될 필요가 있는 경우 사용하는 값String
conditionSpEL 표현식이 참일 경우 캐싱 적용
-or, and 등 조건식, 논리연산 가능String
unless캐싱을 막기 위해 사용되는 SpEL 표현식
거짓일 경우 캐싱이 적용String
cacheManager사용할 CacheManager 지정String
sync캐시 구현체가 Thrread safe하지 않은 경우, 캐시에 동기화를 걸 수 있는 속성boolean

@CacheEvict

메서드가 호출될 시, 지정된 캐시를 삭제

select 이외에 insert,update,delete를 해주어야 할 경우, 기존 캐싱 데이터를 변경해주어야 하기 때문에 삭제 작업이 필요하다.

@CachePut

캐시 값을 저장하는 용도로만 사용

조회 시에 저장된 캐시의 내용을 사용하지 않고, 메소드의 로직을 실행

@Caching

하나의 메서드를 호출할 때, Cacheable,CacheEvict 등 여러 개의 캐싱 동작을 수행

ElementDescriptionType
cacheable적용 될 @Cacheable array를 등록Cacheable[]
evict적용 될 @CacheEvict array를 등록CacheEvict[]
put적용 될 @Cacheput array를 등록CachePut[]

@CacheConfig

클래스 단위로 캐시 설정을 동일하게 하고 싶을 때 사용

  • cacheNames : 클래스 내 정의된 캐시 작업에서의 Default 캐시 이름
  • cacheManager : 사용할 CacheManager을 지정
profile
버티면 다 되는거야.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN