DDD 통합 — AI 주도 개발에서의 필수 코어
핵심 메시지: AIDLC에서 DDD는 선택사항이 아닌 방법론의 내장 요소입니다. AI가 비즈니스 로직을 자동으로 DDD 원칙에 따라 모델링하고, 팀이 이를 검증·조정합니다.
1. DDD가 AIDLC의 필수 코어인 이유
전통적인 Scrum에서 DDD(Domain-Driven Design)는 팀 선택사항이었습니다. 아키텍트가 DDD를 선호하면 도입하고, 그렇지 않으면 트랜잭션 스크립트나 레이어드 아키텍처로 진행했습니다. 설계 기법의 선택은 팀의 역량과 선호에 달려 있었습니다.
AIDLC에서는 상황이 근본적으로 다릅니다.
전통적 SDLC AIDLC
━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━
설계 기법은 팀 선택 DDD/BDD/TDD를 방법론에 내장
아키텍트가 수동 모델링 AI가 자동 모델링, 팀이 검증
설계 문서는 코드와 점진적 이탈 Spec → Code 일관성 자동 유 지
도메인 지식이 사람 머리에만 존재 온톨로지로 형식화되어 AI가 이해
1.1 왜 DDD가 내장되는가
AI는 구조화된 패턴에서 최고의 성능을 발휘합니다. DDD는 비즈니스 로직을 Aggregate, Entity, Value Object, Domain Event로 체계화하는 명확한 어휘와 규칙을 제공합니다. 이는 AI가 요구사항을 코드로 변환할 때 일관된 가이드레일 역할을 합니다.
비구조화된 요구사항 + AI = 임의적 구현 (매번 다른 스타일)
DDD 패턴 + AI = 예측 가능한 구현 (Aggregate-first, Event-driven)
1.2 Scrum vs AIDLC: DDD의 위치 변화
| 측면 | Scrum + DDD (선택) | AIDLC + DDD (필수) |
|---|---|---|
| 도입 여부 | 아키텍트 재량 | 방법론 내장 |
| 모델링 주체 | 아키텍트 + 개발자 | AI 초안 → 팀 검증 |
| 유지보수 | 수동 문서 동기화 | Spec 파일 자동 반영 |
| 학습 곡선 | 높음 (Red/Blue Book) | 낮음 (AI가 패턴 적용) |
| 적용 범위 | 핵심 도메인만 | 전체 Unit에 일관 적용 |
2. Inception 단계: 요구사항에서 설계까지
DDD 통합은 Inception 단계에서 시작됩니다. 이 단계의 핵심 리추얼은 Mob Elaboration이며, AI가 요구사항을 DDD 패턴으로 자동 모델링하고 팀이 이를 검증합니다.
2.1 Mob Elaboration 리추얼
Mob Elaboration은 Product Owner, 개발자, QA가 한 방에 모여 AI와 협업하는 요구사항 정제 세션입니다.
┌──────────────────────────────────────────────────┐
│ Mob Elaboration 리추얼 │
├──────────────────────────────────────────────────┤
│ │
│ [AI] Intent를 User Story + Unit으로 분해 제안 │
│ ↓ │
│ [PO + Dev + QA] 검토 · 과잉/부족 설계 조정 │
│ ↓ │
│ [AI] 수정 반영 → NFR · Risk 추가 생성 │
│ ↓ │
│ [팀] 최종 검증 → Bolt 계획 확정 │
│ │
├──────────────────────────────────────────────────┤
│ 산출물: │
│ PRFAQ · User Stories · NFR 정의 │
│ Risk Register · 측정 기준 · Bolt 계획 │
└──────────────────────────────────────────────────┘
시간 압축 효과: 기존 방법론에서 수 주~수 개월 걸리던 순차적 요구사항 분석을 AI가 초안을 생성하고 팀이 동시에 검토함으로써 수 시간으로 압축합니다.
2.2 Kiro Spec-Driven Inception
Kiro는 Mob Elaboration의 산출물을 Spec 파일로 체계화합니다. 자연어 요구사항에서 코드까지의 전체 과정을 구조화합니다.
2.2.1 Payment Service 예시
requirements.md:
# Payment Service 배포 요구사항
## 기능 요구사항
- REST API 엔드포인트: /api/v1/payments
- DynamoDB 테이블과 연동
- SQS를 통한 비동기 이벤트 처리
## 비기능 요구사항
- P99 레이턴시: < 200ms
- 가용성: 99.95%
- 자동 스케일링: 2-20 Pod
- EKS 1.35+ 호환
design.md:
# Payment Service 아키텍처
## 도메인 모델 (DDD)
- Aggregate: Payment (transactionId, amount, status)
- Entity: PaymentMethod, Customer
- Value Object: Money, Currency
- Domain Event: PaymentCreated, PaymentCompleted, PaymentFailed
## 인프라 구성
- EKS Deployment (3 replicas min)
- ACK DynamoDB Table (on-demand)
- ACK SQS Queue (FIFO)
- HPA (CPU 70%, Memory 80%)
- Karpenter NodePool (graviton, spot)
## 관찰성
- ADOT sidecar (traces → X-Ray)
- Application Signals (SLI/SLO 자동)
- CloudWatch Logs (/eks/payment-service)
## 보안
- Pod Identity (IRSA 대체)
- NetworkPolicy (namespace 격리)
- Secrets Manager CSI Driver
tasks.md:
# 구현 태스크
## Bolt 1: 도메인 모델
- [ ] Payment Aggregate 구현
- [ ] Value Object 정의 (Money, Currency)
- [ ] Domain Event 정의
- [ ] Repository interface 정의
## Bolt 2: 인프라
- [ ] ACK DynamoDB Table CRD 작성
- [ ] ACK SQS Queue CRD 작성
- [ ] Karpenter NodePool 설정
## Bolt 3: 애플리케이션
- [ ] Go REST API 구현
- [ ] DynamoDB Repository 구현
- [ ] SQS Event Publisher 구현
- [ ] Dockerfile + multi-stage build
## Bolt 4: 배포 & 관찰성
- [ ] Helm chart 작성
- [ ] ADOT sidecar 설정
- [ ] Application Signals annotation
디렉팅 방식: "DynamoDB 만들어줘" → "SQS도 필요해" → "이제 배포해줘" → 매번 수동 지시, 맥락 유실 위험
Spec-Driven: Kiro가 requirements.md를 분석 → design.md 생성 → tasks.md 분해 → 코드 자동 생성 → 검증까지 일관된 Context Memory로 연결
2.3 MCP 기반 실시간 컨텍스트 수집
Kiro는 MCP 네이티브로, Inception 단계에서 AWS Hosted MCP 서버를 통해 실시간 인프라 상태를 수집합니다.
[Kiro + MCP 상호작용]
Kiro: "EKS 클러스터 상태 확인"
→ EKS MCP Server: get_cluster_status()
→ 응답: { version: "1.35", nodes: 5, status: "ACTIVE" }
Kiro: "비용 분석"
→ Cost Analysis MCP Server: analyze_cost(service="EKS")
→ 응답: { monthly: "$450", recommendations: [...] }
Kiro: "현재 워크로드 분석"
→ EKS MCP Server: list_deployments(namespace="payment")
→ 응답: { deployments: [...], resource_usage: {...} }
이를 통해 design.md 생성 시 현재 클러스터 상태와 비용을 반영한 설계가 가능합니다.
3. Construction 단계: DDD 패턴 구현
Construction 단계에서 AI는 Inception에서 정의한 도메인 모델을 실제 코드