올리브영, 캐시 스탬피드 해결! 1.74초 → 5ms 로딩 속도 개선

by DD
10개월 전
조회수 7

커스텀 어노테이션 기반의 캐시 모듈을 개발하여 기존 Spring Cache의 불편함을 개선함

캐시 스탬피드 문제 해결을 위해 분산 락을 도입, Redis를 활용한 락킹 전략을 사용함

페이지 로딩 시간 1.74초 → 5ms로 단축, 서비스 안정성 및 성능 대폭 향상

커스텀 어노테이션 기반 캐시 모듈 설계

기존 @Cacheable@CircuitBreaker 어노테이션의 단점을 개선하기 위해 @DisplayCaching 어노테이션을 개발했다. 구체적으로, DisplayCacheInfo를 통해 캐시 설정 정보를 관리하고, @DisplayCachingKey를 사용하여 동적으로 캐시 키를 생성한다. 따라서, 코드 중복을 줄이고 가독성을 높여 유지보수성을 향상시켰다.

캐시 스탬피드 문제 해결: 분산 락 도입

캐시 만료 시 캐시 스탬피드 현상을 해결하기 위해 Redis를 활용한 분산 락을 구현했다. tryObtainRedisLock 함수를 통해 락 획득을 시도하고, 락 획득에 실패한 경우 일정 시간 대기 후 재시도한다. 반면, 락 획득에 성공한 스레드는 fallback 로직을 수행하여 데이터 일관성을 유지한다.

분산 락 적용 및 성능 개선 효과

분산 락 적용 후, 페이지 로딩 시간이 1.74초에서 5ms로 대폭 감소했다. FallbackLockOption을 통해 락의 최대 수명과 재시도 간격을 설정하여, DB 부하를 줄이고 서비스 안정성을 확보했다. 따라서, 캐시 스탬피드 문제를 효과적으로 해결하고, 사용자 경험을 개선했다.

올리브영은 왜 선물하기를 개편했을까? Part - 2