03. GitHub SpecKit — SDD를 도구로 굳히기
SpecKit은 GitHub이 만든 오픈소스 SDD 툴킷이다. SDD의 추상적 흐름(Spec→Plan→Tasks→Implement)을 슬래시 명령어로 박제해, Claude Code 같은 30종 이상의 coding agent 위에서 돌린다.
이 문서의 명령어/경로는 spec-kit 저장소 기준이다. 버전에 따라 바뀔 수 있으니 실제 사용 시
specify integration list와 저장소 README로 최신 내용을 확인하라.
설치
uv(Python 패키지 매니저)와 Python 3.11+ 가 필요하다.
# specify CLI 설치
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
# 프로젝트 초기화 (Claude Code 연동)
specify init my-project --integration claude
# 사용 가능한 연동 목록
specify integration list
초기화하면 다음 구조가 생긴다:
.specify/
├── memory/
│ └── constitution.md # 프로젝트 헌법(불변 원칙)
├── scripts/bash/ # 단계 진행용 스크립트
└── templates/ # spec/plan/tasks 템플릿
specs/
└── [feature-name]/
├── spec.md # 무엇을·왜
├── plan.md # 어떻게(기술 스택, 아키텍처)
├── tasks.md # 의존성 순서가 반영된 작업 목록
├── research.md # 조사 메모
├── data-model.md # 데이터 모델
└── contracts/ # API 계약(json 등)
.specify/와 specs/는 저장소에 커밋한다. 명세가 코드와 함께 버전 관리되는 것이 SDD의 핵심.
명령어 워크플로
Claude Code 안에서 슬래시 명령으로 호출한다. 표준 순서는 다음과 같다:
| 순서 | 명령어 | 하는 일 | 산출물 |
|---|---|---|---|
| 0 | /speckit.constitution | 프로젝트의 불변 원칙·가이드라인 작성 | .specify/memory/constitution.md |
| 1 | /speckit.specify | 무엇을 만들지(요구사항·사용자 스토리) 정의 | specs/[feature]/spec.md |
| 2 | /speckit.clarify | 덜 정의된 부분을 구조화된 질문으로 보완 | spec.md에 Clarifications 섹션 추가 |
| 3 | /speckit.plan | 기술 스택을 정해 구현 계획 작성 | plan.md + research/data-model/contracts |
| 4 | /speckit.tasks | 계획을 실행 가능한 작업 목록으로 분해 | tasks.md |
| 5 | /speckit.analyze | 산출물 간 일관성·커버리지 교차 검증 | 분석 리포트 |
| 6 | /speckit.implement | 모든 작업을 계획대로 실행해 구현 | 소스 코드 |
보조 명령:
/speckit.checklist— 맞춤 품질 체크리스트 생성/speckit.taskstoissues— 작업을 GitHub 이슈로 변환
헌법(constitution)이 가장 중요하다
constitution.md는 모든 SDD 반복 이전에 정하는 협상 불가 원칙 모음이다. “테스트 없는 코드 머지 금지”, “공개 API는 하위 호환 유지”, “외부 호출은 반드시 타임아웃” 같은 규칙. agent는 plan을 세울 때 이 헌법을 반드시 따라야 한다.
→ 헌법은 04. 사람 vs agent 경계에서 말하는 “사람이 정하고 agent가 절대 못 넘는 가드레일” 의 구체적 구현이다. 템플릿: templates/00-constitution.md.
SpecKit 단계 ↔ 사람/agent 분담
| 단계 | 사람 | agent |
|---|---|---|
| constitution | 결정 (원칙은 가치 판단) | 초안 제안 |
| specify | 주도 (요구사항은 의도) | 초안 작성, 누락 지적 |
| clarify | 답한다 (모호함 해소) | 질문을 던진다 |
| plan | 승인/거부 (아키텍처 결정) | 옵션·트레이드오프 제시 |
| tasks | 검토 | 주도 (기계적 분해) |
| analyze | 리포트 읽고 판단 | 주도 (일관성 검사) |
| implement | diff 리뷰·게이트 | 주도 (코드 생성) |
이 표의 원리(왜 이렇게 나뉘는가)가 다음 문서의 주제다.
SpecKit을 꼭 써야 하나?
아니다. SpecKit은 SDD를 편하게 해주는 도구일 뿐, SDD 자체는 마크다운 파일과 규율만으로도 가능하다. 작은 팀·개인이라면:
- SpecKit 없이:
docs/에 spec → plan → tasks를 직접 쓰고, Claude의 plan mode로 계획을 검토받는다. → 06-claude-workflow.md - SpecKit 사용: 위 흐름을 명령어로 표준화하고 팀 전체에 강제하고 싶을 때.
도구보다 “명세를 먼저, 코드와 함께 버전 관리” 라는 원칙이 본질이다.