ddd · git:20260826.34a9b20 · 2026-08-26 · sha256 4fb164ed7df95b57
ddd git:20260826.34a9b20A
Immutable. This exact content is served forever at /api/v1/blob/4fb164ed7df95b57.
---
name: ddd
description: Disciplined Design Development — 기존 코드 보존 우선 개발 방법론
compatibility: omp
---
# DDD (Disciplined Design Development) Skill
기존 코드의 동작을 분석하고 보존하면서 점진적으로 개선하는 방법론입니다.
## ANALYZE-PRESERVE-IMPROVE 사이클
### ANALYZE 단계: 기존 동작 분석
변경 전에 반드시 현재 동작을 완전히 이해합니다:
```
1. 코드 목적 파악 — 무엇을 하는 코드인가?
2. 호출자 파악 — 누가 이 코드를 사용하는가? (fan_in)
3. 사이드 이펙트 식별 — 어떤 부수 효과가 있는가?
4. 테스트 현황 파악 — 어떤 테스트가 존재하는가?
5. 경계 조건 파악 — 어떤 엣지 케이스가 있는가?
```
도구 사용:
- `git log --follow -p [file]` — 변경 이력 확인
- `grep -r "[function_name]"` — 호출자 검색
- `go test -run [test_pattern] -v` — 기존 테스트 실행
### PRESERVE 단계: 기존 동작 보존
기존 동작을 테스트로 고정합니다 (Characterization Tests):
```go
// 특성 테스트: 현재 동작을 그대로 문서화
func TestLegacyBehavior_CharacterizationTest(t *testing.T) {
// 이 테스트는 현재 동작을 문서화한다
// 동작이 "올바른지" 여부와 관계없이 현재 상태를 기록
result := legacyFunction(existingInput)
assert.Equal(t, knownOutput, result)
}
```
금지 사항:
- 테스트 없이 인터페이스 변경 금지
- 기존 함수 시그니처 변경 금지 (새 함수 추가는 허용)
- 사이드 이펙트 제거 전 의존 코드 확인 필수
### IMPROVE 단계: 점진적 개선
작은 단계로 나누어 개선합니다:
```
1. 최대 변환 크기: small (50줄 미만)
2. 각 변환 후 테스트 실행
3. 기존 동작 유지 확인
4. 리팩토링과 기능 변경 분리
```
## 적용 패턴
### Strangler Fig Pattern
기존 코드를 점진적으로 대체:
1. 새 구현체 병행 운영
2. 새 구현체로 트래픽 이전
3. 구 구현체 제거
### Branch by Abstraction
인터페이스로 추상화하여 교체:
1. 인터페이스 추출
2. 신규 구현체 작성
3. 의존성 주입으로 교체
## 완료 기준
- [ ] 기존 테스트 모두 통과
- [ ] 특성 테스트 추가됨
- [ ] 변경 전후 동작 동일
- [ ] fan_in >= 3 함수에 @AX:ANCHOR 태그