-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
배경
Flash Sale/한정수량 상품은 일반 구매와 달리 순간적인 고동시성을 처리해야 한다.
실제 차감보다 reservation을 먼저 도입하고, 결제 성공 시 확정/실패 시 해제하는 구조가 필요하다.
구현 내용
1. 예약 API 구현
POST /api/flash-sales/{flashSaleId}/reservations- 요청 단위로
reservationId발급 - 이미 유효한 reservation이 있는 경우 멱등 처리 정책 정의
2. Redis 상태 모델 구현
SKU 단위로 아래 상태 관리:
availablereservedsoldversion
3. Lua script 기반 원자 처리
하나의 스크립트 안에서 수행:
- 재고 충분 여부 검사
available -= qtyreserved += qtyversion += 1- reservation TTL 설정
- 이벤트(Stream 또는 Kafka publish 전 단계) 적재용 payload 생성
4. reservation TTL 처리
- 유효 시간 내 결제되지 않으면 만료
- 만료 시 release 대상으로 전환
5. API 응답 정의
- 예약 성공
- 품절
- 이미 종료된 이벤트
- 이미 reservation 존재
- rate limit/queue 정책은 후속 확장 가능
체크리스트
- Flash Sale reservation API 구현
- Redis key/schema 설계
-
available/reserved/sold/version모델 구현 - Lua script 구현
- reservation TTL 구현
- reservationId 발급 및 저장
- reservation 성공/실패 테스트 작성
- 동시성 테스트 작성
의존관계
선행
- 공통 도메인/엔드포인트/상태 모델 정의
후행
- 결제 확정/해제 구현
- 이벤트 반영 및 projection 구현
- reconciliation 구현
작업 순서
- Redis key/schema 확정
- Lua script 구현
- reservation API 연결
- TTL/만료 정책 구현
- 테스트 작성
완료 조건
- Flash Sale 요청은 RDB 직접 차감이 아니라 Redis reservation으로 처리된다.
- 다수의 동시 요청에서도 초과 reservation이 발생하지 않는다.
- reservationId와 TTL이 관리된다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels