이전 AOF 에 대해서 배울 떄 Redis를 하나의 저장소 개념으로 접했었다.
하지만 실제로는 Redis를 캐시 개념으로 활용하는 경우가 훨씬 많다.그리고 프로젝트에서 Redis를 직접 명령어로 일일이 다루는 코드를 작성하지는 않을 것이다.
예를 들어 이렇게 하나하나 직접 조작하는 방식은 번거롭고 비효율적이다.
그러던 중에 Spring에서 제공하는
@Cacheable이라는 어노테이션을 알게 되었고,
이걸 Redis와 함께 사용하면 손쉽게 캐시를 적용할 수 있다는 사실을 발견했다.
Spring의 @Cacheable 어노테이션이 무엇인지 이해하기
@Cacheable을 Redis 캐시와 함께 효과적으로 사용하는 방법
자주 사용하는 데이터를 임시 저장해 빠르게 불러올 수 있게 하는 메모리 저장소이다.
사람으로 치면 DB는 장기기억
캐시는 단기기억이다.
만약, 너 일주일전에 뭐 먹었어? - "음... 아! 스파게티 먹었어!" 를 답변하고 단기기억에 저장한다.
( 30분 동안 기억한다고 가정 )
15분 뒤 "야 너 일주일 전에 뭐 먹었다고 했더라?" - "아니 아까 스파게티라고 했잖아."
일말의 고민없이 대답이 가능해진다.

요약 : 메서드 실행 결과를 자동으로 저장해 다음 호출 시 캐시된 값을 반환하는 스프링 어노테이션이다.
요약 : 코드에 캐싱 로직을 직접 구현하지 않고, 선언적으로 캐싱 기능을 적용할 수 있다.
( 위에 나처럼 미련하게 직접 작성하지 않도록 하기 위해서 )
( 출처 : https://oliviarla.tistory.com/148 )
자세한 설명은 위 블로그에 적혀있으니, 우린 큰 틀로 보겠다.
1. 메서드 호출 감지
2. 캐시 키 생성
3. 캐시 조회
4-1. 적중 Hit ( 실제 메서드 실행하지 않고 캐시된 값을 반환 )
4-2. 미스 Miss ( 원래 메서드를 실행하여 결과 가져오기 )
5. 캐시 저장 ( Miss 가 될 경우 캐시에 저장 )


준비 끝

오류 발생

Jackson이 LocalDate를 JSON으로 직렬화하려면
JavaTimeModule을 등록해야 하는데, 안 해서 에러가 났다는 소리이다.

해결 과정은 여기서 다루지 않고 다음 글에서 트러블 슈팅으로 자세하게 다뤄보도록 하겠다.
이 글은 Cacheable 사용하는 글이기 때문에....
현재 데이터에는 아무것도 없다. ( 이제 호출해보면? )
![]()
레디스가 비어있을 경우 Repository 에서 가져온다.
실제 Redis 에 캐시로 등록 되었다.
결과 까지 잘 나왔다.

첫 호출은 707 ms
두번째 같은 메서드로 호출한다면 1.6 ms
매우 효율적이다.