[캐시] - 스프링에서 지원하는 캐시와 사용방법

yeom yaloo·2023년 8월 7일
0

백엔드 관련 지식

목록 보기
2/7
post-thumbnail

스프링 캐시

[캐시의 사용]

  • 캐시는 서버 부담을 줄이고 성능을 높이기 위해 사용 되는 기술이다.
  • 조회가 오래 걸리거나 계산이 복잡한 경우 결과를 저장해두고 가져오는 등의 작업을 수행한다.
  • 캐시는 값을 저장해두고 불러오는 방식이기 때문에 반복적으로 동일한 결과를 반환하는 경우에 용이하다.
  • 매번 값이 변하는 계산의 경우엔 캐시 적용이 권장되지 않는다.
  • 캐시는 클래스, 인터페이스에도 적용 가능하지만 메서드 레벨에 붙여서 사용하는 경우가 일반적이다.

[캐시(cache) 추상화]

  • 스프링은 AOP 방식으로 메소드에 캐시를 적용하는 기능 제공하고 있다.
  • AOP를 이용해 메소드 실행 과정에 투명하게 적용된다.
  • 캐시는 추상화된 서비스를 제공하고 있어서 환경이 바뀌거나 적용할 캐시 기술의 변화에도 애플리케이션 코드에 영향을 주지 않는다.

[스프링에서 캐시를 사용하는 방법]

들어가기에 앞서서 캐시를 사용하기 위한 스프링 환경에서의 필요 설정 작업

  • CacheConfig: @EnableCaching을 해당 설정 파일에 달아두고 진행을 해야 @Cacheable과 같은 캐시 지원 기술을 사용할 수 있다.
  • CacheManager 빈 등록

1.@Cacheable, @CachePut, @CacheEvict

  • @Cacheable: 캐시 저장/조회에 사용된다.
  • @CachePut: 캐시 저장에만 사용되고 해당 작업은 저장은 가능해도 저장한 데이터를 조회가 불가하다.
  • @CacheEvict: 캐시 제거에 사용된다.

@Cacheable

  • 캐시 저장과 조회에 사용 되는 기능이다.
  • 인터페이스나 클래스에 붙여서도 사용이 가능하지만 일반적으로는 메서드 레벨에 붙여서 사용하는 것이 일반적이다.
  • 메서드 레벨에서의 @Cacheable
  • 캐시에 데이터가 없다면 기존 로직을 수행한다.
  • 캐시에 데이터가 있다면 캐시의 데이터를 반환한다.
  1. 스프링에서 지원하는 캐시는 어디에 저장이 될까?
    스프링에서 지원하는 캐시는 메모리에 저장된다.
    이때 메모리(=RAM)는 내부 프로바이더의 개념으로 사용된다.
    메모리에 저장하고 있기 때문에 매우 빠르다
    또한 ConcurrenHashMap와 같은 자료구조를 사용해서 저장한다.
    외부 프로바이더의 개념으로 Redis, Ehcache와 같은 기술을 사용할수 있다.
    이를 사용하면 캐시도 영속적(=프로그램 종료에서 사라지지 않는)으로 관리가 가능해진다.
  2. 캐시는 key - value로 구성되어 있다.
    Key로는 해당 애너테이션이 붙은 메서드의 파라미터가 된다.
    이때 메서드의 파라미터가 여러개라면 하나의 값만 지정해서 key로 설정이 가능하다.
    value로는 @Cacheable(“ 이 안에가 value !”) 특별한 지정이 없다면 안에 들어간 값이 값으로 지정된다.
    해당 애너테이션에 value, key 모두 지정이 가능하다.

@CachePut

  • 캐시에 값을 저장하는 용도로만 사용된다.
  • 조회 시에는 저장된 캐시의 내용을 사용하지 않고 메서드 로직만을 실행한다.

@CacheEvict

  • 캐시 삭제에 사용된다.
  • 캐시의 경우엔 적절한 시점에 제거가 되어야 한다.
  1. 캐시가 제거되어야 할 때
    -일정한 주기로 캐시를 제거해야 할 때
    -값이 변할 때
  2. 캐시 제거 방법
    -키만 제거
    -전부 제거 allEntires

📌참고 :https://mangkyu.tistory.com/179

profile
즐겁고 괴로운 개발😎

0개의 댓글