Skip to content

Flash Sale 결제 성공 시 확정 / 실패 및 만료 시 해제 구현 #96

@koosco

Description

@koosco

배경

Flash Sale에서는 예약과 실제 판매 확정을 분리해야 한다.
예약 성공 후 결제가 완료되면 reserved -> sold, 결제 실패/만료 시 reserved -> available로 상태를 전이해야 한다.


구현 내용

1. 결제 성공 시 confirmation 흐름 구현

  • 입력: reservationId, orderId
  • 검증:
    • reservation 존재 여부
    • reservation 만료 여부
    • 이미 확정되었는지 여부
  • 처리:
    • reserved -= qty
    • sold += qty
    • version += 1
    • 상태를 CONFIRMED로 전이

2. 결제 실패/사용자 이탈/TTL 만료 시 release 흐름 구현

  • 입력: reservationId
  • 처리:
    • reserved -= qty
    • available += qty
    • version += 1
    • 상태를 RELEASED 또는 EXPIRED로 전이

3. 주문/결제와의 연결

  • 주문 생성은 reservationId 기반으로 가능해야 함
  • 결제 성공 이벤트 수신 시 confirmation 수행
  • 결제 실패/타임아웃 시 release 수행

4. 멱등 처리

  • 같은 confirmation/release 요청이 두 번 와도 중복 반영되지 않아야 함

체크리스트

  • confirmation 내부 API 구현
  • release 내부 API 구현
  • reservation 상태 전이 검증 구현
  • 결제 성공 시 confirmation 연결
  • 결제 실패/타임아웃 시 release 연결
  • 멱등 처리 구현
  • 상태 전이 테스트 작성
  • 중복 호출 테스트 작성

의존관계

선행

  • Flash Sale reservation 구현

후행

  • 이벤트 반영 및 projection 구현
  • reconciliation 구현

작업 순서

  1. confirmation/release 내부 API 구현
  2. 주문/결제 플로우와 연결
  3. 멱등성 처리
  4. 테스트 추가

완료 조건

  • 결제 성공 시 reservation이 판매 확정으로 전이된다.
  • 결제 실패/만료 시 재고가 원복된다.
  • 동일 요청 중복 처리 시 상태가 깨지지 않는다.

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