A-ADM Core 방법론의 Claude Code + Go 구현 어댑터.
IDD · CBD · 패키지 중심 설계로 Go 백엔드 SDLC를 자동화합니다.
A-JADM의 핵심 무기 — 계약 파일 기반 파이프라인, 1:1 추적성, 커맨드 자동 실행 — 을 Go 패키지 중심 설계에 맞게 재구성한 방법론.
v1에서 대화 내 블록으로 관리하던 설계 상태를 영속적인 계약 파일로 전환합니다.
이 문서는 A-ADM Core의 Claude Code + Go 구현 어댑터입니다.
설계 원칙 · 계약 파일 스키마 · 추적성 규칙 · Wave 토폴로지는 Core 문서를 참조하세요.
| 영역 | v1 | v2 | 이유 |
|---|---|---|---|
| 상태 추적 | 설계 컨텍스트 블록 (대화 내) | domain-context.md | 세션 간 소실 방지 |
| 아키텍처 | 대화로 협의 | arch-decisions.md | 고정 스택 영속 전달 |
| 스킬 | 0개 | 7개 독립 SKILL.md | 오케스트레이터 분리 |
| 추적성 | 미정의 | UC Step↔인터페이스↔테스트 1:1 | 추론 최소화 |
| Step 4~5 | "대화로 진행" | 커맨드화 (/go-implement, /go-skeleton) | 파이프라인 연속 |
| 커맨드 | 7개 | 11개 | 전 단계 커버 |
| 개념 | A-JADM (Java) | A-GADM v2 (Go) |
|---|---|---|
| 설계 단위 | Bounded Context · Maven 모듈 | 패키지 (package) |
| 계약 파일 | domain-context.md + arch-decisions.md | domain-context.md + arch-decisions.md (Go 패키지 구조로 변환) |
| Port 정의 | application 레이어 OutputPort | 소비자 패키지 인터페이스 (IDD) |
| DI | Spring IoC | cmd/main 수동 wire-up |
| 에러 | Exception 계층 | 에러를 값으로 — (T, error) |
| 금지 규칙 | Lombok 완전 금지 | ORM·I접두사·panic·전역DI 금지 |
| 추적성 | Gherkin ↔ @Test 1:1 | UC Step ↔ 인터페이스 ↔ 테이블 드리븐 1:1 |
5대 원칙의 전체 정의는 A-ADM Core → 설계 원칙을 참조하세요.
Go 어댑터에서 추가되는 원칙 하나를 포함합니다.
GORM, Gin 등 대안 미고려. 선택 오버헤드 제거.
Gherkin 시나리오 → tc.name 필드로 추적.
Go 전용 계약 파일 흐름. 파일 없으면 스킬 중단.
도메인 패키지에 외부 import 없음. cmd/main이 유일한 조합 루트.
각 단계는 명확한 입력·산출물·게이트를 가집니다.
A-JADM 5 Phase 구조와 동일한 프레임워크.
각 스킬은 독립적인 SKILL.md 오케스트레이터 + 참조 파일로 구성됩니다.
스킬 간 직접 호출 없이 계약 파일로만 소통합니다.
features.md를 읽어 도메인 사전, 패키지 후보(근거 추적), UC 도출 계획 산출.
features.md 없으면 대화형으로 수집 후 파일 자동 생성.
파이프라인의 최초 진입점.
Go IDD+CBD 설계로 직결되는 6섹션 UC 명세서.
Section 3 협력 인터페이스가 domain-context.md의 직접 입력.
Phase 2에서 OpenAPI 초안도 함께 생성.
4단계: 패키지 경계 식별 → IDD 인터페이스 설계 → struct+에러값 정의 → UL 사전+수렴 검증.
UC Section 3 협력 인터페이스 수 = interfaces[] 수 1:1 강제.
4단계: 패키지 구조 확정 → 통신 방식 확정 → 인프라 어댑터 구조 → Wire-Up 템플릿.
Fixed Stack + Forbidden Rules + 컴파일 타임 검증 포함.
두 계약 파일을 읽어 패키지 디렉토리 + interfaces.go + service.go 골격 + errors.go + struct + 인프라 골격 + cmd/main wire-up.
계약 파일의 키를 코드로 기계적 변환.
go-skeleton 골격의 TODO를 실제 코드로 채움.
5단계 레이어 순서: domain(생성자+불변식) → service(UC 흐름) → infra(pgx SQL) → handler(chi+에러→HTTP) → wire-up. Forbidden Rules 실시간 검증.
3단계: 매핑 테이블 구성 → Mock 타입 생성(testify/mock) → 테이블 드리븐 테스트.
UC 시나리오 수 = 테스트 케이스 수 강제. AssertExpectations(t) 필수.
scope: service | handler | all.
/review-deps, /check-design 등 검증 커맨드는 CLAUDE.md에 규칙이 직접 정의됩니다.
스킬 간 인터페이스를 파일로 명문화. 소비자 커맨드는 파일 없이는 실행하지 않습니다.
features.md (개발자 작성 — 파이프라인의 원천)
↓
/go-domain-init → 도메인 사전 + 패키지 후보 + UC 도출 계획 ← 검토·수정
↓
/go-usecase-spec → UC명세서.md + openapi.yaml 초안 ← 검토·수정
↓
domain-context.md ← /go-domain-modeling 산출 (패키지·인터페이스·에러값·UL)
↓
arch-decisions.md ← /go-arch-design 산출 (패키지 구조·스택·금지 규칙·wire-up)
↓
Go 스켈레톤 ← /go-skeleton (추론 없는 1:1 매핑)
↓
패키지별 구현 ← /go-implement (레이어 순서 강제)
↓
테스트 스위트 ← /go-gen-test — go-gen-test 스킬 (UC↔테스트 1:1 추적)
↓
openapi.yaml 확정 ← /gen-openapi (초안 drift 검증 → A-FADM 전달)
## Interfaces # 핵심 — IDD 매핑의 원천
```yaml
interfaces:
- name: StockChecker
package: order # 소비자 패키지
methods:
- "IsAvailable(ctx context.Context, productID string, qty int) (bool, error)"
consumed-by: [order.OrderService]
uc-mapping: "UC-001 Step 1" # ← 추적성 원천
```
## Error Values # sentinel 에러
```yaml
error-values:
order:
- name: ErrNotFound
sentinel: 'errors.New("order not found")'
- name: ErrInsufficientStock
sentinel: 'errors.New("insufficient stock")'
```
## Service Methods # UC Step 매핑
```yaml
service-methods:
- package: order
struct: OrderService
methods:
- name: PlaceOrder
signature: "(ctx context.Context, req PlaceOrderReq) (OrderID, error)"
uc-step: "UC-001 기본 흐름"
uses-interfaces: [StockChecker, PaymentRequester, OrderSaver]
error-cases: [ErrInsufficientStock, ErrPaymentFailed]
```
## Package Layout
```yaml
package-layout:
tree:
- "cmd/server/main.go"
- "internal/order/" # 도메인 (외부 import 없음)
- "internal/postgres/" # 인프라 구현체
- "internal/handler/" # chi router
- "pkg/money/" # 공유 VO
dependency-direction: "handler → order; postgres → order (구현); order ← 외부 없음"
```
## Infra Mapping # 인터페이스 → 구현체 확정
```yaml
infra-mapping:
- interface: OrderFinder
consumer-pkg: order
implementation: "postgres.OrderRepo"
impl-pkg: "internal/postgres"
```
## Wire-up Strategy # cmd/main 코드 순서
```yaml
wire-up:
location: "cmd/server/main.go"
order: [pgxpool, repos, services, handlers, router]
```
UC Step → 인터페이스 → 테스트 케이스까지 1:1 매핑 강제.
A-JADM의 Gherkin↔@Test를 Go 테이블 드리븐으로 재해석.
UC-001: 고객이 상품을 주문한다
Step 1: 재고 확인 → StockChecker.IsAvailable() → {name:"UC001_Step1_재고충분"}, {name:"UC001_Step1_재고부족"}
Step 2: 결제 요청 → PaymentRequester.Request() → {name:"UC001_Step2_결제성공"}, {name:"UC001_Step2_결제실패"}
Step 3: 주문 저장 → OrderSaver.Save() → {name:"UC001_Step3_저장성공"}
Step 4: 이벤트 발행 → EventPublisher.Publish() → {name:"UC001_Step4_발행성공"}
interfaces:
- name: StockChecker
uc-mapping: "UC-001 Step 1" # ← 추적 원천
service-methods:
- name: PlaceOrder
uc-step: "UC-001 기본 흐름"
error-cases: [ErrInsufficientStock]
# ← 에러 케이스가 테스트 테이블 행 근거
tests := []struct {
name string // ← UC Step 추적
}{
{name: "UC001_Step1_재고충분"},
{name: "UC001_Step1_재고부족"},
{name: "UC001_Step2_결제성공"},
{name: "UC001_Step2_결제실패"},
}
// go test -run "UC001_Step1" 가능
arch-decisions.md에 선언. 모든 스킬과 커맨드가 추론 없이 따릅니다.
| 역할 | 라이브러리 | 비고 |
|---|---|---|
| HTTP Router | chi v5 | net/http 호환 |
| DB Driver | pgx v5 | PostgreSQL, 직접 SQL |
| Cache | go-redis v9 | Redis |
| Test Mock | testify/mock | 인터페이스 mock |
| Assert | testify/assert | 테이블 드리븐 |
| 로거 | slog | Go 1.21+ |
| 금지 | 대체 |
|---|---|
I 접두사 인터페이스 | OrderFinder |
OrderServiceImpl | postgres.OrderRepo |
| ORM (GORM 등) | pgx v5 직접 SQL |
| 전역 변수 DI | cmd/main wire-up |
| panic 에러 처리 | (T, error) |
| 인터페이스 메서드 4개+ | 읽기/쓰기 분리 |
11개 슬래시 커맨드는 A-ADM Core 5단계 워크플로를 Claude Code + Go 환경에서 실행하는 진입점입니다.
CLAUDE.md에 정의된 커맨드가 전 단계를 자동화합니다.
모든 커맨드는 계약 파일을 읽어 추론 없이 실행합니다.
go-domain-init 스킬 실행.
features.md를 읽어 도메인 사전 + 패키지 후보 + UC 도출 계획. 파일 없으면 대화형으로 수집 후 features.md 자동 생성.
/go-domain-init # features.md 자동 읽기 /go-domain-init features.md # 파일 경로 지정
go-usecase-spec 6섹션 UC 명세서 + OpenAPI 초안 생성.
Section 3 협력 인터페이스가 핵심.
/go-usecase-spec "고객이 주문한다" --pkg order
go-domain-modeling 스킬 실행.
UC명세서 → domain-context.md 생성.
패키지 → IDD 인터페이스 → struct+에러값 → UL 4단계.
/go-domain-modeling # UC명세서 없으면 중단 → /go-usecase-spec 안내
go-arch-design 스킬 실행. domain-context.md → arch-decisions.md 생성. 구조 → 통신 → 어댑터 → wire-up 4단계.
/go-arch-design # domain-context.md 없으면 중단
go-skeleton 스킬 실행.
두 계약 파일 → 패키지 디렉토리 + interfaces.go + service.go + errors.go + struct + 인프라 골격 + cmd/main.
추론 없는 1:1 매핑.
/go-skeleton # 두 계약 파일 모두 필요. 하나라도 없으면 중단.
go-implement 스킬 실행.
레이어 순서 강제: domain → service → infra → handler → wire-up.
Forbidden Rules 실시간 검증.
/go-implement order # 전체 (all) /go-implement order domain # 레이어 지정 /go-implement order service /go-implement order --dry-run # 실행 계획만
IDD.
소비자 측 인터페이스 Go 코드 추가 생성.
읽기/쓰기 분리 + 컴파일 타임 검증.
/add-interface order /add-interface order --uc UC-001
go-gen-test 스킬 실행.
UC 시나리오 ↔ 테이블 드리븐 1:1 추적.
Mock 자동 생성. scope: service | handler | all.
/go-gen-test order # 전체 (scope=service) /go-gen-test order --uc UC-001 # 특정 UC /go-gen-test order --scope handler # HTTP 핸들러 테스트 /go-gen-test order --scope all # service + handler
순환 의존 · 도메인 외부 import · 의존성 방향 위반 감지.
/review-deps /review-deps --pkg order
계약 파일 기반 품질 게이트.
추적성 + Forbidden Rules + 인터페이스 메서드 수 + 컴파일 타임 검증.
/check-design /check-design --phase 2
Phase 1 초안 대비 drift 검증 → openapi.yaml 확정 → A-FADM 전달. openapi-typescript로 프론트 타입 자동 생성.
/gen-openapi /gen-openapi --pkg order
# Phase 1 — 요구사항 분석
# features.md 작성 (개발자) — 프로젝트 개요 + 액터 + 기능 목록 + 비즈니스 규칙 + 외부 의존성 + 기술 제약
/go-domain-init # features.md 읽기 → 도메인 사전 + 패키지 후보 + UC 도출 계획
# → 검토 후 UC 도출 계획에 따라 /go-usecase-spec 실행
/go-usecase-spec "고객이 상품을 주문한다" --pkg order
/go-usecase-spec "주문을 취소하고 환불한다" --pkg order
# → UC명세서.md + 협력 인터페이스 + openapi.yaml 초안
# Phase 2 — 설계 (계약 파일 파이프라인)
/go-domain-modeling → domain-context.md (v1.0.0)
/go-arch-design → arch-decisions.md
/go-skeleton → internal/{order,payment,postgres,handler}/ + cmd/
# Phase 3 — 구현 (레이어 순서 강제)
/go-implement order domain # struct + errors + 생성자
/go-implement order service # UseCase 구현 (UC 흐름 순서)
/go-implement order infra # postgres Repo (pgx SQL)
/go-implement order handler # chi HTTP 핸들러
/go-implement order wire-up # cmd/main 조합 루트
/go-implement payment # 다음 패키지 전체
# Phase 4 — 테스트 · 검증
/go-gen-test order # UC↔테스트 1:1 테이블 드리븐
/go-gen-test order --scope handler # HTTP 핸들러 테스트
/go-gen-test payment
/review-deps # 순환 · 방향 위반
/check-design # 추적성 + Forbidden Rules
# Phase 5 — OpenAPI 확정
/gen-openapi # 초안 drift 검증 → 확정 → A-FADM 전달
# 도메인 모델 변경 시
/go-domain-modeling # domain-context.md (v1.1.0)
/go-skeleton # 영향 범위 재생성
/go-implement order service # 변경 레이어만 재실행
/go-gen-test order # 테스트 업데이트