[INFRA-09] docker-compose.sim.yml + 제어·상태 대시보드 통합
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “서버 토폴로지”·“Observability”, ADR-004. 모든 스크립트·reseed를 컨테이너로 묶는 단독 통합(와이어업) 티켓 — 공통 파일(sim.yml·Makefile·대시보드·README)을 한 티켓만 수정(Single Writer). 마지막 wave.
docker-compose.sim.yml(신규, ⑦ 소유) —k6-runner(스크립트 04~07 마운트,--out experimental-prometheus-rw로 ⑤ Prometheus remote-write, CPU/메모리 상한 명시 — NFR 측정 왜곡 방지) +reseed(INFRA-08 스크립트 실행) 컨테이너. 앱/mock 미정의.Makefile(또는qa/load/sim.mk) —sim-up/sim-pause/sim-down(k6gracefulStop도착률 0 수렴). FR-7.qa/load/dashboards/simulator.json(신규) — ⑤ Grafana 프로비저닝용: 도달 TPS·활성 시나리오·거부율·목표 참조선·다음 스파이크 시각·reseed 이력. FR-6.qa/load/README.md갱신 — 상시 구동·제어·상태 조회 절차.
롤백: -f docker-compose.sim.yml 미적용 + make sim-down. 대상 앱 무영향.
의존
- INFRA-01·02·04·05·06·07·08 (전 스크립트·reseed·LB). 런타임 연동: ⑤ Prometheus remote-write receiver·Grafana.
다이어그램
클래스 의존
flowchart LR Make["Makefile 제어"] --> SimYml["docker-compose.sim.yml"] SimYml --> Runner["k6-runner (04~07)"] SimYml --> Reseed["reseed (08)"] Runner --> PromRW["⑤ Prometheus remote-write"] PromRW --> Dash["Grafana simulator.json"]
테스트 케이스
docker compose -f docker-compose.yml -f docker-compose.prod.yml -f docker-compose.lb.yml -f docker-compose.sim.yml config가 exit 0으로 병합된다.make sim-up으로 k6-runner·reseed 컨테이너가 기동되고 곡선이 시작된다.make sim-down이 k6 gracefulStop으로 도착률을 0으로 수렴시킨 뒤 컨테이너를 내린다.- k6-runner 컨테이너에 CPU/메모리 상한이 적용되어 관측 대상과 리소스가 분리된다.
- 도달 TPS·활성 시나리오가 ⑤ Grafana 대시보드에 실시간 노출된다(FR-6).
sim-pause는 러너만 멈추고 LB·reseed 컨테이너는 유지한다.