백엔드
올리브영은 왜 선물하기를 개편했을까? Part - 2
두줄요약
선물하기 전시 영역의 캐시 적용 방식을 커스텀 모듈과 AoP로 재구성했습니다. Redis 분산 락을 더해 캐시 스탬피드까지 해결했습니다.
문제 상황
- 선물하기 전시 영역에서 캐시 적용 코드가 @CircuitBreaker와 @Cacheable로 분리되어 사용성과 유지보수성이 떨어짐
- 캐시 key, TTL, Redis hash 지원, fallback 처리 등 요구가 늘어나며 기존 방식의 한계가 드러남
- 부하 테스트에서 캐시 만료 시 다수 요청이 DB로 몰리는 캐시 스탬피드 발생
해결 방법
- @DisplayCaching, @DisplayCachingKey, DisplayCacheModule, Aspect를 조합한 커스텀 캐시 모듈 설계
- Redis VALUE/HASH 지원, 동적 키 생성, 날짜 접미사, TTL, 실패 처리 옵션, fallback 후 재적재 여부를 어노테이션 속성으로 제어
- 캐시 스탬피드 대응을 위해 Redis 기반 분산 락을 추가해 fallback 실행을 한 번으로 제한
