스프링 캐시
[캐시의 사용]
- 캐시는 서버 부담을 줄이고 성능을 높이기 위해 사용 되는 기술이다.
- 조회가 오래 걸리거나 계산이 복잡한 경우 결과를 저장해두고 가져오는 등의 작업을 수행한다.
- 캐시는 값을 저장해두고 불러오는 방식이기 때문에 반복적으로 동일한 결과를 반환하는 경우에 용이하다.
- 매번 값이 변하는 계산의 경우엔 캐시 적용이 권장되지 않는다.
- 캐시는 클래스, 인터페이스에도 적용 가능하지만 메서드 레벨에 붙여서 사용하는 경우가 일반적이다.
[캐시(cache) 추상화]
- 스프링은 AOP 방식으로 메소드에 캐시를 적용하는 기능 제공하고 있다.
- AOP를 이용해 메소드 실행 과정에 투명하게 적용된다.
- 캐시는 추상화된 서비스를 제공하고 있어서 환경이 바뀌거나 적용할 캐시 기술의 변화에도 애플리케이션 코드에 영향을 주지 않는다.
[스프링에서 캐시를 사용하는 방법]
들어가기에 앞서서 캐시를 사용하기 위한 스프링 환경에서의 필요 설정 작업
- CacheConfig: @EnableCaching을 해당 설정 파일에 달아두고 진행을 해야 @Cacheable과 같은 캐시 지원 기술을 사용할 수 있다.
- CacheManager 빈 등록
1.@Cacheable, @CachePut, @CacheEvict
- @Cacheable: 캐시 저장/조회에 사용된다.
- @CachePut: 캐시 저장에만 사용되고 해당 작업은 저장은 가능해도 저장한 데이터를 조회가 불가하다.
- @CacheEvict: 캐시 제거에 사용된다.
@Cacheable
- 캐시 저장과 조회에 사용 되는 기능이다.
- 인터페이스나 클래스에 붙여서도 사용이 가능하지만 일반적으로는 메서드 레벨에 붙여서 사용하는 것이 일반적이다.
- 메서드 레벨에서의 @Cacheable
- 캐시에 데이터가 없다면 기존 로직을 수행한다.
- 캐시에 데이터가 있다면 캐시의 데이터를 반환한다.
- 스프링에서 지원하는 캐시는 어디에 저장이 될까?
스프링에서 지원하는 캐시는 메모리에 저장된다.
이때 메모리(=RAM)는 내부 프로바이더의 개념으로 사용된다.
메모리에 저장하고 있기 때문에 매우 빠르다
또한 ConcurrenHashMap와 같은 자료구조를 사용해서 저장한다.
외부 프로바이더의 개념으로 Redis, Ehcache와 같은 기술을 사용할수 있다.
이를 사용하면 캐시도 영속적(=프로그램 종료에서 사라지지 않는)으로 관리가 가능해진다.
- 캐시는 key - value로 구성되어 있다.
Key로는 해당 애너테이션이 붙은 메서드의 파라미터가 된다.
이때 메서드의 파라미터가 여러개라면 하나의 값만 지정해서 key로 설정이 가능하다.
value로는 @Cacheable(“ 이 안에가 value !”) 특별한 지정이 없다면 안에 들어간 값이 값으로 지정된다.
해당 애너테이션에 value, key 모두 지정이 가능하다.
@CachePut
- 캐시에 값을 저장하는 용도로만 사용된다.
- 조회 시에는 저장된 캐시의 내용을 사용하지 않고 메서드 로직만을 실행한다.
@CacheEvict
- 캐시 삭제에 사용된다.
- 캐시의 경우엔 적절한 시점에 제거가 되어야 한다.
- 캐시가 제거되어야 할 때
-일정한 주기로 캐시를 제거해야 할 때
-값이 변할 때
- 캐시 제거 방법
-키만 제거
-전부 제거 allEntires
📌참고 :https://mangkyu.tistory.com/179