피드로 돌아가기
올리브영 테크블로그Backend
원문 읽기
무형상품 서비스에 캐시 적용하기
올디브의 무형상품 서비스가 ElastiCache for Redis와 Spring Boot의 @Cacheable 어노테이션을 조합하여 멀티 서버 환경에서 공유 캐시 인프라 구축
AI 요약
Context
무형상품 서비스는 사용자 요청 트래픽 분산을 위해 다중 서버를 구성하고 있었습니다. 로컬 캐시 방식은 서버 간 캐시 데이터 동기화(Replication)가 필요하고 동일 데이터 중복 저장으로 인한 비효율이 발생했습니다.
Technical Solution
- 글로벌 캐시 아키텍처 선택: LOCAL 캐시 대신 GLOBAL 캐시를 도입하여 모든 서버가 단일 캐시 서버에 접근하도록 설계
- ElastiCache for Redis 도입: AWS ElastiCache를 활용해 분산 인메모리 캐시 환경을 클라우드에서 관리
- Redis 엔진 선택: Memcached 대신 Redis 엔진을 채택하여 다양한 자료구조와 트랜잭션 지원
- RedisCacheManager 구현: Spring Boot 2의 CacheManager 인터페이스를 구현하여 Redis 연동, TTL·NULL 캐싱·키 prefix 등 커스터마이징 설정 적용
- @Cacheable 어노테이션 적용: 상품 조회 메소드에 @Cacheable을 선언하여 look-aside 캐싱 전략 구현, Spring AOP Proxy가 메소드 호출을 가로채 캐시 조회/저장 자동화
Key Takeaway
Auto Scaling이 필요한 멀티 서버 환경에서는 로컬 캐시의 동기화 비용을 제거하기 위해 글로벌 캐시를 선택해야 하며, Spring의 선언적 캐싱 어노테이션과 관리형 클라우드 서비스(ElastiCache)를 조합하면 반복적인 캐시 로직 코드를 제거할 수 있습니다.
실천 포인트
Spring Boot 2 이상에서 Redis 기반 분산 캐시가 필요한 멀티 서버 환경에서는 spring-boot-starter-data-redis 의존성 추가 후 RedisCacheManager를 빈으로 등록하고, 자주 조회되는 메소드에 @Cacheable(value="cacheName", cacheManager="managerName", key="#parameter") 어노테이션을 적용하면 데이터베이스 접근을 줄이면서 중복된 캐싱 로직을 제거할 수 있습니다.