[BE-12] 한정판 구매 시나리오 E2E + k6 스파이크 검증

작업 내용 (설계 의도)

변경 사항

오버셀 0·20000TPS 도전을 실증한다(근거 TDD: “Testing Plan”, PRD Success Metrics·M4). 마지막 wave 단독 통합 티켓.

  • Scenario 통합 테스트(전 레이어): 회차 개설→시드→동시 폭주(재고 100·요청 500)→오버셀 0 + 성공 정확히 100 + 거부 400. 시작 전(425)·소진 후(409)·멱등 재요청 경로 포함. Redis 다운 폴백 시 오버셀 0 유지 검증.
  • k6 스파이크: qa/load/k6/goods-limited-drop-spike.js 신규(ticket-seat-select-spike.js 하네스 재사용). 20000TPS 도전, 도달 TPS·병목(세마포어/DB 락/Redis) 기록, 5xx<1%, 정상 실패(409/425/403)는 에러율 제외. 사후 대사로 오버셀 0 확인.
  • 상시 트래픽 시뮬레이터 마케팅 스파이크 시나리오와 동일 기준 연계.

의존

  • BE-10 (Controller·config), BE-11 (지표·대사)

다이어그램

처리 흐름

sequenceDiagram
    participant K as k6 spike
    participant A as API
    participant R as Redis gate
    participant DB as MySQL
    K->>A: 20000TPS 구매 폭주
    A->>R: DECR (초과 즉시 거부)
    R-->>A: Admitted / SoldOut
    A->>DB: createPendingOrder (승인분만)
    Note over K,DB: 사후 대사 오버셀 0 확인

테스트 케이스

  • 재고 100·동시 500 요청 후 DB stock=0·성공 주문 정확히 100건·오버셀 0건이다
  • 소진 후 요청은 DB에 도달하지 않고 409로 즉시 거부된다 (쿼리 카운트/스팬 확인)
  • 시작 시각 이전 요청은 425와 openAt을 받는다
  • 동일 idempotencyKey 중복 전송 시 주문 1건만 생성된다
  • Redis 다운 폴백 상태에서도 오버셀 0을 유지한다
  • k6 스파이크 5xx 에러율이 1% 미만이고 도달 TPS·병목이 기록된다