개요

Untitled

프로젝트에서 특정 기간 동안의 국가별 사용자 데이터에 대한 통계를 대시보드로 제공하려고 한다. 이 경우에 꽤 볼륨이 큰 쿼리를 사용하게 되는데, 일정 시간을 기준으로 하는 데이터이기 때문에 매번 사용자가 조회할 때마다 데이터를 전달하는 것보다 고정된 데이터를 주기적으로 업데이트만하고 이를 캐시로 제공하면 좋겠다고 생각했다.

이를 위해 Redis를 얹는 것보다, 로컬 캐싱만으로도 충분히 해결할 수 있는 볼륨이어서 Spring Cache, 그리고 로컬 캐싱에 특화된 캐싱 라이브러리인 Caffeine을 이용하고자 한다.


Spring Cache?

Spring에서 단순한 추상화(어노테이션)를 통해 캐시를 쉽게 사용할 수 있도록 지원하는 라이브러리다.

선언적인 방식(어노테이션, 무엇을 할지만 적어놓는다)을 통해 메서드의 실행 결과를 캐시에 저장하고, 같은 메서드 호출 시 캐시에 저장된 결과를 반환한다.

Caffeine?

스프링 공식 라이브러리는 아니지만, Github star수 14.1K(2023.08.14.), Java 8 이후로 Spring Boot에서도 auto-configuration을 지원할 정도의 신뢰도 높은 캐시 라이브러리다.

Caffeine이 제공하는 기능은 다음과 같다고 한다(Github피셜).

기존의 Spring Cache만으로는 별도의 Config을 설정하지 않는 이상 ConcurrentMap으로만 In-Memory 캐시를 관리하게 되는데, 이 때 특정 기준(대체로 쓰이고 난 후의 시간)에 따른 만료 등의 구현등이 어렵다.

하지만, Caffeine의 경우 라이브러리의 예쁜 추상화 덕분에 간편하게 위 기능들을 사용할 수 있다고 한다.


설정 구현