모집·커뮤니티·시설상품·소모임예약·게시글연동 — 크로스 도메인 통합 DAG (TPM)
작성: 2026-07-07 · 레포: /Users/biuea/sports-application · 베이스: origin/dev 5ff07c7c (fresh, HEAD==origin/dev)
feature 브랜치(단일 누적): feat/domain-gap-recruitment-facility-20260707 (통합 브랜치 금지, 최종 1 PR→dev는 메인 세션이 수행)
근거 문서
- TDD A:
20260707-post-community-연동-tdd.md
- TDD B:
20260707-모집-시설상품-소모임예약연동-tdd.md
- DB 설계:
20260707-모집커뮤니티연동-design-db.md (S1~S6)
- FE 앱:
20260707-...-design-fe-app.md / FE 웹: 20260707-...-design-fe-web.md
- SSOT: 아키텍트
20260706-...-architecture.md, 두 PRD
계약 정합 (크로스 도메인)
| 계약 | 확인 |
|---|
posts additive + GET /communities/{id}/posts ↔ FE-app A-P2~P5 | ✓ (모임글 sportCategory 상속·미전송) |
recruitment 7 + GET /applications(내 신청, principal) ↔ FE-app A-R1~R6 | ✓ senior-pm 보강 반영 |
SlotResponse.status/programId·FacilityResponse 임베드 ↔ FE-app A-F1/A-F2·FE-web W-SL/W-OH/W-HD | ✓ |
| 도메인 모델 ↔ DB 테이블 | ✓ design-db 자가점검 1:1 |
| 이벤트 계약 | 신규 Kafka 0건(동기+Layer1), 신규 Redis 키 0건 → kafka/redis implementer 불요 |
| 미결(비차단) | FE cancellation-preview 역제안 — BE 미포함, FE 클라 계산 fallback 존재 |
인프라 마이그레이션 (design-db S1~S6, Flyway 시작 V56)
| 단계 | 산출 | 저장소 |
|---|
| S1 | V56 신규 4테이블(recruitments·applications·programs·community_bookings)+인덱스/UNIQUE | MySQL |
| S2 | V57 posts 3컬럼(community_id·sport_category·global_listed) | MySQL |
| S3 | V58 posts 인덱스 3종(A-Q1/Q2/Q3) | MySQL |
| S4 | V59 slots 2컬럼(program_id·status DEFAULT OPEN) | MySQL |
| S5 | V60 slots 인덱스(B-Q6) | MySQL |
| S6 | facilities $jsonSchema validator(moderate, operating_hours/holidays optional) | Mongo |
통합 DAG (도메인 × wave × 티켓)
flowchart LR
subgraph W0["W0 인프라"]
MY["MySQL S1~S5 (V56~V60)"]
MO["Mongo S6 validator"]
end
subgraph BEW1["BE W1 거버넌스·독립코어"]
B20[BE-20 SportCategory→common]
B22[BE-22 문서거버넌스]
B50[BE-50 core 등록]
B51[BE-51 recruitment 코어]
B56[BE-56 facility VO]
B57[BE-57 Slot status/programId]
end
subgraph BEW2["BE W2"]
B23[BE-23 Post 모델]
B24[BE-24 검색조건]
B52[BE-52 recruitment 서비스]
B58[BE-58 자동슬롯]
B59[BE-59 program]
B60[BE-60 community booking]
end
subgraph BEW3["BE W3"]
B25[BE-25 PostDomainService]
B26[BE-26 조회쿼리]
B27[BE-27 응답DTO]
B53[BE-53 recruitment presentation]
B55[BE-55 payment OrderType]
end
subgraph BEW4["BE W4 post usecases"]
B28[BE-28]
B29[BE-29]
B30[BE-30]
B31[BE-31]
B32[BE-32]
B33[BE-33]
end
subgraph BEW5["BE W5 post controllers"]
B34[BE-34]
B35[BE-35]
B36[BE-36]
end
W0 --> BEW1
B20 --> B23
B20 --> B24
B20 --> B60
B51 --> B52
B56 --> B58
B57 --> B58
B57 --> B59
B23 --> B25
B24 --> B25
B52 --> B53
B52 --> B55
B25 --> B28
B25 --> B32
B25 --> B33
B28 --> B34
B33 --> B36
BEW5 --> FEAPP["FE-app 게이트"]
BEW3 --> FEWEB["FE-web 게이트"]
BE→FE 게이트
- FE-web 게이트: BE facility 계약(BE-56 임베드·BE-57 slot status·BE-59 program 착지) 후 오픈. FE-web W1(FE-26 types·FE-27 dark toggle)은 BE 무의존이라 게이트와 병렬 가능.
- FE-app 게이트: BE post 컨트롤러(W5)·recruitment presentation(BE-53)·payment(BE-55) 착지 후 오픈 — 앱이 소비하는 최종 계약이 posts라 W5 완료가 기준.
Wave 상세 + 너비 분포
| Wave | 티켓 | 너비 | Single-Writer 비고 |
|---|
| W0 인프라 | MySQL(S1~S5), Mongo(S6) | 2 | 저장소 분리 → 파일 교집합 ∅ |
| BE W1 | BE-20·22·50·51·56·57 | 6 | 전부 다른 패키지(common/docs/test상수/recruitment/facility/booking) |
| BE W2 | BE-23·24·52·58·59·60 | 6 | BE-58·59 booking/facility 동일 도메인 — senior-be가 파일 충돌 시 순차화 |
| BE W3 | BE-25·26·27·53·55 | 5 | BE-53(controller) vs BE-55(payment OCGImpl) 분리 |
| BE W4 | BE-28·29·30·31·32·33 | 6 | 전부 별도 UseCase 파일 |
| BE W5 | BE-34·35·36 | 3 | 3개 컨트롤러 분리 |
| FE-app W1 | FE-01·02·03·04·05 | 5 | api/types 미러링·플래그 |
| FE-app W2 | FE-06·07·08·09·10 | 5 | 훅 |
| FE-app W3 | FE-11~23 (13) | 13 | 화면별 파일 분리 |
| FE-app W4 | FE-24·25 | 2 | 통합(라우트·모임상세 배선) |
| FE-web W1 | FE-26·27 | 2 | types·dark toggle |
| FE-web W2 | FE-28·29·30 | 3 | lib+BFF |
| FE-web W3 | FE-31·32·33 | 3 | 섹션 컴포넌트 |
| FE-web W4 | FE-34 | 1 | 통합 티켓(단독) |
- 직선형(전 wave 1~2) 아님 → 분해 성공. 평균 너비 BE≈4.7, FE-app≈6.3.
게이트 규칙
- 각 wave 종료: 변경 모듈 테스트 실제 실행 exit 0(raw) + code-reviewer(BE/FE)/infra-reviewer verdict APPROVED|COMMENT.
- REQUEST_CHANGES → 담당 수정 후 재리뷰, 통과 전 다음 wave 미개방.
- 실패/차단은 즉시 메인 보고(영향 범위 = 막히는 후행 개수 명시).
운영 제약 (준수)
- implementer isolation:worktree, 최신 origin/dev(=feature 브랜치 tip) 기반 분기.
- 마이그레이션 머지 직전
uniq -d 재검사(V56~V60 중복 방지).
- testcontainers reuse 끔,
qa-/doodlin- 컨테이너 삭제 금지.
- 테스트명에 티켓ID 금지. enum String 변환 비교 금지.
- push/PR/머지는 메인 세션 — 이 세션은 feature 브랜치 커밋까지만.
Document History
| 날짜 | 변경 |
|---|
| 2026-07-07 | 최초 — 통합 DAG(W0 인프라→BE W1~5→FE-app/web 병렬), 계약 정합 PASS(미결 1 비차단), 인프라 wave 착수 |