Application cache

최형준·2022년 6월 29일
0

개요

웹 개발자로서 스프링 부트에서 어떠한 어노테이션을 통해 캐시를 사용할 수 있는지 파악하는게 좋을것 같다고 판단하여 수행

우선 스프링의 어느 부분에서나 @EnableCaching을 적용하면 그 프로젝트는 캐시를 사용가능하지만 최상단 스프링 부트를 처음 시작하는 부분에서 어노테이션을 붙여 준다면 캐싱이 가능하다.

Caching anotation 종류

@Cacheable

  • 캐시 데이터 생성 및 사용

    위와 같이 @Cacheable를 붙이게 된다면 HashTable 상태로 캐시를 저장하게 된다 그러고 나서 bookNo라는 키 값을 가지게 되고 Book이라는 반환값을 value 값으로 저장하게 된다.
    -파라미터가 없으면 0을 반환
    -파리미터가 하나만 있으면 해당 인스턴스 반환.
    -파라미터가 둘 이상 있으면 모든 파라미터의 해시를 계산한 키를 반환.

  1. getBestSeller(1) 처음 호출
    1.1 bestSeller 캐시에 bookNo(1)에 해당하는 값이 있는지 확인한다.(값이 없음)
    1.2 bestSeller 캐시에 값이 없으므로 해당 로직을 실행하여 값을 반환한다.
    1.3 반환한 값을 캐시에 bookNo(1)의 value로 저장한다.

  2. getBestSeller(1) 두번째 호출
    2.1 bestSeller 캐시에 bookNo(1)에 해당하는 값이 있는지 확인한다.(값이 있음)
    2.2 bestSeller 캐시에 값이 있으므로 해당 로직을 실행하지 않고 캐시에서 조회한 값을 반환한다.

  3. getBestSeller(2) 세번째 호출(bookNo가 바뀜)
    3.1 bestSeller 캐시에 bookNo(2)에 해당하는 값이 있는지 확인한다.(값이 없음)
    3.2 bestSeller 캐시에 값이 없으므로 해당 로직을 실행하여 값을 반환한다.
    3.3 반환한 값을 캐시에 bookNo(2)의 value로 저장한다.

파라미터가 객체라면 다음처럼 하위 속성에 접근이 가능하다.
그리고 키가 하나라면 다음처럼 #을 붙여서 원하는 key값을 지정가능
이게 바로 SpEL이라고 하는데 이거는 내가 따로 공부할 필요성이 보인다
참고자료 :https://blog.outsider.ne.kr/835?category=4
https://blog.outsider.ne.kr/837?category=4

나중에 따로 공부할것이다.


또한 특정 조건에 따라 캐시를 저장할 수도있다

@CachePut

메서드 실행에 영향을 주지 않고 캐시를 갱신해야 하는경우 사용.
(캐시를 갱신할 때 사용) 이것을 공부하기 전까지는 Cachable을 사용하면 데이터가 변경되면 알아서 캐시를 변경해주는줄 알았다.. cachable을 쓰면 DB가 변경되든 말든 저장된 캐시데이터만을 사용하는 것을 알았다. 비즈니스 로직을 짜며 어떤 부분에서 데이터가 변경되는지 체크하며 캐시를 다시 갱신하는데에 cacheput을 사용하면 될거같다.

@CacheEvict

캐시를 지울때 사용.

allEntries 옵션은 true라고 설정하게 된다면 메소드에 어떤 파라미터를 받게 되더라도 해당 캐시에 데이터를 다 삭제 해버린다.

추가

내가 알기로는 로컬 Cache인 EHCache와 Global Cache인 redis cache가 있는것 으로 알고있다.
그렇다면 스프링부트에서 제공되는 Cache를 사용하면 되지 왜? 위와 같은 것 들을 사용해야할까?
이유: Map의 구현체이다 보니 캐시관리에 필요한 기능들 부족
TTL,TTI(Time to interactive) TCP소캣대기 시간
물론 설정해줄순 있지만 위의것들에게 비해 불편하기 때문에 위와 같은 방법들을 사용하는것 같다.
또한 Springboot Cache구조는 ConcurrneHashMap 구조라고 한다. https://devlog-wjdrbs96.tistory.com/269
이 구조 까지 다 파악하려고 한다면 너무 오랜시간이 걸릴거같다. 당장의 Cache 이해만드로도 빠듯하니 이 부분은 추후 따로 공부해야겠다.

출처: https://mangkyu.tistory.com/179 [MangKyu's Diary:티스토리]
출처: https://www.youtube.com/watch?v=NxFJ-mJdVNQ

profile
긍정적으로 하루를 살아가자!!

0개의 댓글