Skip to content

Flash Sale 예약 API 및 Redis Reservation 구현 #95

@koosco

Description

@koosco

배경

Flash Sale/한정수량 상품은 일반 구매와 달리 순간적인 고동시성을 처리해야 한다.
실제 차감보다 reservation을 먼저 도입하고, 결제 성공 시 확정/실패 시 해제하는 구조가 필요하다.


구현 내용

1. 예약 API 구현

  • POST /api/flash-sales/{flashSaleId}/reservations
  • 요청 단위로 reservationId 발급
  • 이미 유효한 reservation이 있는 경우 멱등 처리 정책 정의

2. Redis 상태 모델 구현

SKU 단위로 아래 상태 관리:

  • available
  • reserved
  • sold
  • version

3. Lua script 기반 원자 처리

하나의 스크립트 안에서 수행:

  • 재고 충분 여부 검사
  • available -= qty
  • reserved += qty
  • version += 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 구현

작업 순서

  1. Redis key/schema 확정
  2. Lua script 구현
  3. reservation API 연결
  4. TTL/만료 정책 구현
  5. 테스트 작성

완료 조건

  • Flash Sale 요청은 RDB 직접 차감이 아니라 Redis reservation으로 처리된다.
  • 다수의 동시 요청에서도 초과 reservation이 발생하지 않는다.
  • reservationId와 TTL이 관리된다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions