Spring Cache

김파란·2024년 12월 26일

Spring

목록 보기
8/10

개요

  • 자주 사용되는 데이터와 연산된 결과를 메모리에 저장하여 빠른 검색을 가능하게 하는 기능을 제공한다
  • 해당 캐시에 저장되는 데이터를 CacheManager를 통하여 메모리뿐만 아니라 디스크, 데이터베이스, 클라우드 서비스와 같은 다른 저장소에도 저장이 가능하다
    • 저장소에 독립적이고 추상화된 캐시 메커니즘을 제공한다.
    • AOP를 사용하여 캐시 기능을 구현하였고, 캐시 애너테이션을 사용하면 쉽게 구현할 수 있다.

Local Caching vs Global Caching

  • Local Cache
    • 로컬캐시는 로컬 서버 내부 저장소에 데이터를 보관한다.
    • 서버에서 데이터에 바로 접근할 수 있기 때문에 속도가 빠르다는 장점이 있지만, 다중 서버 환경에서는 각 서버에 중복된 데이터를 보관해야 하며 서버간 데이터 일관성이 깨질수 있다
  • Global Cache
    • 글로벌캐시는 서버와 분리된 별도의 저장소에 데이터를 보관하는 것이다
    • 네트워크를 타기 때문에 로컬캐시에 비해 속도가 느리지만 중복 데이터 및 데이터 일관성 문제가 없다는 장점이 있다.

Cache Manager

  • 스프링은 Cache Manager를 추상화하여 다양한 방법으로 구현된 Cache Manager가 있다
    • 구체적인 캐시 프로바이더에 종속되지 않도록 해준다

CacheManager 종류

  • ConcurrentMapCacheManager:
    • ConcurrentHashMap을 캐시 저장소로 사용할 수 있는 구현체다.
    • 캐시 정보를 Map 타입으로 메모리에 저장해두기 때문에 빠르고 별다른 설정이 필요 없다는 장점이 있지만, 실제 서비스에서 사용하기엔 기능이 빈약하다.
  • SimpleCacheManager
    • 기본적으로 제공하는 캐시가 없다
    • 사용할 캐시를 직접 등록하여 사용하기 위한 캐시 매니저 구현체다.
  • EhCacheCacheManager
    • Java에서 유명한 캐시 프레임워크 중 하나인 EhCache를 지원하는 캐시 매니저 구현체다.
  • CaffeineCacheManager
    • Java 8로 Guava 캐시를 재작성한 Caffeine 캐시 저장소를 사용할 수 있는 구현체다.
    • EhCache와 함께 인기 있는 매니저인데, 더 좋은 성능을 갖는다고 한다.
  • RedisCacheManager
    • Redis를 캐시 저장소로 사용할 수 있는 구현체다.
  • CompositeCacheManager
    • 한 개 이상의 캐시 매니저를 사용할 수 있는 혼합 캐시 매니저다.
  • 더 다양한 캐시 매니저가 있으니 잘 찾아보자

Cache Annotation

  • Cache 라이브러리에서 사용되는 애노테이션 목록이다
  • 어노테이션을 사용하면 개발자는 명시적으로 캐싱 로직을 작성할 필요 없이 캐시를 쉽게 활용할 수 있다
  • @EnableCaching
    • Spring Boot Cache를 사용하기 위해 캐시 활성화를 위한 어노테이션이다
  • @CacheConfig
    • 캐시정보를 클래스 단위로 사용하고 관리하기 위한 어노테이션이다
  • @Cacheable
    • 캐시정보를 메모리 상에 저장하거나 조회 해오는 기능을 수행하는 어노테이션이다
  • @CachePut
    • 캐시 정보를 메모리상에 저장하며 존재 시 갱신하는 기능을 수행하는 어노테이션이다
  • @CacheEvict
    • 캐시 정보를 메모리상에 삭제하는 기능을 수행하는 어노테이션이다
  • @Caching
    • 여러 개의 캐시 어노테이션을 함께 사용할 때 사용하는 어노테이션이다

주요 애노테이션 비교

  • Cacheable
    • 캐시 조회, 저장 기능
    • 캐시 존재 시 메서드 호출 전 실행
    • 캐시 미 존재 시 메서드 호출 후 실행
  • CachePut
    • 캐시 저장 기능
    • 캐시 존재 시 메서드 호출 후 실행
    • 캐시 미 존재 시 메서드 호출 후 실행
  • CacheEvict
    • 캐시 삭제 기능
    • beforeInvocation 속성값이 true일때 메서드 호출 전 실행
    • beforeInvocation 속성값이 false일때 메서드 호출 후 실행
  • 메서드 호출 전이라는 건 캐시가 있는 경우 메서드를 호출하지 않고 캐시에서 가져온다는 뜻이고 호출 후는 메서드를 호출하여 데이터를 생성한 후, 생성된 데이터를 캐시에 저장한다

참고) https://adjh54.tistory.com/165
https://velog.io/@songs4805/Spring-Cache%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://velog.io/@taebong98/Spring-Cache-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://mangkyu.tistory.com/370

0개의 댓글