[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·병목이 기록된다