CLAUDE CODE ADAPTER · VERSION 1.17 · MAY 2026

AI-Driven Java Application
Development Methodology

A-ADM Core 방법론의 Claude Code + Java 구현 어댑터.
Spring Boot · 헥사고날 아키텍처 · 16개 슬래시 커맨드로 SDLC 전 단계를 자동화.

5
SDLC 단계
10+1
SKILL.md 파일
5
계약 파일
79
정합성 게이트
2
확장 문서
A-ADM 시리즈
● A-JADM Java · A-GADM Go Backend · A-FADM Frontend · React/TypeScript
A-JADM 확장 문서
Extension · 대규모 시스템 · 레거시 DB · v0.1 · Agents · Subagent · Agent Teams · v0.2

A-JADM이란

A-JADM은 A-ADM Core의 Claude Code 구현 어댑터입니다.
Java + Spring Boot + 아키텍처 (헥사고널 | 레이어드) 스택으로,
SKILL.md 10개 정규 + 1개 위성과 슬래시 커맨드 16개로 SDLC 전 단계를 자동화합니다.

A-ADM CORE 참조

이 문서는 A-ADM CoreClaude Code + Java 구현 어댑터입니다.
설계 원칙 · 계약 파일 스키마 · 추적성 규칙 · Wave 토폴로지 등 방법론 본질은 Core 문서를 참조하세요.

A-ADM Core 보기 → 이 어댑터 고유 내용: SKILL.md 구현 · 14개 슬래시 커맨드 · Java 21 고정 스택 · 테스트 피라미드
Lean
필요한 것만 정확하게
추적
UC → 코드 → 테스트 1:1
계약
파일 기반 스킬 연결
반복
BC 단위 점진적 구현

A-FADM과의 연결 구조

A-FADM 문서 보기 →

A-JADM은 백엔드 파이프라인을 담당하고, A-FADM은 프론트엔드(React/TypeScript) 파이프라인을 담당합니다.
두 방법론의 연결 지점은 /gen-openapi 커맨드가 생성하는 openapi.yaml입니다.

[ A-JADM — 백엔드 파이프라인 ]
/usecase → /domain-modeling → /arch-design → /implement-bc → /gen-test → /run-local
                                                                           │
                                                          /gen-openapi → openapi.yaml   ← 연결 지점
                                                                           │
[ A-FADM — 프론트엔드 파이프라인 시작 ]
openapi.yaml → /fe-spec → /fe-scaffold → /fe-implement → /fe-test
백엔드 API 명세 확정 전에도 openapi.yaml 초안을 기반으로 프론트엔드 파이프라인을 병렬로 진행할 수 있습니다.

세 가지 핵심 축

스킬 (Skill)
재사용 가능한 프롬프트 모듈
SKILL.md 오케스트레이터 + 참조 파일 구조.
세션마다 재작성하지 않고 커맨드 한 줄로 일관된 산출물 생성.
계약 파일 (Contract)
스킬 간 인터페이스
domain-context.md · arch-decisions.md · bc-plan.md.
스킬이 서로를 직접 호출하지 않고 파일로 소통.
슬래시 커맨드
자동화 실행 단위
CLAUDE.md에 정의된 /implement-bc, /gen-test 등.
계약 파일을 읽어 추론 없이 결정적으로 실행.

전통 개발 → AI-Driven 개발

A-ADM의 핵심 패러다임 전환과 계약 파일이 필요한 이유는 A-ADM Core 문서에 상세히 설명되어 있습니다.
이 섹션에서는 Claude Code 환경에서의 실제 적용 포인트를 정리합니다.

🎯

SKILL.md 오케스트레이터

각 스킬은 SKILL.md 파일 하나로 완결됩니다.
Claude Code가 파일을 읽고 실행 — 세션마다 프롬프트 재작성 불필요.

📄

계약 파일 자동 검증

domain-context.md가 없으면 스킬이 즉시 중단합니다.
계약 없는 추론 실행은 허용되지 않습니다.

슬래시 커맨드 자동화

CLAUDE.md에 정의된 14개 커맨드로 SDLC 전 단계를 한 줄로 실행.
BC 단위 점진적 구현이 기본 전략입니다.

5대 설계 원칙

5대 원칙의 전체 정의는 A-ADM Core → 설계 원칙을 참조하세요.
Claude Code 어댑터 관점에서의 적용 방식을 정리합니다.

① Lean
CLAUDE.md 4개 값 변경으로 배포

company, domain, base-package, java-version만 바꾸면 새 프로젝트에 즉시 적용됩니다.

② Traceability
@Test 메서드명 = Gherkin 제목

gen-test 스킬이 시나리오 ID 주석과 1:1 @Test를 자동 생성합니다.

③ Contract-File
파일 없으면 스킬 중단

arch-decisions.md 없이 /implement-bc를 실행하면 즉시 에러. 추론 모드 폴백 없음.

④⑤ Convergence + Scale
병렬 스킬 + Wave 분해

usecase-by-example ∥ domain-modeling 수렴 후 bc-plan.md Wave 순서로 구현.

FIXED STACK Java 21 Spring Boot 3.x Hexagonal | Layered JPA (Command) + jOOQ (Query) JUnit 5 + AssertJ Mockito + Testcontainers Lombok 금지

5단계 워크플로

요구사항 분석부터 실행까지, 각 단계는 명확한 입력·산출물·게이트를 가집니다.

위성 스킬 (선택적): Phase 2 모델링 산출물 검토를 위한 시각화 도구로 gen-class-diagram(v1, v1.6.1 신규)을 제공합니다.
domain-context.md → PlantUML 클래스 다이어그램 3종(docs/class-diagrams/) 생성.
55 게이트 무관, 빠져도 파이프라인 정상 동작.
자세한 내용은 스킬 파이프라인 § 위성 스킬 카드 참조.
1
요구사항 분석
/usecase → /usecase-by-example 순차 파이프라인
도메인 설명 (자연어)
       │
       ▼
/usecase [--level casual|fully-dressed]    ← Step 1
       │
       ▼
usecases/                                ← UC별 분할 저장 (검토·수정)
  ├── UC001-주문생성.md
  ├── UC002-주문취소.md
  └── ...
       │
       ▼
/usecase-by-example                   ← Step 2 (디렉토리 순회 또는 파일 지정)
       │
       ▼
features/                                ← UC별 1:1 .feature (domain-modeling 입력)
1
/usecase — UC 명세서 작성 (Usecase 2.0)
도메인 설명을 입력받아 구조화된 UC 명세서를 생성한다.
--level 분량 용도
brief2~5줄파이프라인 사용 금지
casual~1페이지기본값 — 내부 팀용
fully-dressed3~5페이지외부 이해관계자·복잡 예외
산출 항목: UC별 개별 파일로 usecases/ 디렉토리에 분할 저장.
기본 흐름(번호별 스텝) + 대안 흐름 + 예외 흐름 + 비기능 요구사항 포함.
2
/usecase-by-example — Gherkin 시나리오 변환
usecases/ 디렉토리의 UC 파일을 읽어 features/ 디렉토리에 .feature 파일로 변환한다.
파일 지정 시 해당 UC만 변환, 생략 시 디렉토리 전체 순회.
usecases/ 디렉토리가 없으면 중단하고 /usecase 실행을 안내한다.
UC 명세서 항목 Gherkin 변환
사전조건Given
기본 흐름 행위 (액터)When
기본 흐름 응답 (시스템)Then
대안 흐름Scenario 추가
예외 흐름에러 케이스 Scenario
산출물
📁 usecases/ (UC별 개별 .md 파일 — 검토 대상)
📁 features/ (UC별 1:1 .feature 파일)
→ Phase 2 domain-modeling + usecase-by-example 입력
파이프라인 연결 규칙
기본 흐름 Step N → When 절 행위 N으로 1:1 매핑
예외 흐름 E1, E2 → 에러 Scenario로 변환
usecases/UC001-주문생성.mdfeatures/UC001-주문생성.feature 1:1 대응
brief 수준은 파이프라인 사용 금지 — 정보 부족으로 Gherkin 변환 불가
2
설계
domain-modeling · arch-design · uc-to-skeleton (병렬 → 수렴 → 직렬)
1
도메인 모델링 (병렬 실행)
domain-modeling: BC 식별 → Aggregate → Command/Event → UL. usecase-by-example과 수렴 체크.
2
아키텍처 구조화 (arch-design)
모듈(single/multi) · web(mvc/webflux) · persistence(jpa / jpa+jdbc / jpa+jooq / jdbc) · messaging 확정.
jpa+jdbc: Command Side = JPA, Query Side = JdbcTemplate (경량 CQRS — SQL 직접 제어).
jpa+jooq: Command Side = JPA, Query Side = jOOQ (타입 안전 CQRS).
Lombok 금지 규칙 적용.
3
스켈레톤 생성 (uc-to-skeleton)
domain-context.md + arch-decisions.md → 클래스/패키지 스켈레톤 + PlantUML 시퀀스 다이어그램.
추론 없는 1:1 매핑.
수렴 조건 (게이트)
UL ↔ Gherkin 용어 일치
Aggregate 상태 ↔ Given/When/Then 일치
미통과 시 domain-modeling 재실행
계약 파일 산출
📋 domain-context.md
📋 arch-decisions.md
3
구현
/implement-bc · CLAUDE.md · BC 단위 반복
1
구현 전략 수립
bc-plan.md Wave 위상 정렬.
Core Domain BC 우선.
도메인 → 애플리케이션 → 어댑터 레이어 순서.
2
BC 단위 구현 (/implement-bc)
각 BC Gate 통과 후 진행.
3
고정 코딩 규칙 (Java 21 + Spring Boot 3)
Lombok 금지.
DTO·VO·Event → Record. Entity → 정적 팩토리.
DI → 명시적 생성자.
레이어 구현 순서 (arch-decisions.md 선택)
Hexagonal (권장)
domain — Aggregate, VO(record), Event(record), Port
application — UseCase, Command(record), Service
adapter — Controller, JpaEntity/JdbcRow, Adapter
Layered
domain — Entity, VO, Repository 인터페이스
service — 비즈니스 로직, 트랜잭션 경계
web — Controller, DTO
infrastructure — JpaRepository, 외부 연동
Wave Gate
mvn compile → mvn test
4
테스트
/gen-test · Gherkin 1:1 추적 · 테스트 피라미드 전략
테스트 피라미드 — 레이어별 비중 및 커버리지 목표
50%
domain
목표 ≥ 90%
JUnit 5 + AssertJ
25%
application
목표 ≥ 80%
JUnit 5 + Mockito
20%
adapter
목표 ≥ 70%
@WebMvcTest · @DataJpaTest
5%
E2E
시나리오 100%
Testcontainers
domain
JUnit 5 + AssertJ
Aggregate 불변식
VO 동등성 · 상태 전이
application
JUnit 5 + Mockito
Port → Mock 대체
이벤트 발행 verify
adapter
@WebMvcTest (web)
@DataJpaTest (jpa)
Testcontainers (jdbc)
PBT
Property-Based Testing
/gen-test --pbt
Aggregate 불변식이 임의 입력에 대해서도 성립하는지 Jqwik으로 자동 탐색.
도메인 레이어에만 적용.
@Property — 불변식 위반 경계값 자동 탐색
@ForAll @Positive — 수치 범위 제약 자동 적용
Arbitrary<T> — 복합 도메인 객체 생성기
계약
BC 간 계약 테스트
/gen-test --contract
arch-decisions.md의 messaging 파라미터를 읽어 도구를 자동 선택.
동기 ACL
Spring Cloud Contract
서버 측 스텁 자동 생성
비동기 Kafka
Pact
Consumer-Driven 계약
피드백 루프: 테스트 실패 원인이 요구사항이면 Phase 1, 도메인 모델이면 Phase 2, 구현이면 Phase 3으로 역추적합니다.
PBT 반례(counterexample)는 발견된 불변식 위반 입력값을 Jqwik이 자동으로 최소화(shrinking)하여 리포트합니다.
5
실행
/run-local · /run-check · Docker Compose · 프로파일 분리
1
/run-local — 로컬 실행 환경 기동
arch-decisions.md를 읽어 필요한 인프라(DB, Kafka, Redis 등)를 Docker Compose로 기동한 뒤 Spring Boot 애플리케이션을 시작한다.
--profile local 자동 적용.
2
/run-check — 실행 상태 검증
기동된 애플리케이션의 헬스 엔드포인트, DB 커넥션, BC 간 포트 연결, 메시지 브로커 토픽 존재 여부를 순서대로 확인하고 결과를 보고한다.
3
application.yml 프로파일 체계
local — Docker Compose 인프라, 디버그 로그.
test — Testcontainers 자동 기동, 격리 DB.
prod — 외부 인프라 연결, 최소 로그.
프로파일별 인프라 구성
프로파일 DB Kafka 기동 방법
localDockerDockerdocker compose up
testTCTCmvn verify 시 자동
prod외부외부환경 변수 주입
TC = Testcontainers 자동 기동
Run Gate (실행 완료 조건)
GET /actuator/health → 200 OK
✅ DB 커넥션 풀 정상
✅ BC 간 OutputPort 구현체 주입 확인
✅ messaging ≠ none → 토픽 존재 확인

Docker Compose 구성 — arch-decisions.md 기반 자동 생성

persistence=jpa
services:
  postgres:
    image: postgres:16-alpine
    ports: ["5432:5432"]
    environment:
      POSTGRES_DB: appdb
messaging=kafka
services:
  kafka:
    image: bitnami/kafka:3.7
    ports: ["9092:9092"]
    environment:
      KAFKA_CFG_NODE_ID: 0
application.yml
spring:
  profiles:
    active: local
  datasource:
    url: jdbc:postgresql://
      localhost:5432/appdb
jOOQ (persistence=jpa+jooq) 사용 시 추가 사항
jOOQ는 별도 인프라 불필요 — postgres 컨테이너는 동일하게 사용.
빌드 타임에 /gen-schema 산출물(schema.sql)을 jOOQ codegen이 읽어 Java 클래스 자동 생성.
pom.xml에 jOOQ codegen 플러그인 추가 필요 (arch-decisions.md 기반 자동 구성).
피드백 루프: Run Gate 실패 시 —
DB 연결 오류이면 Phase 3 adapter 수정, 포트 주입 실패이면 Phase 3 서비스/application 레이어, 토픽 미생성이면 /run-local 재실행.

각 스킬은 프로젝트 루트의 .claude/skills/ 디렉토리에 SKILL.md 파일로 저장됩니다.
슬래시 커맨드 실행 시 Claude Code가 해당 파일을 읽고 계약 파일을 참조하여 산출물을 생성합니다.
세션 간 상태 유지는 계약 파일이 담당하므로 스킬 자체는 무상태(stateless)입니다.

10개 스킬 파이프라인 + 1 위성 (v1.7 — 흐름 완전성 / v1.6.1 — gen-class-diagram 위성)

각 스킬은 독립적인 SKILL.md 오케스트레이터 + 참조 파일로 구성됩니다.
Phase 1은 순차 파이프라인, Phase 2 이후는 계약 파일로만 소통합니다.
check-spec은 파이프라인 외부에서 수시로 독립 실행하는 진단 스킬이며,
gen-class-diagram은 Phase 2 모델링 검토 보조 위성 스킬입니다.

usecase v1.3 usecase-by-example ⇅ 수렴 domain-modeling v2.4 arch-design v2.1 nfr-spec v2 gen-schema v2.1 uc-to-skeleton v6.1 implement-bc v3.2 ⇅ 세션분리 gen-test v3
+ 위성 스킬: domain-modeling v2.4 직후 (선택적) gen-class-diagramdocs/class-diagrams/*.puml. 70 게이트 무관, 빠져도 정상 동작.
usecase v1.3

UC 명세서 작성 스킬 (Section 3 `흐름` 컬럼)

도메인 설명을 Usecase 2.0 형식의 구조화된 명세서로 작성.
수준(--level)에 따라 Brief / Casual / Fully-dressed 산출.
핵심: Section 3 협력 인터페이스 테이블에 흐름 컬럼 신설 — 모든 인터페이스 호출을 main · alt:A{n} · exc:E{n} 중 하나로 태깅.
UC 명세는 spec-version 1.3 으로 작성한다.

입력: 도메인 설명 (자연어)
산출: usecases/UC{nnn}-{name}.md (N개, spec-version 1.3)
brief는 파이프라인 사용 금지 — Gherkin 변환에 정보 부족
기본값: --level casual
usecase-by-example

SBE 시나리오 스킬

usecases/ 디렉토리의 UC 파일을 읽어 features/에 Gherkin .feature 파일로 변환.
domain-modeling과 병렬 실행 후 수렴 체크.

입력: usecases/*.md
산출: features/*.feature
domain-modeling v2.4

DDD 도메인 모델링 스킬 (Schema 3.3 + Flow-Complete + Step 3.1.5)

Step 1 BC 식별 → Step 2 Aggregate 설계 → Step 3 Command/Event 매핑 → Step 4 interfaces[] · error-values[] · service-methods[] 도출 (main / alt / exc 3종 흐름 전부) → Step 5 UL 사전 + 수렴 검증 (K1~K9).
--bc 옵션으로 특정 BC만 증분 갱신 가능. UC Section 3 협력 인터페이스를 흐름 컬럼과 함께 interfaces[].uc-mapping[{uc, step, flow}] 에 1:1 매핑.

Schema 3.3 신규/확장 필드 (v1.8)
interfaces[].uc-mapping[]{uc, step, flow} 객체 배열로 확장 (v3.1 필수)
service-methods[].flow-typemain | alt-primary
service-methods[].alt-flows[] — 비승격 alt (entry-condition + uses-interfaces, if-else 분기)
service-methods[].compensation-flows[] — exc 보상 (trigger-error + uses-interfaces + raises-events, try-catch)
service-methods[].promoted-from — alt-primary 승격 추적 (uc / alt-flow / promotion-criteria)
alt 흐름 승격 기준 (4개 중 1개라도 만족 시 alt-primary)
transaction-boundary-independent · authorization-boundary-independent · time-boundary-independent · api-entry-independent
실행 모드
(옵션 없음): 전체 분석 — usecases/ 전체 순회
--bc {name}: 해당 BC만 증분 갱신 — source-uc로 관련 UC 자동 식별
--bc {name} --uc UC005,UC024: 명시한 UC만 해당 BC에 반영
--bc new: 미할당 UC 분석 → 신규 BC 후보 제안
입력: usecases/*.md (v1.3) + features/*.feature
산출: domain-context.md (schema 3.3)
arch-design v2.1

아키텍처 설계 스킬 (YAML Schema 1.1 + id/monetary/temporal-strategy)

Step 1 모듈 구조 → Step 2 BC 간 통신 → Step 3 adapter-classes[] 자동 도출 → Step 4 공유 커널 위치.
Markdown → YAML 형식. domain-context.md의 interfaces[].name 패턴 매칭으로 어댑터 클래스 자동 생성. parameters 에 id-strategy/monetary-strategy/temporal-strategy 3개 블록 포함.

핵심 파라미터
architecture: hexagonal | layered — 레이어 구조 결정
module: single | multi — Maven 모듈 분리 여부
persistence: jpa | jpa+jdbc | jpa+jooq | jdbc
exception-style: unchecked | checked — Exception 템플릿 선택
입력: domain-context.md (schema 3.3)
산출: arch-decisions.md (schema 1.1 YAML)
nfr-spec v2

비기능 요구사항 명세 스킬 (YAML 병합)

성능·보안·가용성·운영성 4개 카테고리를 대화로 도출하고 arch-decisions.md의 nfr: YAML 블록으로 병합.
코드 생성 지시를 AUTO(자동 생성)와 TODO(태그 주석)로 분류.
NFR 신규 Err*(CircuitOpen·RetryExhausted·Timeout·AuthInvalid·Forbidden)을 domain-context.md error-values[]에 자동 제안.

입력: arch-decisions.md
산출: arch-decisions.md의 nfr: 블록 + content-version MINOR 증가
AUTO: JWT·BCrypt·MDC·Actuator·Pageable TODO: Redis·Circuit Breaker·Retry
gen-schema v2.1

DB 스키마 생성 스킬 (schema 1.1 — pk-id-spec/sequences)

domain-context.md의 aggregates[]와 arch-decisions.md의 persistence 파라미터를 읽어 DDL 및 ERD 생성.
schemas-decisions.md(schema 1.1)에 테이블 메타 YAML을 저장해 uc-to-skeleton/implement-bc가 참조.

핵심 원칙
BC 간 REFERENCES 금지 (UUID-only, 런타임 ACL)
Aggregate Root 만 PK 생성, 내부 엔터티는 FK + cascade
Cross-BC 참조는 cross-bc-ref 메타로 추적성만 확보
입력: domain-context.md + arch-decisions.md
산출: schemas-decisions.md + erd.mmd + schema.sql
uc-to-skeleton v6.1

스켈레톤 생성 스킬 (S1~S9 게이트 + VO 6종 케이스)

5개 계약 파일을 입력으로 클래스/패키지 스켈레톤과 PlantUML 시퀀스 다이어그램 생성.
NFR AUTO 항목 클래스 포함. 추론 없는 1:1 매핑.
v1.8 부터 alt-primary 메소드 · 비승격 alt 흐름의 if-else 분기 · 예외 흐름의 try-catch 보상 블록까지 자동 전개.
S7 게이트: Service 생성자 파라미터 순서 = flatten(uses-interfaces + alt-flows[] + compensation-flows[]) (중복 제거 1회).

S 게이트 (9개, +S9 alt/exc Port)
· S1 Port 완전성
· S2 signature 일치
· S3 Exception 완전성
· S4 ERROR_ID 일치
· S5 Service 존재
· S6 method signature
· S7 생성자 flatten 순서
· S8 shared VO 위치
· S9 🆕 alt/exc 흐름 Port + 생성자 주입
입력: 5개 계약 파일 (domain-context 3.1)
산출: src/main/java/**/*.java (스켈레톤 + try-catch/if-else 뼈대)
implement-bc v3.2

BC 구현 스킬 (V1~V11 게이트)

UC Step 순서 → Service 본문 호출 순서 1:1 매핑.
compensation-flows[] 를 직접 소비하여 try-catch 본문을 결정론 구현하며, catch 타입은 trigger-errorexception-class 역참조로 결정.
중첩 보상 · 보상의 보상(manual queue) 패턴 자동 적용.

V 게이트 (11개, +V8/V9/V10/V11 신규)
· V1 Err* 6-레이어 일치
· V2 🆕 전 흐름 uses-interfaces 본문 호출 (확장)
· V3 Lombok 부재
· V4 persistence 규칙
· V5 UnsupportedOp 잔존 0
· V6 이벤트 publish (전 흐름)
· V7 🆕 보상 try-catch 위치 + catch 타입 일치 (AST)
입력: 5개 계약 파일 (domain-context 3.1) + 스켈레톤 (v5)
산출: Service 본문 (try-catch 보상 · if-else 분기 · alt-primary 메소드 포함)
gen-test v3

테스트 생성 스킬 (T0~T7 게이트)

반드시 별도 세션에서 실행 (T0 게이트).
Gherkin 성공(@UC-S) · 대안(@UC-A) · 예외(@UC-E) 전 Scenario ↔ @Test 1:1 변환.
@Mock 순서 = flatten(uses-interfaces 전 흐름).
InOrder.verify 로 호출 순서 검증.
ArgumentCaptor 로 main + alt + compensation 이벤트 필드 검증.
compensation-flows 트리거별 보상 호출 검증 @Test 자동 생성 (T7 신규).

T 게이트 (8개, T1 확장 + T7 신규)
· T0 순환논리 방지 (별도 세션)
· T1 🆕 전 Scenario ↔ @Test (확장)
· T2 getErrorId 일치
· T3 error-cases 전체 커버 (보상의 보상 포함)
· T4 @Mock flatten 순서
· T5 ArgumentCaptor (main+alt+comp)
· T6 Lombok 부재
· T7 🆕 compensation-flows 보상 호출 @Test (thenThrow + isInstanceOf + verify)
입력: 5개 계약 파일 (domain-context 3.1) + features/*.feature
산출: src/test/java/**/*Test.java
check-spec v6

72개 정합성 게이트 (★ v1.12) 통합 감사 스킬 (★ v1.10 — Architecture 산출물 분리 + N9 + 결정론적 명명 + ID·Money·Temporal)

v1.10 에서 72개 정합성 게이트 (★ v1.12)를 자동화 (★ N9 신규).
Phase 1 (C1~C10) + Phase 2 (K1~K9, S1~S9, N1~N6, D1~D6) + Phase 3 (V1~V7, T0~T7) 전체 재검증.
bash + grep + sed + Python(AST 기반 V7 만) 로 정적 검증 가능.
CI 통합 시 PR 단위 드리프트 감지.
--gates flow-completeness 옵션으로 흐름 완전성 9개만 집중 검증 가능.

· 67개 게이트 카테고리
· C UC↔Gherkin (8 → 10 +C9/C10)
· K modeling (8 → 9 +K9)
· S skeleton (8 → 9 +S9)
· N nfr (6)
· D schema (6)
· V implement (6 → 7 +V7)
· T test (7 → 8 +T7)
v1.8 신규 게이트 13개 요약
· C9 Section 3 `흐름` 필수값
· C10 Section 3 ↔ 본문 쌍방향
· K9 recovery-strategy ↔ compensation-flows
· S9 alt/exc Port + 주입
· V7 보상 try-catch AST
· T7 보상 @Test
입력: 5개 계약 파일 (domain-context 3.1) + 코드
산출: 드리프트 리포트 (PASS/FAIL/WARN/SKIP)
schema 단일 지원 (3.3/3.4 + 1.1 + 1.1) — 다른 schema 입력 시 ERROR + 종료
✅ PASS ⚠️ WARN ❌ FAIL ⏭️ SKIP
★ 위성 스킬 gen-class-diagram v1 위성 스킬

도메인 모델 시각화 — PlantUML 클래스 다이어그램 3종

Phase 2 모델링 산출물 검토를 보조하는 위성 스킬.
domain-context.md (schema 3.3/3.4) 단일 입력으로 PlantUML 클래스 다이어그램 3종을 결정론적으로 생성.
/domain-modeling 직후 즉시 실행 가능, arch-decisions.md · 코드 산출물 의존 0.

📊 산출 다이어그램 3종
  • class-overview.puml — BC × Aggregate Root 조감도 + cross-bc 점선
  • class-bc-{name}.puml (N개) — BC별 상세 (Aggregate · Entity · VO · Command · Event + invariants)
  • class-interfaces.puml — Hexagonal Port 의존도 + «uses» [n] 순서 보존
📁 산출 위치 — uc-to-skeleton 시퀀스와 정렬
docs/
├── class-diagrams/   ← gen-class-diagram
│   ├── class-overview.puml
│   ├── class-bc-{name}.puml
│   └── class-interfaces.puml
└── diagrams/         ← uc-to-skeleton
    └── UC{nnn}-skeleton.puml
✓ D 게이트 6개 (70 게이트와 별개)
  • D1 BC 노드 완전성
  • D2 BC별 Aggregate Root 수
  • D3 interfaces 완전성
  • D4 ★ uses-interfaces 순서 = «uses» [n] (S7 정렬)
  • D5 식별자 보존 (R1·R3·R4)
  • D6 PlantUML 문법
위성 스킬 원칙 — 정규 스킬과의 의도적 차별
항목 정규 스킬 위성 (본 스킬)
계약 파일 산출신규 계약 생성.puml
consumers 등록domain-context.md 등록❌ 미등록 (의존 그래프 미오염)
70 게이트 편입check-spec 통합❌ 자체 D1~D6 분리
하류 스킬 의존다른 스킬 입력❌ 사용자만 소비 (검토용)
★ uses-interfaces 순서 시각 정렬 (S7) --bc {name} 증분 모드 단일 입력 (domain-context.md) 추론 0% (R1~R5) 선택적 — 빠져도 정상 동작
계약 파일의 YAML 스키마 정의A-ADM Core → 스키마를 참조하세요.
이 섹션은 Claude Code 환경에서의 파일 간 흐름과 소비자 커맨드를 설명합니다.

계약 파일 체계

스킬 간 인터페이스를 파일로 명문화합니다.
소비자 커맨드는 파일 없이는 추론 모드로 실행하지 않습니다.
schemas-decisions.md를 포함한 5개 계약 파일이 schema-version + content-version + consumers 를 독립 관리합니다.

domain-context.md (인덱스)
schema 5.0 ★ v1.11
domain-modeling v4.0 산출 — 인덱스 + BC 파일 + 선택 shared 파일
BC · Aggregate · Value Object → 기본 도메인 구성 (v1.0)
Command · Event · Ubiquitous Language → v1.0
interfaces[] → UC Section 3 1:1 매핑
error-values[] → Err* ID · Exception · HTTP
service-methods[] → uses-interfaces 순서 보존
source-uc → BC↔UC 추적 (v1.3 추가)
Wave 분할 모드 → schema 3.3 (--split-waves)
소비자 (정규): arch-design · nfr-spec · gen-schema · uc-to-skeleton · implement-bc · gen-test · check-spec
위성 소비자 (consumers 블록 미등록, 의존 그래프 미오염): gen-class-diagram (시각화 검토용 위성 스킬)
arch-decisions.md
schema 2.0 YAML ★ v1.10
arch-design v2.1 + nfr-spec v2 병합
parameters → architecture · module · web · persistence · exception-style
fixed-stack → Java 21 · Spring Boot 3.x · JUnit 5
adapter-classes[] → interfaces[].name 자동 매칭
shared-kernel → VO 위치 결정
lombok-rules → 금지 패턴 + detection-regex
nfr: → performance · security · availability · operability (YAML 블록)
exception-style → ERROR_ID · HTTP_STATUS 템플릿 자동 적용
소비자: uc-to-skeleton · implement-bc · gen-test · check-spec · gen-schema
schemas-decisions.md
schema 1.1
gen-schema v2.1 산출
tables[] → aggregate → 테이블 매핑
saver-interface → interfaces[*Saver] 매칭
cross-bc-references → fk-constraint: false
CHECK constraint → aggregates[].states 일치
invariant-source → aggregate invariants 추적
소비자: uc-to-skeleton · implement-bc · check-spec
bc-plan.md
개발자 작성 (멀티 BC)
Wave 정의 → 구현 순서
depends-on → 순환 의존 검사
output-ports → ACL/Event 결정
communications → 통신 매핑표
shared-kernel → VO 위치 확정
소비자: implement-bc · gen-test
domain-glossary.md ★ v1.9
선택 입력 — schema 1.0
terms[] → en/ko/type/bc-context/definition (필수) + aliases-ko/not-aliases-ko/examples/note (선택)
terms[].type enum 8가지 (aggregate/entity/value-object/command/event/error/domain-service/actor)
bc-context → 분기 어휘 (다의어) 시 disjoint 강제 (G2)
normalizations[] → 한국어 어형 정규화 (R-DISC-3 강화) — 선택
meta-nouns[] → 변별력 없는 메타 명사 필터 — 선택
소비자: domain-modeling v2.4 · uc-to-skeleton v6.1 · check-spec v6 · 부재 시 G1·G2·G3 SKIP + WARN

파일 간 흐름

도메인 설명 (자연어)
       ↓
/usecase [--level]  → usecases/            ← UC별 분할 저장 + Section 3 협력 인터페이스
                        ├── UC001-주문생성.md
                        ├── UC002-주문취소.md
                        └── ...
       ↓
/usecase-by-example → features/            ← Scenario UC{NNN}-S/E{nn} 1:1 변환
                        ├── UC001-주문생성.feature
                        └── ...
       ↓
domain-context.md   ← domain-modeling v2.4 (schema 3.3)
                       BC · Aggregate · VO · Command · Event · UL
                       + interfaces[] (uc-mapping[{uc, step, flow}])            ◀ 흐름 보존
                       + error-values[] + service-methods[]                     ◀ schema 3.3 신규
                         · flow-type · alt-flows[] · compensation-flows[]       ◀ schema 3.3 신규
                         · promoted-from                                        ◀ schema 3.3 신규
       │
       ├┄┄┄┄ (선택, 위성) → docs/class-diagrams/   ← gen-class-diagram v1   ◀ 위성 스킬
       │                       class-overview.puml + class-bc-{name}.puml(N) + class-interfaces.puml
       │                       (D1~D6 게이트, 70 게이트 무관, 검토 보조)
       ↓
arch-decisions.md   ← arch-design v2.1 (schema 1.1 YAML)
                       parameters · adapter-classes[] 자동 도출 · shared-kernel
       ↓
arch-decisions.md   ← nfr-spec v2.1 병합 (★ v1.11 — 인덱스 → BC 파일 합집합)
                       nfr: { performance · security · availability · operability }
       ↓
schemas-decisions.md + erd.mmd + schema.sql   ← gen-schema v2.2 (★ v1.11)
                       tables[] · saver-interface · cross-bc-references
       ↓
bc-plan.md          ← 개발자 작성       (depends-on 그래프 · 통신 · ★ v1.11 waves[] 폐기)
       ↓
Java 스켈레톤       ← uc-to-skeleton v7.0  (★ v1.11 — 인덱스 → BC 파일 lookup · arch-decisions 단일 참조)
       ↓
BC별 구현           ← /implement-bc v4.0   (★ v1.11 — 인덱스 → 단일 BC 파일 · V1~V11 게이트)  ◀ 세션 A
       ↓
테스트 스위트       ← /gen-test v3.1     (T0~T7 게이트: 전 Scenario · 보상 @Test 자동 생성)  ◀ 세션 B
       ↓
72-gate 감사        ← /check-spec v8     ★ v1.11 — 72개 게이트 (★ v1.12) (B1, B2 신규 + N9 보강)

79개 정합성 게이트 카탈로그

7개 카테고리 79개 게이트가 UC ↔ Gherkin ↔ domain-context ↔ 코드 ↔ 테스트 전 구간 정합성 + 전 흐름(main + alt + exc) 커버리지 + 보상 트랜잭션 구조를 보장합니다.
모든 게이트는 추론 없이 정적 매칭으로 통과 여부가 결정됩니다.

C 게이트 — UC ↔ Gherkin (10개, +C9/C10 흐름 컬럼)

Phase 1 매칭

C1 UC ↔ feature 1:1
C2 feature 헤더 # UC: 주석
C3 Section 3 행 수 = # Interfaces 주석 수
C4 @UC-S 태그 ≥ 정상 시나리오
C5 @UC-E 태그 수 = E 흐름 수
C6 feature Err* ⊆ UC Error Values
C7 BR 주석 보유
C8 Actor/System 태그 일관성
C9 🆕 Section 3 `흐름` 컬럼 필수값 (main|alt:A{n}|exc:E{n})
C10 🆕 Section 3 alt/exc 라벨 ↔ 본문 블록 쌍방향
K 게이트 — modeling (14개, +K9, +K10/K10b/K11/K12/K13)

domain-modeling v2.4

K1 UC → service-methods.source-uc 등록
K2 UC package ⊂ BC package
K3 Section 3 행 수 = uc-mapping 카운트
K4 aggregates.states 가 feature 에 등장
K5 🔄 전 흐름 uses-interfaces = [System] 호출 (확장)
K6 feature Err* ⊆ error-values[].name
K7 command.error-cases ⊆ service.error-cases
K8 forbidden-synonyms 미사용
K9 🆕 recovery-strategy ↔ compensation-flows[trigger-error]
K10 🆕 *Id VO 의 id-spec.origin 명시
K10b 🆕 domain-managed 필수 필드 (format/issuance-strategy/reason)
K11 🆕 internal 오버라이드 시 reason 10자 이상
K12 🆕 Money/Temporal 패턴 VO 의 spec 명시
K13 🆕 monetary/temporal-spec 오버라이드 시 reason 10자 이상
S 게이트 — skeleton (9개, +S9 alt/exc Port)

uc-to-skeleton v6.1

S1 interfaces[].name → Java 파일 존재
S2 method signature 일치
S3 error-values[].exception-class → Java 파일
S4 ERROR_ID = error-values[].name 정확 일치
S5 Service 파일 존재
S6 service-methods.signature 일치
S7 Service 생성자 순서 = flatten(전 흐름) 순서
S8 shared VO → com.example.shared.domain
S9 🆕 alt/exc 흐름 Port 파일 + 생성자 주입

★ v6.1 — DDD 친화 layered 기본 디렉토리: controller/request+response · service/command · domain/model+policy. Controller 스켈레톤 자동 생성 (UnsupportedOperationException stub). arch-decisions.md 단일 참조 (R-ARCH-3, S0 게이트).
N 게이트 — nfr / arch (8개, +N7/N8)

nfr-spec v2 / arch-design v2.1

N1 nfr 4 섹션 (performance/security/availability/operability)
N2 target-interfaces ⊆ interfaces[]
N3 auto-generates → adapter-classes 등록
N4 NFR 신규 Err* → error-values[] 반영
N5 AUTO 클래스 Lombok 부재
N6 consumers 에 nfr-spec 등록
N7 🆕 id-strategy 블록 존재 (uuid-v7 시 uuid-library 명시)
N8 🆕 monetary/temporal-strategy 블록 존재 (BigDecimal 강제, multi-currency / timezone-policy 명시)
D 게이트 — schema (8개, +D7/D8)

gen-schema v2.1

D1 aggregates[] → tables[] 매핑
D2 interfaces[*Saver] → saver-interface
D3 schema.sql REFERENCES 0개 (BC 자율성)
D4 shared-kernel ↔ 인라인 복제
D5 CHECK constraint = aggregates.states
D6 Meta source/consumers 완비
D7 🆕 id-spec ↔ schemas-decisions 정합 (PK = root-id, format → CHECK, sequence DDL)
D8 🆕 monetary/temporal-spec ↔ schemas-decisions 정합 (multi-currency 컬럼/CHECK, timezone-policy)
V 게이트 — implement (11개, +V7, +V8/V9/V10/V11)

implement-bc v3.2

V1 Err* 6-레이어 완전 일치 ★
V2 🔄 전 흐름 uses-interfaces 본문 호출 (확장)
V3 Lombok 0개
V4 persistence 규칙 준수
V5 UnsupportedOperationException 잔존 0
V6 이벤트 publish 호출 (전 흐름)
V7 🆕 보상 try-catch 위치 + catch 타입 일치 (AST)
V8 🆕 external/domain-managed ID generate() 호출 0건 + 직접 생성자 우회 차단 (AST)
V9 🆕 BigDecimal == 비교 0건, multi-currency: true 시 통화 일치 검증
V10 🆕 java.util.Date / Calendar / SimpleDateFormat 0건, ZoneId 명시
V11 🆕 JPA Entity 시간 필드 ↔ @Column columnDefinition 정합

★ v3.2 — Web DTO 파일 분리: controller/request/{UC명}Request.java · controller/response/{UC명}Response.java 반드시 별도 파일. Controller inner class 금지 (§3-1). uc-to-skeleton v6.1 이 생성한 Controller 스텁 본문만 채움.
G 게이트 — domain-glossary (3개, ★ v1.9 신규)

domain-glossary v1 — 사전 ↔ UC ↔ 코드 정합성

G1 🆕 사전 완전성 — UC ↔ 사전 매칭, normalizations 적용 + meta-nouns 필터 후 미정의 한글 0건
G2 🆕 사전 자체 정합성 — 5종 검증: 분기 어휘 BC disjoint, aliases-ko 중복 금지, 자기 충돌 금지, en 고유성, PascalCase + Java 예약어 금지
G3 🆕 사전 ↔ 코드 정합 — 3종 검증: Java 식별자 사전 등록 (R-GLOSS-4 접미사 + 화이트리스트), 사전의 코드 생성 대상 type 이 Java 파일로 존재, Err* ID 일관성 (V1 강화)
/check-spec --gates glossary 단독 실행 옵션
호환성: domain-glossary.md 부재 시 G1·G2·G3 SKIP + WARN, v1.8.x 동작 유지. 도입은 선택적이며 UC 20+ 프로젝트 권장.
B 게이트 — BC 단위 분할 정합성 (★ v1.11 신규, 2개)

domain-modeling v4.0 — 인덱스 ↔ BC 파일 ↔ shared 파일 정합 검증

B1 (인덱스 ↔ BC 파일 정합성, 5종) 🆕
검증 1: 인덱스 schema 5.0 + split-mode by-bc
검증 2: bounded-contexts[].file → BC 파일 존재
검증 3: BC 파일 → 인덱스 등록 (orphan 0)
검증 4: BC 파일의 bc 식별자 일치 (frontmatter / Meta / 모든 섹션 항목)
검증 5: content-version 정합
B2 (Shared 파일 contents, 5종) 🆕
검증 1: bc:__shared 식별자
검증 2: value-objects[] 모두 shared:true + used-by-bcs ≥ 2
검증 3: interfaces[] 모두 consumed-by-bcs ≥ 2
검증 4: 금지 섹션 (aggregates / error-values / service-methods / commands / events / UL) 부재
검증 5: schema 5.0
/check-spec --gates bc-split 단독 실행 옵션
호환성 (R-BC-5): v1.10 schema (domain-context 4.x 또는 그 이전) 입력 시 즉시 ERROR + 안내 ("v1.10 이전 schema 입니다. v1.11 은 자동 마이그레이션을 제공하지 않습니다"). graceful degradation 정책 폐지 — read-only 도구 (check-spec) 도 동일 정책 적용.
N9 게이트 — Architecture 산출물 완전성 (★ v1.10, ★ v1.11 알고리즘 보강)

arch-design v4.0 — arch-decisions interfaces[] 단일 진실 원천 검증

검증 1 interfaces[] superset — collect_all_interfaces() (★ v1.11 — 인덱스 → 모든 BC 파일 + shared 파일 합집합) ⊆ arch-decisions.interfaces[].name
검증 2 service-methods[] superset — 동일 패턴
검증 3 error-values[] superset — 동일 패턴
검증 4 package 형식 ↔ architecture — hexagonal: *.application.port.{in|out}.* / layered: *.{controller|service|repository|external|event|domain|exception} / clean: *.{usecase|adapter}.*
검증 5 port-direction ↔ architecture — hexagonal: driving/driven, 그 외: null
/check-spec --gates architecture-completeness
호환성 (★ v1.11 — graceful degradation 폐지): v1.10 이전 schema 입력 시 즉시 ERROR + R-BC-5 안내. v1.11 부터 모든 도구 (read-only 포함) 가 동일 정책. 자동 마이그레이션 도구 미제공.
T 게이트 — test (8개, T1 확장 + T7 신규)

gen-test v3 — 반드시 별도 세션 (T0)

T0 순환논리 방지 (별도 세션 실행) ★
T1 🔄 전 Scenario(@UC-S + @UC-A + @UC-E) ↔ @Test 1:1 (확장)
T2 getErrorId() 검증값 ⊆ error-values[].name
T3 error-cases 전수 커버 (보상의 보상 포함)
T4 @Mock 순서 = flatten(전 흐름) 순서
T5 ArgumentCaptor (main + alt + compensation)
T6 테스트 Lombok/InjectMocks 부재
T7 🆕 compensation-flows 보상 호출 @Test (thenThrow+verify)

Err* ID 6-레이어 추적 체인

오류가 UC 명세에서 정의되면 Gherkin · domain-context · Java Exception · DomainExceptionHandler · 테스트까지
문자열 수준에서 완벽히 동일한 ID로 전파됩니다.
중간에 이름이 변경되면 check-spec V1/S4 게이트가 즉시 포착합니다.

L1. UC 명세 (Section 4 Error Values)
    ├── Err ID:        "ErrPaymentFailed"
    ├── HTTP:          402
    └── 사용자 메시지:  "결제에 실패했습니다"
         ↓                                          [C6 게이트]
L2. Gherkin feature (Scenario UC001-E03)
    └── 에러 "ErrPaymentFailed"가 반환된다
         ↓                                          [K6 게이트]
L3. domain-context.md error-values[]
    └── { name: ErrPaymentFailed,
          exception-class: PaymentFailedException,
          http-status: 402,
          raised-by-interfaces: [PaymentRequester] }
         ↓                                          [S3, S4 게이트]
L4. Java Exception 클래스
    └── public class PaymentFailedException extends RuntimeException {
          public static final String ERROR_ID   = "ErrPaymentFailed";
          public static final int HTTP_STATUS   = 402;
          private final String errorId;
          public String getErrorId() { return errorId; }
        }
         ↓                                          [V1 게이트]
L5. DomainExceptionHandler (@RestControllerAdvice)
    └── @ExceptionHandler({..., PaymentFailedException.class, ...})
        → errorId = exception.getErrorId()     // "ErrPaymentFailed"
        → HTTP   = Exception.HTTP_STATUS       // 402
         ↓                                          [T2 게이트]
L6. 단위 테스트 (@Test UC001-E03)
    └── assertThat(ex.getErrorId()).isEqualTo("ErrPaymentFailed");
        assertThat(PaymentFailedException.HTTP_STATUS).isEqualTo(402);

✅ 드리프트 방지 효과

  • LLM이 "InsufficientStockException" 대신 "OutOfStockException" 같은 유사어를 쓰는 사고를 원천 차단
  • 명세 Err ID 하나가 바뀌면 모든 레이어가 깨지므로 즉시 발견
  • UC를 수정하면 전체 파이프라인을 재실행해서 정합성 회복
  • check-spec V1 / S4 / K6 / T2 게이트가 각 전환 지점을 정적 검증

🔧 실전 운영 팁

  • Err ID 네이밍 컨벤션: Err{PascalCase명사} (예: ErrRoomNotFound)
  • NFR에서 도입되는 인프라 Err*(CircuitOpen 등)도 동일 체인을 따름
  • 보상 트랜잭션의 보상(BR-07)은 별도 Err ID 할당 (ErrPaymentCancelFailed 등)
  • 국제화(i18n)가 필요하면 사용자 메시지만 별도 관리, Err ID는 유지
Wave 토폴로지 원칙과 통신 패턴(동기 ACL / 비동기 Event)은 A-ADM Core → 멀티 BC를 참조하세요.
이 섹션은 Java/Spring 환경에서의 구체적 구현 예시를 다룹니다.

멀티 BC 오케스트레이션

여러 Bounded Context를 가진 프로젝트의 구현 순서, BC 간 통신, 공유 커널을 체계적으로 관리합니다.

Wave 위상 정렬 — 쇼핑몰 5 BC 예시

WAVE 0
shared
Money · Address
WAVE 1
inventory
재고 관리
WAVE 2 — 병렬
order
Core Domain
payment
결제 처리
WAVE 3
notification
알림 발송

동기 ACL 패턴

즉각 응답이 필요한 BC 간 호출.
포트 인터페이스는 호출 BC의 application 레이어에 선언, 구현체는 구현 BC의 adapter 레이어에 위치. (Hexagonal 아키텍처 기준)
pom.xml에서 상호 직접 참조 없음.

// order/application/port/output/
public interface InventoryPort {
    void checkStock(ProductId id, int qty);
}

// inventory/adapter/outbound/
public class InventoryPortAdapter
    implements InventoryPort { ... }

비동기 Event 패턴

결과적 일관성으로 충분한 BC 간 통신.
Domain Event를 Kafka/RabbitMQ/Spring Events로 발행.
수신 BC는 ACL Translator로 자신의 도메인 모델로 변환.

// order → OrderPlaced → Kafka
// notification이 order.placed 구독

@KafkaListener(topics = "order.placed")
public void onOrderPlaced(
    OrderPlacedMessage msg) { ... }

Wave Gate — 전환 조건

컴파일 통과
mvn compile
🔌
포트 연결
구현체 존재 확인
🧪
도메인 테스트
mvn test -pl domain
🚫
순환 없음
DFS 사이클 검사
버전 번호 체계(MAJOR/MINOR/PATCH)와 영향 매트릭스는 A-ADM Core → 버저닝을 참조하세요.
이 섹션은 Claude Code 환경에서의 /check-domain-version 커맨드 동작을 설명합니다.

계약 파일 버저닝 (3개 계약 파일 독립 버저닝)

domain-context.md (schema 3.3) · arch-decisions.md (schema 1.1) · schemas-decisions.md (schema 1.1) 세 계약 파일이 각자 schema-version 과 content-version 을 독립 관리합니다.
소비자는 source.{file}-version 으로 의존 버전을 추적하며, /check-domain-version 이 동기화 필요 여부를 자동 계산합니다.

버전 번호 체계

M
MAJOR — 전면 재생성
BC 추가/삭제, Aggregate Root/Command/interface 이름 변경, Err* ID 변경.
영향 BC 스켈레톤 전체 재생성 + check-spec 70개 게이트 재실행 필요.
m
MINOR — 부분 재생성
새 Command/Event/VO/interface/error-value/service-method/alt-flows/compensation-flows 항목 추가.
NFR Err* 추가도 MINOR. affected-bcs 의 특정 레이어만 재생성.
p
PATCH — 재생성 불필요
불변식 설명 수정, UL 문구 보완, Gherkin 매핑 수정, user-message 수정.
@DisplayName 자동 패치만 적용.

Meta 헤더 (schema 3.3)

## Meta

```yaml
schema-version: "3.1"
content-version: "1.2.0"
generated-at: 2026-04-22T13:30:00+09:00
generated-by: domain-modeling
change-summary: "1.1.0: 보상의 보상 추가
                 (ManualPaymentCancelQueue, ErrPaymentCancelFailed).
                 1.2.0: NFR 신규 Err* 5개 반영 +
                        alt-flows/compensation-flows + id/monetary/temporal-spec 신설.""

source:                                      # 입력 추적
  ucs:                                       # 소비자가 의존하는 입력 (v1.3 형식)
    - { id: UC-001, file: usecases/UC001.md }
    - { id: UC-002, file: usecases/UC002.md }

consumers:                                   # 7개 소비자
  arch-design:    "2.0.0"
  nfr-spec:       "2.0.0"
  gen-schema:     "2.0.0"
  uc-to-skeleton: "5.0.0"   # v1.8
  implement-bc:   "3.0.0"   # v1.8
  gen-test:       "3.0.0"   # v1.8
  check-spec:     "4.0.0"   # v1.8
```

변경 유형 × 소비자 영향 매트릭스

변경 유형change-typearch-design v2.1nfr-spec v2gen-schema v2.1uc-to-skeleton v6.1implement-bc v3.2gen-test v3
BC 추가/삭제major전면 재실행대상 변경테이블 추가/삭제전체 BCbc-plan 재검토전체 재생성
Aggregate Root 이름 변경majoradapter-classes 갱신불필요테이블명 변경해당 BC 전체도메인 레이어해당 BC 전체
interface[].name 변경majoradapter-classes 재도출target-interfaces 갱신불필요Port 재생성Service 본문@Mock 선언
Err* ID 변경 ★majorDomainExceptionHandler.handles불필요violation-error-idException 클래스throw 지점getErrorId() 검증
새 Command/Event 추가minor불필요불필요불필요영향 BC만서비스 레이어영향 BC만
새 interface/service-method 추가minoradapter-class 1개불필요불필요Port 1개생성자/본문@Mock/@Test 추가
새 error-value 추가minorhandles 추가불필요불필요Exception 1개throw 추가@Test 추가
NFR 신규 Err* (CircuitOpen 등)minorhandles 추가제안 생성불필요Exception 1개불필요불필요
VO 추가minor불필요불필요컬럼 추가domain만domain만domain 테스트
불변식 설명 수정patch불필요불필요불필요주석만불필요불필요
UL·Gherkin·user-message 수정patch불필요불필요불필요불필요불필요@DisplayName만
/check-domain-version 커맨드가 consumers 섹션을 읽어 동기화가 필요한 소비자와 최소 재실행 순서를 자동 계산합니다.
자동화 강화:
/check-spec 이 79개 게이트로 매트릭스의 모든 영향 항목을 정적 검증.
content-version 증가 시 영향받은 소비자 산출물 자동 재실행 + 검증.
alt-flows/compensation-flows 추가·삭제도 MINOR 증가로 추적.
CLAUDE CODE ADAPTER 고유 내용

슬래시 커맨드는 A-ADM Core의 5단계 워크플로를 Claude Code 환경에서 실행하는 진입점입니다.
CLAUDE.md에 정의하며, 다른 AI 도구 어댑터에서는 동등한 트리거 메커니즘으로 대체합니다.

슬래시 커맨드 레퍼런스

CLAUDE.md에 정의된 커맨드가 전 단계를 자동화합니다.
모든 커맨드는 계약 파일을 읽어 추론 없이 실행합니다.

Phase 1 — 요구사항 분석 커맨드

/usecase [domain-desc] [--level]

UC 명세서 작성 커맨드

도메인 설명을 Usecase 2.0 형식으로 구조화.
전체 도메인을 분석하여 식별된 UC를 usecases/ 디렉토리에 UC별 개별 파일로 분할 저장.
기본 흐름·대안 흐름·예외 흐름·비기능 요구사항 포함.
/usecase-by-example의 필수 선행 커맨드.

/usecase "주문 관리 시스템"            # 기본값: casual → usecases/ 분할 저장
/usecase "주문 관리" --level casual
/usecase "주문 관리" --level fully-dressed
산출물 구조
usecases/UC001-주문생성.md
usecases/UC002-주문취소.md
usecases/UC003-결제처리.md
네이밍: UC{nnn}-{한글이름}.md — 번호 자동 채번, 정렬 보장
/usecase-by-example [uc-file]

Gherkin 시나리오 변환 커맨드

usecases/ 디렉토리를 읽어 features/에 .feature 파일 생성.
파일 지정 시 해당 UC만 변환, 생략 시 디렉토리 전체 순회.
usecases/ 디렉토리가 없으면 /usecase 실행을 안내하고 중단.

/usecase-by-example                         # usecases/ 전체 순회
/usecase-by-example usecases/UC001-주문생성.md  # 특정 UC만 변환

Phase 2 — 설계 커맨드

/domain-modeling [--bc {bc}] [--uc {list}] [--split-waves] [--discover-only] [--init-waves]

DDD 도메인 모델링 커맨드

usecases/*.md (v1.3) + features/*.feature를 읽어 domain-context.md (schema 3.3) 생성.
BC 식별 → Aggregate → Command/Event → interfaces[] · service-methods[] 전 흐름(main/alt/exc) 도출.
6가지 실행 모드 — UC 규모별 진입 경로 분기.

/domain-modeling                          # 모드 1 — 전체 UC 분석 (UC < 20)
/domain-modeling --bc order               # 모드 2 — Order BC 만 증분 갱신
/domain-modeling --bc order --uc UC001,UC005  # 모드 2 — 특정 UC 만 반영
/domain-modeling --bc new                 # 모드 3 — 미할당 UC → 신규 BC 제안
/domain-modeling --split-waves            # 모드 4 — 사후 Wave 분할 (3.3 → 3.4)

# ★ v1.8.1 신규 — 대규모 시스템 진입 경로
/domain-modeling --discover-only          # 모드 5 — Phase 2.0 BC Discovery
                                          #   UC 본문 미독해 → bc-plan.md 초안 (비용 ~10~15%)
/domain-modeling --init-waves             # 모드 6 — 선제 Wave 모드
                                          #   bc-plan.md 부터 schema 3.4 직접 생성
/domain-modeling --init-waves --wave 1 --bc Order
                                          # Wave 별 분할 호출 (세션 분산)
Schema 3.3 신규 필드
interfaces[].uc-mapping[{uc, step, flow}] — alt/exc 흐름 추적
service-methods[].flow-typemain | alt-primary
service-methods[].alt-flows[] · compensation-flows[] 신설
★ 권장 경로 — UC < 20: 모드 1 / UC 20~50: 모드 5 → 모드 2 반복 / UC 50+: 모드 5 → 모드 6
/arch-design [--check]

아키텍처 설계 커맨드

domain-context.md를 읽어 arch-decisions.md (schema 1.1 YAML) 생성.
interfaces[].name 패턴 매칭으로 adapter-classes[] 자동 도출.
architecture · persistence 파라미터가 하위 스킬 동작 전체를 결정.

/arch-design                        # 아키텍처 설계 전체 실행
/arch-design --check                # 기존 파일 정합성 검증만
핵심 파라미터
architecture: hexagonal | layered
persistence: jpa | jpa+jdbc | jpa+jooq | jdbc
exception-style: unchecked | checked
/nfr-spec [--merge]

비기능 요구사항 명세 커맨드

성능 · 보안 · 가용성 · 운영성 4개 카테고리를 도출하여 arch-decisions.mdnfr: YAML 블록으로 병합.
NFR 신규 Err*(CircuitOpen · RetryExhausted · Timeout)를 domain-context.md error-values[]에 자동 제안.

/nfr-spec               # 대화식 도출 후 arch-decisions.md 병합
/nfr-spec --merge       # 기존 NFR을 arch-decisions.md에 병합만
AUTO: JWT·BCrypt·MDC·Actuator TODO: Redis·Circuit Breaker·Retry
/uc-to-skeleton [--bc {bc}] [--dry-run]

Java 스켈레톤 생성 커맨드

5개 계약 파일을 읽어 클래스/패키지 스켈레톤 + PlantUML 시퀀스 다이어그램(docs/diagrams/) 생성.
v1.8 부터 alt-primary 메소드 · 비승격 alt if-else 분기 · exc try-catch 보상 블록까지 자동 전개.
S7 게이트: 생성자 파라미터 순서 = flatten(uses-interfaces + alt-flows[] + compensation-flows[]).

/uc-to-skeleton              # 전체 BC 스켈레톤 생성
/uc-to-skeleton --bc order   # 특정 BC만
/uc-to-skeleton --dry-run    # 생성 계획만 출력
★ 위성 /gen-class-diagram [--bc {bc}]

도메인 모델 시각화 커맨드 위성 스킬

/domain-modeling 직후 선택적으로 실행. domain-context.md (schema 3.3/3.4) 단일 입력으로 PlantUML 클래스 다이어그램 3종을 결정론적 생성.
67 게이트와 무관 — arch-decisions.md · 코드 산출물 의존 없는 모델링 검토 보조용.

/gen-class-diagram            # 전체 BC 다이어그램 (조감도 · BC별 상세 · interfaces 의존도)
/gen-class-diagram --bc order # 특정 BC만 증분 생성
산출물: docs/class-diagrams/*.puml — uc-to-skeleton 시퀀스 다이어그램(docs/diagrams/)과 docs/ 하위 정렬

Phase 2.5 — DB 스키마 생성 커맨드

/gen-schema [--bc {bc}] [--update] [--format]

DB 스키마 생성 커맨드

arch-decisions.md ## Persistence 섹션을 읽어 Mermaid ERD(erd.mmd)와 DDL SQL(schema.sql)을 자동 생성합니다.
domain-context.md의 Aggregate → 테이블 매핑 규칙을 적용합니다.
persistence=jpa+jdbc 시 Command 테이블에 [Command Side] JPA @Entity, Query Row에 [Query Side] JdbcTemplate Row 주석을 삽입합니다 — codegen 없음.
persistence=jpa+jooqschema.sql을 jOOQ codegen 입력으로 사용하여 Query Side Java 클래스를 빌드 타임에 생성합니다.

/gen-schema                   # 전체 BC ERD + DDL 생성
/gen-schema --bc order        # 특정 BC만 생성
/gen-schema --update          # 변경 내용만 반영 (MAJOR/MINOR)
/gen-schema --format flyway   # Flyway V1__init.sql 형식
/gen-schema --format liquibase # Liquibase XML 형식
/gen-schema --dry-run         # 생성 계획만 출력
사전 조건
arch-decisions.md ## Persistence 섹션 존재
domain-context.md aggregates 섹션 존재
두 파일 없으면 즉시 중단 — 추론으로 스키마 생성하지 않음

Aggregate → JpaEntity 매핑 규칙

Aggregate Root → @Entity 테이블
AggregateRoot 이름 → snake_case 테이블명.
id → UUID PK.
created_at / updated_at 자동 추가.
Value Object → @Embeddable / 별도 테이블
단순 VO(Money, Address) → @Embeddable 인라인.
컬렉션 VO → 별도 테이블 + FK.
Aggregate 상태 → VARCHAR + CHECK
domain-context.md states 배열 → VARCHAR 컬럼.
CHECK (status IN ('PENDING','CONFIRMED','CANCELLED')).
BC 간 참조 → FK 금지, UUID만 저장
다른 BC Aggregate를 직접 참조하지 않음.
customer_id UUID만 저장 — JOIN 없이 ACL로 조회.
산출물
erd.mmd — Mermaid ERD (GitHub/GitLab 바로 렌더링)
schema.sql — 표준 DDL (Flyway/Liquibase 입력)
V{n}_init_schema.sql — --format flyway 옵션 시
target/generated-sources/jooq/ — persistence=jpa+jooq 시 자동 생성
※ persistence=jpa+jdbc: codegen 없음 — QueryRepository SQL을 schema.sql 참조해 직접 작성

Phase 3·4 — 구현 및 테스트 커맨드

/implement-bc {bc} [layer]

BC 구현 커맨드

bc-plan.md + domain-context.md + arch-decisions.md를 읽어 Wave 순서대로 구현.
arch-decisions.mdarchitecture 값(hexagonal|layered)에 따라 레이어 구조가 결정됨.
파일 없으면 즉시 중단.

/implement-bc order          # 전체
/implement-bc order domain   # 레이어 지정 
                              (hexagonal: domain|application|adapter)
/implement-bc --wave 2       # Wave 일괄
/implement-bc --dry-run      # 실행 계획만
/implement-bc --check-plan   # 순환 의존 검사
/gen-test {bc} [scope] [flags]

테스트 생성 커맨드

Gherkin 시나리오 1:1 추적.
.feature 없으면 domain-context.md 에러 케이스 컬럼에서 도출.
arch-decisions.md의 messaging 파라미터를 읽어 계약 테스트 도구를 자동 선택.

/gen-test order              # 전체
/gen-test order application  # 레이어 지정
/gen-test order --contract   # BC 간 계약 테스트 
                                  (동기→SCC, 비동기→Pact 자동 분기)
/gen-test order --pbt        # Property-Based Testing 
                                  (Jqwik, domain 레이어만)
/gen-test --e2e              # E2E 통합 시나리오
/gen-test --wave 2           # Wave 일괄
--pbt: Jqwik 불변식 탐색 --contract: SCC or Pact 자동 선택
/check-spec [--bc] [--section] [--verbose]

명세 ↔ 코드 드리프트 검증

domain-context.md YAML ↔ 실제 코드를 정적 대조.
정방향(구현 누락) + 역방향(미등록 항목) 양방향 스캔.
Service 메서드 레벨까지 검증. 산출물 변경 없이 리포트만 출력.

/check-spec                    # 전체 BC 대조
/check-spec --bc order         # 특정 BC만
/check-spec --section commands # Command ↔ Service만
/check-spec --verbose          # 파일:라인 포함
검증 범위 구분
UC ↔ domain-context 수렴 → /domain-modeling Step 4 관할
consumers 버전 동기화 → /check-domain-version 관할
domain-context ↔ 코드 정합성 → /check-spec 관할
/check-domain-version

버전 동기화 확인

domain-context.md consumers 섹션과 content-version 비교.
재생성 필요 소비자 목록과 최소 실행 순서 출력.

Phase 5 — 실행 커맨드

/run-local [--bc {bc}] [--infra-only]

로컬 실행 커맨드

arch-decisions.md를 읽어 필요한 인프라를 Docker Compose로 기동하고 Spring Boot를 시작한다.
persistence/messaging 파라미터에 따라 compose 파일을 자동 구성한다.

/run-local                  # 전체 기동 (인프라 + 앱)
/run-local --infra-only     # Docker Compose만 기동
/run-local --bc order       # 특정 BC 모듈만 기동
/run-local --profile local  # 프로파일 명시 (기본값)
사전 조건: arch-decisions.md 존재, Docker 실행 중
자동 생성: docker-compose.local.yml (없을 때)
/run-check [--verbose]

실행 상태 검증 커맨드

기동된 애플리케이션의 Run Gate 조건을 순서대로 확인한다.
실패 항목과 수정 방향을 함께 출력한다.

/run-check                  # 전체 Gate 확인
/run-check --verbose        # 상세 응답 포함 출력
검증 항목 (순서대로)
GET /actuator/health → 200 OK
② DB 커넥션 풀 정상 여부
③ BC OutputPort 구현체 주입 확인
④ messaging ≠ none → 토픽 존재 확인

진화적 설계 — 아키텍처 마이그레이션 커맨드

/migrate-module {시나리오} [옵션]

모듈 마이그레이션 커맨드

현재 아키텍처 구조를 진화시키는 3-Gate 커맨드.
분석 리포트 → 개발자 승인 → 실행 순으로 진행하며 arch-decisions.md 업데이트와 migration-log.md 생성을 자동 처리한다.

/migrate-module single-to-multi           # single → Maven 멀티모듈
/migrate-module split-bc {bc} {bc1} {bc2} # BC 분리
/migrate-module --dry-run single-to-multi  # 분석 리포트만
/migrate-module --status                   # 진행 상태 확인
3-Gate 프로세스
Gate 1 분석 → 개발자 승인 → Gate 2 준비 → 개발자 승인 → Gate 3 실행
domain-context.md는 직접 수정하지 않음 — /domain-modeling 재실행 권장

지원 시나리오 및 산출물

single → multi 모듈 분리
단일 패키지 → Maven 멀티모듈.
모듈 pom.xml 생성, 클래스 이동, import 경로 수정 자동화.
BC 분리 (split-bc)
1개 BC → 2개 BC.
Aggregate Root 기준 경계 제안, OutputPort 스켈레톤 자동 생성, bc-plan.md 업데이트 안내.
자동 생성 산출물
arch-decisions.md 업데이트 migration-log.md 생성 OutputPort 스켈레톤

전체 커맨드 실행 시퀀스 — 쇼핑몰 예시

# Phase 1 — 요구사항 (순차 파이프라인)
/usecase "온라인 쇼핑몰: 주문·결제·재고·알림"
# → usecases/ 디렉토리에 UC별 분할 저장 (기본값: --level casual)
#   usecases/UC001-주문생성.md
#   usecases/UC002-주문취소.md
#   usecases/UC003-결제처리.md
#   usecases/UC004-재고확인.md
#   usecases/UC005-알림발송.md
# ↑ 검토·수정 후 다음 커맨드 실행

/usecase-by-example
# → usecases/ 전체 순회 → features/ 디렉토리에 UC별 1:1 .feature 생성

/usecase-by-example usecases/UC001-주문생성.md
# → 특정 UC만 변환 (수정 후 개별 재생성)

# Phase 2 — 설계 (병렬 실행 후 수렴)
/domain-modeling                 → domain-context.md  (v1.0.0)
/gen-class-diagram               → (선택, 위성) docs/class-diagrams/ — 모델 시각 검토
/arch-design                  → arch-decisions.md  (consumers.arch-design: "1.0.0")
/nfr-spec                     → arch-decisions.md에 ## NFR 섹션 추가
                                  AUTO: JWT, BCrypt, MDC, Actuator, Pageable
                                  TODO: [NFR-CACHE] [NFR-CB] [NFR-RETRY]
/gen-schema                   → erd.mmd (Mermaid ERD) + schema.sql (DDL)
                                  Aggregate → JpaEntity 매핑 규칙 적용
                                  BC 간 FK 금지 — ID 참조만 허용
/uc-to-skeleton               → Java 스켈레톤 + PlantUML 시퀀스 (docs/diagrams/, NFR AUTO 클래스 포함)

# Phase 3 — 구현 (Wave 순서)
/implement-bc --wave 0        → shared 구현 (Money, Address)
/implement-bc --wave 1        → inventory 구현
/implement-bc --wave 2        → order + payment 병렬 구현 (NFR TODO 주석 삽입)
/implement-bc --wave 3        → notification 구현

# Phase 4 — 테스트
/gen-test --wave 2            → order + payment 테스트
/gen-test order --contract    → BC 간 계약 테스트 (Kafka → Pact 자동 선택)
/gen-test order --pbt         → Aggregate 불변식 Property-Based Testing
/gen-test --e2e               → 전체 E2E 시나리오

# 테스트 후 테스트 커버리지 확인 (bash)
mvn jacoco:report

# Phase 5 — 실행
/run-local                    → Docker Compose 기동 + Spring Boot 시작
/run-check                    → Run Gate 전체 확인 (health·DB·포트·토픽)

# 수시 — 명세 ↔ 코드 드리프트 검증 (Phase 3~4 반복 중 언제든, 큰 작업이라 BC별로 진행 추천)
/check-spec                   → 전체 BC 대조 (domain-context.md ↔ 코드)
/check-spec --bc order        → 특정 BC만 빠르게 확인
/check-spec --section commands → Command ↔ Service 메서드만 대조

# 도메인 모델 변경 시 (v1.3: --bc 증분 갱신)
/domain-modeling --bc order         → order BC만 재모델링 (source-uc 역참조로 관련 UC 자동 식별)
/domain-modeling --bc order --uc UC005,UC024  → 신규 UC 추가 시 해당 BC에 반영
/domain-modeling --bc new           → 미할당 UC 분석 → 신규 BC 후보 제안
/gen-class-diagram --bc order       → (선택) order BC 다이어그램만 갱신, 비대상 BC 보존
/check-domain-version         → 재생성 필요 목록 확인
/implement-bc order application  → 영향 레이어만 재실행
/gen-test order application   → 테스트 업데이트

# 대규모 프로젝트 — Wave 분할 전환 (1회성, BC 8개 또는 1500줄 초과 시)
/domain-modeling --split-waves      → schema 2.0 → 2.1 전환 (단일 → Wave 단위 다중 파일)
                                   원본은 domain-context.md.backup으로 보존
                                   bounded-contexts[].wave 필드 기반으로 wave별 파일 자동 분배
/check-spec                      → 전환 후 정합성 검증 권장
/implement-bc voucher            → STEP 0이 schema 2.1 자동 감지 → 필요한 wave 파일만 선택 로딩

# 진화적 설계 — 아키텍처 마이그레이션
/migrate-module --dry-run single-to-multi  → 분석 리포트 (파일 변경 없음)
/migrate-module single-to-multi            → Gate 1 분석 → 승인 → Gate 2 준비 → 승인 → Gate 3 실행
/migrate-module --status                   → 진행 중인 마이그레이션 상태 확인

# BC 분리 시나리오
/migrate-module --dry-run split-bc order order-core fulfillment
/migrate-module split-bc order order-core fulfillment
# → Gate 3 완료 후 필수 후속 작업:
/domain-modeling --bc order-core    → order-core BC 모델링 (source-uc 자동 매핑)
/domain-modeling --bc fulfillment --uc UC010,UC011  → fulfillment BC 신규 모델링
/check-domain-version         → consumers 동기화
/implement-bc order-core application  → FulfillmentPort 호출 코드 완성
/gen-test order-core --contract       → 포트 계약 테스트 재생성
EXTENSION DOCUMENTS

A-JADM 본체(는 범용 파이프라인에 집중하고, 실전 시나리오별 심화 전략은 확장 문서 체계로 분리했습니다.
본체를 가볍게 유지하면서 고급 주제를 선택적으로 참조할 수 있도록 구성한 2-레이어 구조입니다.

확장 문서 체계

대규모 시스템 · 레거시 DB · 에이전트 기반 자동화 같은 고급 주제는 별도 확장 문서로 관리합니다.
각 확장 문서는 독립 버전을 가지며 실전 검증을 거쳐 정식 통합 여부를 결정합니다.

EXTENSION v0.4 · April 2026
문서 보기 →

대규모 시스템 및 레거시 DB 대응

ERP급 도메인이 많은 시스템 개발 전략과 레거시 DB 리버스 엔지니어링 방법론.
Part I: 1 프로젝트 = 1~소수 BC 원칙, Wave 위상 정렬, BC 간 통신 패턴, 세션 운영.
Part II: 레거시 DB A/B/C/D 진단 프레임, legacy-db-context.md 계약 파일, 유형별 Strangler 전략.

대상 독자: ERP 현대화 프로젝트, 레거시 DB 위 신규 개발 착수 팀
신규 계약 파일: legacy-db-context.md
신규 스킬 (초안): reverse-schema, legacy-uc-extract
AGENTS v0.4 · April 2026
문서 보기 →

Subagent & Agent Teams 통합 전략

Claude Code의 subagent 기능으로 세션 분리를 자동화하면서 계약 파일 철학과 순환논리 방지 원칙을 유지하는 전략.
bc-implementer · ddd-modeler · spec-checker 에이전트 템플릿 제공.
Phase 4 고급 패턴으로 Agent Teams(Wave 병렬, DDD 수렴, Competing Hypotheses) 도입 시나리오 분석.

대상 독자: Claude Code 기반 자동화 고도화, 대규모 BC 병렬 구현 필요 팀
신규 디렉토리: .claude/agents/
핵심 원칙: gen-test는 별도 부모 세션 전용 (순환논리 방지)

본체와 확장 문서의 관계

[ A-JADM 본체 ] ← 이 문서
   ├─ SDLC 5단계 범용 파이프라인
   ├─ 10개 정규 SKILL.md + 1개 위성 (gen-class-diagram) · 16개 슬래시 커맨드
   ├─ 계약 파일 체계 · 버저닝 · 멀티 BC 오케스트레이션
   │
   ├─→ [ A-JADM Extension ] 실전 시나리오 심화
   │     ├─ ERP급 대규모 시스템 설계
   │     ├─ 도메인 사전 도입 전략
   │     └─ 레거시 DB 리버스 엔지니어링
   │
   └─→ [ A-JADM Agents ]    자동화 고도화
         ├─ Subagent 기반 세션 분리 자동화
         └─ Agent Teams 고급 협업 패턴 (Phase 4)
독립성 원칙: 본체의 기본 파이프라인만으로 표준 규모 프로젝트는 충분합니다.
확장 문서는 특정 시나리오에 해당하는 팀만 선택적으로 참조합니다. 확장 문서 없이도 본체만으로 완결된 개발이 가능합니다.