피드로 돌아가기
올리브영 쿠폰 발급 개선 이야기
올리브영 테크블로그올리브영 테크블로그
Backend

올리브영 쿠폰 발급 개선 이야기

올리브영이 쿠폰 발급 시 DB 조회를 Redis 캐시로 대체해 6월 세일의 DB 경합 문제 해결

2022년 9월 28일8intermediate

Context

선착순 쿠폰 발급이 자정과 정오 두 시간대에 진행되면서 발급 수량 조건 체크 과정에서 DB 경합이 발생했다. 정오 시간에는 쿠폰 발급 외에 다른 활동도 동시에 처리되어 DB 부하가 가중되었다.

Technical Solution

  • 발급 수량 조회 방식 변경: 1차로 Redis에서 조회하고 실패 시 2차로 DB에서 조회하는 두 계층 구조 도입
  • Redis 선택 기준: Memcached와 달리 명시적 데이터 삭제가 가능해 전시/발급 기간 외 데이터 보관 불필요
  • 조건 체크 플로우차트 재설계: Redis를 통한 발급 수량 검증 로직 추가
  • Redis 운영 규칙 준수: 컬렉션당 1만 개 이하 아이템 제한, 싱글 스레드 특성상 장시간 명령어(Keys, Flushall 등) 사용 회피

Impact

9월 세일에서 발급 수량 관련 부하 소멸, 서비스 안정성 향상 달성.

Key Takeaway

대량 트래픽 시 특정 조건 체크(인벤토리 확인)가 병목이 될 때 In-Memory 캐시를 1차 조회층으로 도입하면 DB 경합을 효과적으로 분산할 수 있다. 다만 Redis의 싱글 스레드 특성과 메모리 관리 제약을 고려한 운영 규칙 준수가 필수다.


고트래픽 e-commerce 서비스에서 한정된 수량의 상품/쿠폰 발급 시 Redis를 발급 수량 조회의 첫 번째 저장소로 사용하고 캐시 미스 시에만 DB를 조회하는 패턴을 적용하면 DB 경합으로 인한 응답 지연을 제거할 수 있다.

원문 읽기