[INFRA-03] synthetic provision — 유저 풀·파트너 키·drop 사전 준비
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “synthetic 격리 계약”. FR-9 준비 산출물이자 스크립트·reseed의 데이터 계약 기반(연관 병목 → 단일 선행). 기존 seeds/*.sql 관례 계승.
qa/load/provision/provision.sh(신규) — 멱등 준비:- synthetic 유저 풀:
POST /users/register로synthetic+<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/*.sqlupsert(owner_id=1 더미, stock baseline, slot capacity). - 마케팅 drop: ③의
POST /limited-drops로 대량 수량 synthetic drop 개설, dropId를.env.sim에 기록.
- synthetic 유저 풀:
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.localprefix라 실사용자와 구분된다. - ② 또는 ③ 미배포 시 해당 준비 단계만 스킵하고 나머지는 정상 준비된다(부분 가용).