Demo Flow
make demo/check는 source repo의 최소 end-to-end 흐름을 검증합니다.
1. 흐름
signal fixture
-> signal-device-simulator
-> POST /signal-packets
-> patient-risk-python-api
-> monitoring snapshot
-> review queue
-> patient-monitor-ui-core view model
-> patient-monitor-react-components render
-> clinical UI accessibility smoke
-> alarm acknowledge/mute workflow
2. 검증하는 것
- synthetic signal packet이 API로 전송되는지
- Python API가 monitoring snapshot과 review queue를 만드는지
- TypeScript UI core가 live API 응답을 ViewModel로 바꾸는지
- React component가 waveform, numeric, risk, alarm state, clinician review queue를 렌더하는지
- rendered App markup이 clinical landmark, waveform image role, alarm live region, review item semantic label을 유지하는지
- acknowledge/mute action이 API를 통해 snapshot state로 되돌아오는지
3. 실행
3-1. In-memory demo
make demo/check
이 명령은 local 임시 포트를 사용합니다. 별도 서버를 미리 띄울 필요는 없습니다.
기본 demo는 Rust/PyO3 Python package를 현재 uv environment에 먼저 설치한 뒤 PATIENT_RISK_STORAGE_BACKEND=memory로 실행합니다. 따라서 local machine에는 Rust toolchain과 maturin build 경로가 필요합니다. Python API process 안의 in-memory repository가 signal packet, monitoring snapshot, review queue state를 들고 있으므로 가장 빠르게 end-to-end 흐름을 확인할 수 있습니다.
3-2. Storage-backed demo
PostgreSQL/Redis adapter까지 확인하려면 아래 명령을 사용합니다.
make demo/check/storage
make demo/check/storage는 Docker container로 PostgreSQL과 Redis를 띄운 뒤 같은 demo smoke를 PATIENT_RISK_STORAGE_BACKEND=postgres-redis로 실행하고, 완료되면 container와 demo volume을 정리합니다. 이때 signal packet과 review queue는 PostgreSQL에 저장되고, latest monitoring snapshot과 alarm state는 Redis에 저장됩니다.
기본 port는 local 개발에서 충돌을 줄이기 위해 아래처럼 잡습니다.
| Store | URL |
|---|---|
| PostgreSQL | postgresql+psycopg://patient_risk:patient_risk@127.0.0.1:55432/patient_risk |
| Redis | redis://127.0.0.1:56379/0 |
port를 바꾸고 싶으면 Make variable을 override합니다.
make demo/check/storage \
DEMO_DATABASE_URL=postgresql+psycopg://patient_risk:patient_risk@127.0.0.1:15432/patient_risk \
DEMO_REDIS_URL=redis://127.0.0.1:16379/0
Rust Python wheel 설치와 demo smoke는 서로 다른 uv 실행 인자를 받습니다. Nexus PyPI credential이 없는 local 환경에서는 Rust Python wheel 설치에 공개 PyPI index를 명시합니다.
make demo/check/storage \
RUST_PYTHON_UV_RUN_ARGS="--default-index https://pypi.org/simple --index-strategy unsafe-best-match"
API process 자체에 추가 uv 인자가 필요하면 DEMO_UV_RUN_ARGS를 사용합니다. Nexus PyPI credential이 있는 CI 환경에서는 두 값을 비워 내부 proxy 경로를 검증할 수 있습니다.
이 저장소 topology는 local demo용입니다. 운영 schema migration, backup, PHI 보관 정책, Redis persistence policy는 CD/infra repo의 책임으로 둡니다.
3-3. 장시간 실행 demo
브라우저에서 직접 확인하려면 아래 명령을 사용합니다.
make demo/run
make demo/run은 아래 topology를 Docker Compose로 띄웁니다.
signal-device-simulator seed
-> patient-risk-python-api
-> PostgreSQL
-> Redis
-> patient-risk-web
-> /api proxy
-> patient-risk-python-api
기본 URL은 아래와 같습니다.
| Service | URL |
|---|---|
| Python API | http://127.0.0.1:39080 |
| Web UI | http://127.0.0.1:39081 |
Web container는 browser CORS 문제를 피하기 위해 /api를 patient-risk-python-api:8080으로 proxy합니다. Browser는 http://127.0.0.1:39081만 호출하고, nginx가 내부 compose network의 API로 전달합니다.
API container는 /healthz가 아니라 /readyz로 healthcheck를 수행합니다. 이 endpoint는 PostgreSQL과 Redis readiness를 확인하므로, Web container는 storage-backed API가 준비된 뒤 시작됩니다.
포트가 이미 사용 중이면 아래처럼 실행 포트를 바꿉니다. DEMO_API_URL은 simulator가 seed packet을 보낼 주소이므로 API port와 함께 맞춰야 합니다.
make demo/run \
DEMO_API_PORT=39082 \
DEMO_WEB_PORT=39083 \
DEMO_API_URL=http://127.0.0.1:39082 \
DEMO_WEB_URL=http://127.0.0.1:39083
종료하려면 아래 명령을 사용합니다.
make demo/stop
로그를 보려면 아래 명령을 사용합니다.
make demo/logs