시설 전국 확장·대기질 연동 — 통합 DAG · wave 계획 (TPM)
근거 설계: 같은 디렉토리 PRD.md / TDD.md / design-db.md / design-fe-web.md / design-fe-app.md / tickets/* 설계 정합 게이트: private-senior-pm verdict = PASS (2026-07-04, FR-1~14 전건 커버·오버엔지니어링 0·대기질 mock+Gateway 범위 부합).
도메인 간 통합 DAG (인프라 → BE → FE)
flowchart LR subgraph Infra["인프라 wave (BE 게이트 전)"] MySQL["MySQL V43 regions+seed 230행"] Mongo["Mongo idx_sido_sigungu_type"] Redis["Redis airquality:measurement 키계약"] end subgraph BEw["BE wave"] BE1["w1: BE-01 지역계약 · BE-03 대기질계약 · BE-09 mock"] BE2["w2: BE-02 seed·resolver · BE-04 데이터층 · BE-05 Gateway · BE-08 조회API"] BE3["w3: BE-06 조회·통계·MCP · BE-07 생성·적재 · BE-10 백필"] end subgraph FEw["FE wave (BE API 확정 후)"] FEweb["웹 w1~3: FE-01~09"] FEapp["모바일 w1~3: FE-10~16"] end MySQL --> BE2 Mongo --> BE4gate["BE-04 데이터층"] Redis --> BE5gate["BE-05 Gateway"] BE1 --> BE2 --> BE3 BE9["BE-09 mock"] --> BE5gate BE3 --> FEweb BE3 --> FEapp BE8gate["BE-08 조회API"] --> FEapp
도메인 간 게이트 (계약 단위 엣지만)
| 게이트 | 선행 | 후행 | 계약 근거 |
|---|---|---|---|
| G1 인프라→BE seed | MySQL V43 regions+seed | BE-02 resolver | RegionResolveGatewayImpl이 regions 조회 (design-db §3) |
| G2 인프라→BE 인덱스 | Mongo idx_sido_sigungu_type | BE-04 데이터층 | FacilityRepositoryImpl region 필터 (design-db §4.2) |
| G3 인프라→BE 캐시 | Redis 키계약 | BE-05 Gateway | AirQualityMeasurementCache TTL 10분+jitter (TDD §실패경로) |
| G4 mock→Gateway | BE-09 에어코리아 mock | BE-05 Gateway | env 스위치 base-url localhost:9102 (TDD AS-IS) |
| G5 BE API→FE | BE-06 FacilityResponse region 4필드 / BE-08 GET /air-quality | FE-01/07/09 (웹)·FE-11~16 (모바일) | API 계약 필드 1:1 (senior-pm §3 정합 확인) |
- 인프라 3종은 서로 독립 (다른 파일) → 동시 스폰.
- 웹·모바일 FE는 독립 → BE API 확정 후 동시 개시.
- FE 인프라 비의존 선행(FE-10 모바일 테마 모듈)은 BE와 병렬 가능하나, 본 계획은 BE-06/08 확정 후 FE 일괄 개시(계약 안정 우선).
계약 정합 확인 (senior-pm PASS 기반)
| 계약 | BE 측 | FE 측 | 결과 |
|---|---|---|---|
| GET /air-quality (pm10/pm25/pm10Grade/pm25Grade/representativeGrade/stationName/measuredAt) | BE-08 / TDD 시그니처 | FE-02(웹)·FE-11(모바일) 타입 | 일치 |
| FacilityResponse region 4필드 (sido/sigungu code·name) | BE-06 | FE-01(웹)·FE-11(모바일) | 일치 |
| 도메인 모델 ↔ DB 테이블 | TDD ERD | design-db §7 대응표 | 일치 (FK/ENUM/JSON/BOOLEAN 0) |
| 이벤트 계약 (Kafka) | 해당 없음 (이 기능은 이벤트 미발행) | — | N/A |
wave 계획 · 너비 (위상정렬)
| 도메인 | wave | 티켓 | 너비 |
|---|---|---|---|
| 인프라 | I1 | MySQL / Mongo / Redis | 3 |
| BE | 1 | BE-01 · BE-03 · BE-09 | 3 |
| BE | 2 | BE-02 · BE-04 · BE-05 · BE-08 | 4 |
| BE | 3 | BE-06 · BE-07 · BE-10 | 3 |
| FE(웹) | 1~3 | FE-01~09 | 평균 3 |
| FE(앱) | 1~3 | FE-10~16 | 평균 2~3 |
직선형 아님 (모든 wave 너비 ≥ 3, 앱 일부 2) — 분해 유효.
확정 사항 (구현 착수 전 TPM 정정)
- Flyway 번호: 설계의 V38 → 실제 V43. origin/dev 최신이 V42(create_alerts)라 V38은 이미 create_partner가 점유. mysql-implementer는 V43로 작성.
- 워크트리: 전 implementer는 origin/dev(0e06989e) 기준 분기 전용 worktree에서 작업 (staleness·마이그레이션 번호 충돌 회피).
- 대기질 실연동(Release S4)은 실 키 발급 전제 → 구현 범위는 mock(BE-09)+Gateway(BE-05 env 스위치)까지. env 스위치로 실연동 전환 가능하면 완료 간주.
진행 상태 (도메인 × wave × 티켓)
I1 진행 중 → BE1 대기 → BE2 대기 → BE3 대기 → FE 대기. 상세 상태는 최종 보고 참조.