[INFRA-03] synthetic provision — 유저 풀·파트너 키·drop 사전 준비

작업 내용 (설계 의도)

변경 사항

근거 TDD: ../TDD.md “synthetic 격리 계약”. FR-9 준비 산출물이자 스크립트·reseed의 데이터 계약 기반(연관 병목 → 단일 선행). 기존 seeds/*.sql 관례 계승.

  • qa/load/provision/provision.sh(신규) — 멱등 준비:
    • synthetic 유저 풀: POST /users/registersynthetic+<n>@loadtest.local 다수 생성(또는 SQL upsert), X-User-Id 900000+ 범위 확정.
    • B2B 파트너: ②의 POST /api/admin/partners(ADMIN)로 synthetic 파트너 + API Key 발급 → partner_<keyId>_<random>.env.sim에 기록(전 VU 공유용).
    • synthetic 상품·시설·슬롯·이벤트·좌석 baseline: qa/load/seeds/*.sql upsert(owner_id=1 더미, stock baseline, slot capacity).
    • 마케팅 drop: ③의 POST /limited-drops로 대량 수량 synthetic drop 개설, dropId를 .env.sim에 기록.
  • qa/load/seeds/simulator-baseline.sql(신규) — synthetic 자원 baseline upsert(reseed가 복원 기준으로 재사용).

롤백: synthetic 범위 한정 정리 SQL. 실데이터 무접촉.

의존

  • 없음 (wave 1 기반). 런타임 선행: ②(partner admin API)·③(limited-drop API) 배포.

다이어그램

클래스 의존

flowchart LR
    Provision["provision.sh"] --> Users["synthetic 유저 풀"]
    Provision --> Partner["② POST /api/admin/partners"]
    Provision --> Drop["③ POST /limited-drops"]
    Provision --> Seed["seeds/simulator-baseline.sql"]
    Partner --> EnvFile[".env.sim (키·dropId)"]
    Drop --> EnvFile

테스트 케이스

  • provision.sh를 2회 실행해도 synthetic 유저·상품이 중복 생성되지 않는다(멱등).
  • 실행 후 .env.sim에 유효한 partner_<keyId>_<random> 키와 dropId가 기록된다.
  • synthetic 상품 stock이 baseline 값으로 세팅되고 owner_id=1 더미로 격리된다.
  • synthetic 유저 email이 전부 @loadtest.local prefix라 실사용자와 구분된다.
  • ② 또는 ③ 미배포 시 해당 준비 단계만 스킵하고 나머지는 정상 준비된다(부분 가용).