시설 전국 확장·대기질 연동 — 통합 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 seedMySQL V43 regions+seedBE-02 resolverRegionResolveGatewayImpl이 regions 조회 (design-db §3)
G2 인프라→BE 인덱스Mongo idx_sido_sigungu_typeBE-04 데이터층FacilityRepositoryImpl region 필터 (design-db §4.2)
G3 인프라→BE 캐시Redis 키계약BE-05 GatewayAirQualityMeasurementCache TTL 10분+jitter (TDD §실패경로)
G4 mock→GatewayBE-09 에어코리아 mockBE-05 Gatewayenv 스위치 base-url localhost:9102 (TDD AS-IS)
G5 BE API→FEBE-06 FacilityResponse region 4필드 / BE-08 GET /air-qualityFE-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-06FE-01(웹)·FE-11(모바일)일치
도메인 모델 ↔ DB 테이블TDD ERDdesign-db §7 대응표일치 (FK/ENUM/JSON/BOOLEAN 0)
이벤트 계약 (Kafka)해당 없음 (이 기능은 이벤트 미발행)N/A

wave 계획 · 너비 (위상정렬)

도메인wave티켓너비
인프라I1MySQL / Mongo / Redis3
BE1BE-01 · BE-03 · BE-093
BE2BE-02 · BE-04 · BE-05 · BE-084
BE3BE-06 · BE-07 · BE-103
FE(웹)1~3FE-01~09평균 3
FE(앱)1~3FE-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 대기. 상세 상태는 최종 보고 참조.