[INFRA-05] B2C 일주기 쓰기 곡선 (30%, 소진성)
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “곡선 배율표”·“소진성 자원”. FR-2. B2C 목표의 30% 이하를 소진성 쓰기로 발생 — reseed(INFRA-08)와 짝을 이뤄 409 붕괴를 억제.
qa/load/k6/b2c-diurnal-write.js(신규) —ramping-arrival-rate,b2cWriteStages(timeScale)(peak 900). 쓰기 혼합:POST /bookings(slotId, X-User-Id),POST /goods-orders(X-User-Id + Idempotency-Key),POST /events/{id}/seats/select+POST /ticket-orders(Idempotency-Key). 자원 소진 시 409는 정상 비즈니스 응답으로 분류(5xx만 실패 집계, 기존 스크립트 관례).syntheticUserId·handleSummary.
롤백: 스크립트 미기동(오버레이 OFF). reseed와 독립.
의존
- INFRA-01 (lib), INFRA-03 (synthetic 시드)
다이어그램
클래스 의존
flowchart LR Diurnal["lib/diurnal.js"] --> WriteScript["b2c-diurnal-write.js"] Pool["lib/pool.js"] --> WriteScript WriteScript --> Booking["POST /bookings"] WriteScript --> Order["POST /goods-orders"] WriteScript --> Ticket["POST /seats/select·/ticket-orders"]
테스트 케이스
k6 inspect가 쓰기 시나리오·stage를 오류 없이 파싱한다.- 소진성 쓰기 3종이 곡선을 따라 호출되고 피크 도달 TPS가 목표 900의 ±10% 이내다.
- 자원 소진 시 409가 반환되어도 5xx 실패로 집계되지 않는다(정상 비즈니스 응답).
- 동일 Idempotency-Key 재요청이 중복 주문을 만들지 않는다(멱등 규약 준수).
- reseed 없이 구동하면 특정 시간대 409율 50%를 초과하고, reseed(INFRA-08) 병행 시 50% 미만으로 수렴한다.