[INFRA-07] 마케팅 스파이크 시나리오 (20000TPS 도전)
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “형제 과제 접점”(③), ADR-001. FR-5. 예약된 시각에 20000TPS를 목표로 급증·감쇠, ③ 한정판 엔드포인트 대상. 미달 시 도달 TPS·병목 기록(③과 동일 기준).
qa/load/k6/marketing-spike.js(신규) —ramping-arrival-rate,lib/diurnal.js#spikeStages()(0→20000, 30초 내 → steady → 감쇠). 대상POST /limited-drops/{dropId}/orders(X-User-Id + Idempotency-Key, dropId는.env.sim). 정상 실패(425/409/429/403)는 5xx 계산 제외.handleSummary로 달성률·병목(client vs server) 리포트. 예약 트리거: 연속 곡선 내startTime오프셋 또는 reseed 컨테이너 cron이 지정 시각에 기동.
의존
- INFRA-01 (lib), INFRA-03 (synthetic drop). 런타임 선행: ③ 배포.
다이어그램
처리 흐름
sequenceDiagram participant K as k6 spike participant L as nginx-lb participant B as backend K->>K: startTime 도달 K->>L: 0→20000 TPS (30초 내) L->>B: limited-drop orders B-->>K: 202/409(SoldOut)/429 K->>K: 감쇠 + gap report
테스트 케이스
spikeStages첫 stage가 30초 이내 target 20000에 도달한다(±30초 NFR).- 대상이 ③
POST /limited-drops/{dropId}/orders이고.env.sim의 dropId를 사용한다. - SoldOut(409)·Throttled(429)·TooEarly(425)가 5xx 실패로 집계되지 않는다.
- 20000TPS 미달 시 gap report에 달성률과 병목(client vs server)이 기록되고 실행이 중단되지 않는다.
- 예약 시각 도달 전에는 스파이크 부하가 발생하지 않는다.