백엔드
올영세일 선착순 쿠폰, 미발급 0%를 향한 여정
두줄요약
올영세일 선착순 쿠폰의 미발급 문제를 Redis와 MQ 비동기 구조에서 분석하고 개선했습니다. 이중 카운터 전략으로 정합성을 100% 확보하면서 성능 저하를 최소화했습니다.
문제 상황
- 올영세일 선착순 쿠폰 발급에서 1차 검증 후 MQ 기반 비동기 처리 과정 중 미발급 발생
- 사용자에게는 성공 응답이 갔지만 워커에서 실패해 CS 문의와 신뢰도 저하로 이어짐
원인 분석
- 1차 검증과 워커 재검증 사이의 시간 간극으로 인한 경합 상태
- Redis GET과 INCR 분리 호출로 인한 원자성 부재
- 이중 검증 구조 자체가 앞단 검증의 실효성을 약화
해결 방법
- 발급 수량 선차감으로 시간 간극 축소 시도
- Redis Lua 스크립트로 원자성 확보 검토 후 성능 저하로 기각
- 요청 수량용 별도 Redis 키를 둔 이중 카운터 전략 채택
성능/운영 포인트
- Lua 스크립트 적용 시 미발급과 과발급은 0건이었지만 처리량 약 21% 저하
- 이중 카운터 적용 후 정확성 100%와 성능 저하 약 8% 수준으로 균형 확보
- 키 네이밍, TTL, 정합성 모니터링, Redis 자원 추적, 장애 시 Fallback 필요
