[BE-01] 지원·서브시스템 → 코어 동기 의존 금지 규칙 (R3)

작업 내용 (설계 의도)

근거 TDD: ../TDD.md “FR-7 정적 검증 방법” R3 / ADR-004 / ADR-005

변경 사항

  • 지원 도메인(notification, weather, operator, alerting(⑥ 신규 — 착수 시 신설))·서브시스템(mcp)이 코어 도메인(booking·facility·goods·payment·ticketing·user·post·message)을 동기 의존(import) 하지 않음을 ArchUnit으로 강제한다. DomainClassification 지원 목록에 alerting을 포함한다(패키지 prefix 스캔이라 자동 커버되나 상수 명시로 누락 방지). alerting은 코어 동기 미호출이므로 R3 화이트리스트 예외 대상이 아니다.
  • R3 화이트리스트 예외 2건을 규칙에서 명시 제외한다: ① application.dashboard → 코어(읽기 전용 조합) ② application.partner → domain.user(② B2B — CreatePartnerUseCase의 admin 프로비저닝 쓰기 오케스트레이션). partner 예외는 사전 등록 — 현재 application.partner 패키지는 미존재(② 과제 신설)이나, ignoreDependency(또는 resideInAnyPackage 예외)로 partner→user를 미리 배선해 ② 착수 시 규칙 수정 없이 통과하게 한다. 이 예외가 없으면 ② 구현 시 ArchUnit이 false RED를 낸다.
  • application.partner → 코어(user 제외) 접근은 여전히 R3 위반으로 잡아야 한다(예외는 user에 한정).
  • 코어↔서브시스템 결합은 이벤트 단방향만 허용(ADR-004) — 이 규칙은 동기 import 역방향(지원→코어)을 차단해 코어 안정성을 보호한다.
  • 코어/지원/서브시스템 패키지 분류를 DomainClassification 상수 object로 이 티켓 안에서 정의한다(테스트 소스 architecture 패키지).
  • 신규 테스트 파일만 추가 — 프로덕션 코드 무변경. 베이스라인 위반 0건(operator/mcp/weather/notification → 코어 import 실측 0건).

위치

  • backend/src/test/kotlin/com/sportsapp/architecture/SupportToCoreDependencyRulesTest.kt (신규)
  • 기존 architecture/ 3개 테스트 파일과 동일한 ArchUnit + @Test 규칙 홀더 스타일을 따른다(선언적 규칙, 행위 테스트 아님).

의존

  • 없음 (독립 — 새 파일만 생성)

다이어그램

처리 흐름

sequenceDiagram
    participant T as SupportToCoreDependencyRulesTest
    participant A as ArchUnit
    participant S as com.sportsapp classes
    T->>A: noClasses().that().resideIn(support/subsystem)
    A->>S: import 스캔 (dashboard 제외)
    A-->>T: 코어 import 0건 → PASS

클래스 의존

flowchart LR
    Test["SupportToCoreDependencyRulesTest"] --> Classification["DomainClassification (상수)"]
    Test --> ArchUnit["ArchUnit ClassFileImporter"]

테스트 케이스

  • notification 패키지가 코어 도메인을 import하지 않으면 규칙이 통과한다 (베이스라인 0건)
  • operator 패키지가 코어 도메인을 import하지 않으면 규칙이 통과한다
  • mcp 패키지가 코어 도메인을 import하지 않으면 규칙이 통과한다
  • weather 패키지가 코어 도메인을 import하지 않으면 규칙이 통과한다
  • (위반 시나리오) application.operator가 domain.payment를 import하면 규칙이 실패한다
  • dashboard가 코어 도메인 서비스를 읽기 조합해도 화이트리스트로 규칙이 통과한다 (예외 검증)
  • application.partner가 domain.user를 호출해도(② B2B admin 프로비저닝) 사전 등록된 화이트리스트로 규칙이 통과한다 (false RED 방지)
  • (위반 시나리오) application.partner가 domain.payment 등 user 외 코어를 import하면 규칙이 실패한다 (예외는 user에 한정)