올리브영, 캐시 스탬피드 해결! 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 부하를 줄이고 서비스 안정성을 확보했다. 따라서, 캐시 스탬피드 문제를 효과적으로 해결하고, 사용자 경험을 개선했다.