#1 ๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ(Spec-Driven Development)
Specification-Driven Development
= Spec-Driven Development
= SDD
= ๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ
= ๋ช ์ธ ๊ธฐ๋ฐ ๊ฐ๋ฐ
#1-1 ๋ช ์ธ๋ ๋ฌด์์ธ๊ฐ
๋ค์ ๋งํด, ์๋ฏธ๊ถ ๊ฐ๋ฐ์๋ค์ด ๋งํ๋ Spec์ด๋ ๋ฌด์์ธ๊ฐ?
๋ช ์ธ = Spec = ๋์์ด ์ถฉ์กฑํด์ผ ํ ๊ฒ์ ์ ์ํ ๋ฌธ์ ⊃ API ๊ท์น, ์๊ตฌ์ฌํญ(requirements), ์ธํฐํ์ด์ค์ ์ ์ฝ, ํจ์์ ๊ธฐ๋ฅ, ...
'์ถฉ์กฑ'์ด๋ผ ํจ์, WhatใWhyใHow๋ฅผ ํฌ๊ดํ๋ค. ๋ค์ ๋งํด, ๋ฌด์์ใ์ใ์ด๋ป๊ฒ ์ถฉ์กฑํ ์ง๋ฅผ ์ ์ํ ๋ฌธ์๊ฐ ๋ฐ๋ก '๋ช ์ธ'๋ค.
#1-2 ๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ์ ์ฌ๋ฐ๋ฅธ ์ ์
'๋ช ์ธ'์ ์ ์๋ฅผ ์์์ผ๋, ์ด์ '๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ'์ ๊ฐ๋ ๋ ๋์์ ๋ก ๋จน๋ฏ ์ต๋ํ ๊ฒ์ผ๊น?
๊ตฌํ ์ ์ Spec(์๋, ์ ์ฝ, ...)์ ๋ช ์์ ์ฐ์ถ๋ฌผ๋ก ๋ง๋ค๊ณ , ์ด ์ฐ์ถ๋ฌผ์ ์ํด ์ดํ์ ๊ฒฐ๊ณผ๊ฐ ๋์ถใํต์ ๋๋๋ก ๋ง๋๋ ๊ฐ๋ฐ ๋ฐฉ์
'๋ช
์ธ'์ ๊ฐ๋
๋ง ์ตํ๊ณ '๋ช
์ธ ์ฃผ๋ ๊ฐ๋ฐ'์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ณด๋ฉด, ์์นซ "Spec์ ๊ผผ๊ผผํ๊ฒ ๋ฏธ๋ฆฌ ๊ธฐ๋ก(Spec-first)ํด ๋์๋ ๊ฐ๋ฐ๋ก ์ด๊ตฌ๋"๋ผ๊ณ ์๊ฐํ๊ธฐ ์ญ์์ด๋ค. "์ ๊น... Spec-first๋ ์๋ก์ด ํจ๋ฌ๋ค์์ด ์๋๋ผ, ์๋๋ถํฐ ๊ฐ๋ฐ์์์ ์ง๋ฆฌใ์ ์์ด์์?" ์ด ์ง์ ์์ ํผ๋์ด ์๊ธด๋ค.
Spec-first๊ฐ ์๋๋ผ Spec-driven์ด๋ค. ๋ชจ๋ Spec-driven์ Spec-first์ง๋ง, ๋ฐ๋๋ก ๋ชจ๋ Spec-first๊ฐ Spec-driven์ธ ๊ฒ์ ์๋๋ค. ์ฝ๋๊ฐ ์๋๋ผ ๋ช
์ธ๊ฐ ์๋ณธ์ด๊ณ , ์ฝ๋๋ ๊ทธ ๋ช
์ธ์ ๊ตฌํ๋ฌผ์ด๋ผ๋ ๊ด์ ์ผ๋ก ๋ค์ ๋ณด์์ผ ํ๋ค. ๊ตฌํ์ ๊ฒฐ๊ณผ๊ฐ ์๋ชป๋์์ ๋, ์ฝ๋๋ณด๋ค ๋ช
์ธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋จํ๊ฒ๋ ๋ง๋๋ ๊ฒ ๋ช
์ธ ์ฃผ๋ ๊ฐ๋ฐ์ด๋ค. ๋ช
์ธ๊ฐ ๊ตฌํ์ ์๋ดํ๋ ๊ฒ์ด ์๋๋ผ, (์์ด์ ํฑ ํ๋ก๊ทธ๋๋ฐ ๋์) ๊ตฌํ์ ์ง์ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
#2 Spec Kit
#2-1 What
Spec Kit = AI ์ฝ๋ฉ ์์ด์ ํธ๊ฐ ์๊ตฌ์ฌํญ ์ ๋ฆฌ, ๊ธฐ์ ์ค๊ณ, ์์ ๋ถํด, ๊ตฌํ ์์๋ก ๊ฐ๋ฐํ๋๋ก ๋ง๋ ์์ ์ ์ฐจ์ ์ง์นจ์ ๋ฌถ์ (Spec์ ๋ฌถ์)
(์ฌ์ค ๋น์ฐํ ๊ฒ์ด์ง๋ง) ์ง๊ณ ๋์ด๊ฐ์ผ ํ๋ ๊ฒ ์๋ค. Spec Kit์ ๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ์ด์ง๋ง, ๋ฐ๋๋ก ๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ์ด Spec Kit์ ์๋๋ผ๋ ๊ฒ์ด๋ค. ๋ง์น, Git์ด ๋ฒ์ ๊ด๋ฆฌ ๊ทธ ์์ฒด๋ ์๋๋ฉฐ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ๊ตฌํํ ๋๊ตฌ์ธ ๊ฒ๊ณผ ๋น์ทํ ๊ด๊ณ๋ค.
- ๋ช ์ธ ์ฃผ๋ ๊ฐ๋ฐ ๊ทธ ์์ฒด๊ฐ ์๋
- GPT, Claude, Gemini ๊ฐ์ ์ธ์ด ๋ชจ๋ธ์ด ์๋
- Claude Code, Codex, GitHub Copilot ๊ฐ์ AI ์ฝ๋ฉ ์์ด์ ํธ๋ ์๋
- JavaScript, Kotlin ๊ฐ์ ์ธ์ด๋ ์๋๊ณ , React๋ Spring ๊ฐ์ ์ฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋
๋ง๋ง๋ก, '๋ฌธ์ ๋ฉ์ด๋ฆฌ'๋ผ๊ณ ํด๋ ํฐ ๊ณผ์ฅ์ ์๋๋ค. 'ํ๋ก๊ทธ๋จ'์ด๋ผ๊ณ ๋ ๋ถ๋ฅผ ์ ์๊ฒ ๋ค. ์๋ํ๋ฉด '๋ฌธ์ ๋ฉ์ด๋ฆฌ' ํ์ผ ์์ฑ์ ํด์ฃผ๋ Specify CLI๋ผ๋ ์ ์ฉ ํ๋ก๊ทธ๋จ๊น์ง ํฌํจํด์ Spec Kit์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
#2-2 How
์ค์น
# PowerShell์ ์ ๋ถ ์ ๋ ฅ
winget install --id=astral-sh.uv -e # uv
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@v0.12.17 # Specify CLI
uv๋ Specify CLI ์ค์น๋ฅผ ์ํด ํ์ํ๋ค. 2026๋ 7์ 17์ผ ๊ธฐ์ค ์ต์ ๋ฒ์ ์ v0.12.17์ด๋ฉฐ, ์ ๋ฒ์ ์ด ๋์จ๋ค๋ฉด ๊ทธ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ํ์ (์ ๋ฒ์ ํ์ธํ๊ธฐ: Spec Kit์ Release ํ์ด์ง).
์ฌ์ฉ
Spec Kit์ ์์ ๋งํ ๋๋ก ๋ฌธ์ ๋ฉ์ด๋ฆฌ์ ๋ถ๊ณผํ๋ค. ์ด์ Specify CLI๋ก Spec Kit์ ๋ถ๋ฌ์ค๊ธฐ๋ง ํ๋ฉด ๋๋ค.
# PowerShell์ ์ ์ค ํ๋๋ง ์ ๋ ฅ
specify init ํ๋ก์ ํธ-๋ฃจํธ-ํด๋-๊ฒฝ๋ก --integration claude
specify init . --integration claude # ํ๋ก์ ํธ ๋ฃจํธ ํด๋์์ PowerShell์ ์คํ์์ผฐ์ ๋ ๋น๊ต์ ๊ฐ๋จํ ๋ช ๋ น์ด๋ฅผ ์ธ ์ ์๋ค.
specify init ํ๋ก์ ํธ-๋ฃจํธ-ํด๋-๊ฒฝ๋ก --integration codex # Claude Code ๋์ Codex๋ฅผ ์ด๋ค๋ฉด
#3 ๋ถ์ - ๋๋ ํ ๋ฆฌ
# .specify/memory/...
ํ๋ก์ ํธ๊ฐ ๋ฐ๋์ ๋ฐ๋ผ์ผ ํ๋ ์์น์ ๋ด๋๋ค. ํ๋ฒ ๊ฐ์ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
#3-1 .specify/templates/...
plan-template.md
spec-template.md
tasks-template.md
checklist-template.md
...
Spec์ ๋ด์ ๋ฌธ์๋ค์ ํ ํ๋ฆฟ์ด๋ค. Spec Kit์ ๋ง๋ ์ ์์๊ฐ ๋ณด๊ธฐ์, ๊ฐ์ฅ ๋ฒ์ฉ์ ์ด๋ฉฐ ๊น๋ํ ๋ชฉ์ฐจ๋ง ์๋ ํ ํ๋ฆฟ์ผ ํ ๋ค. AI ์์ด์ ํธ๋ ์ด ํ ํ๋ฆฟ์ ๊ธฐ๋ฐํด ์ค์ ํ๋ก์ ํธ์ ๋ช ์ธ๋ฅผ ๋ง๋ค์ด ๋๊ฐ ๊ฒ์ด๋ค.
#3-2 .claude/commands/...
AI์๊ฒ ๋ด๋ฆด ์ ์๋ ๋ช ๋ น ๋ชฉ๋ก์ด ๋ค์ด์๋ค. Skill์ด๋ ๋น์ทํ๋ค. Spec Kit ์ธก์์ ์ฒ์ ๋ง๋ค์ด์ค ๋ช ๋ น์ด ๋ชฉ๋ก์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๋๊ณ , ์ฐ๋ฆฌ๊ฐ ์ถ๊ฐ๋ก ์ปค์คํ ํด์ ์ฌ์ฉํ ์ผ์ ๊ฑฐ์ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ฌ์ฉํ AI ์์ด์ ํธ๊ฐ Claude Code๊ฐ ์๋๋ผ Codex๋ผ๋ฉด, .codex/prompts/... ๋๋ ํ ๋ฆฌ๊ฐ ๋์ ํ๋ค.
#3-3 .specify/scripts/...
.claude/commands/...์์ ์ํํ ๋ช ๋ น์ ์ ์ํํ๊ธฐ ์ํด, ์๋ธ ๋ช ๋ น์ ์ ์ํด ๋์ ๊ณณ์ด๋ค. Tool์ ๊ฐ๊น์ด ์ญํ ์ด๋ค. ๊ฐ๋ น AI ์์ด์ ํธ๊ฐ ์ฌ์ฉ์๊ฐ ๋ด๋ฆฐ ์ด๋ค ๋ช ๋ น์ ์ํํ๋ฉด์, ์ฐธ๊ณ ํ ํ์ผ ์์น๋ ํน์ ์ปค๋ฐ์ด ๋ด๊ธด ๋ธ๋์น ์ด๋ฆ ๋ฑ์ ์ ๋ฉ๋๋ก ํ๋จํ์ง ์๋๋ก ๊ฐ์ ํด ์ฃผ๋ ์์ด๋ค. ์ด ๋๋ ํ ๋ฆฌ๋ .claude/commands/... ๋ณด๋ค ๋๋์ฑ ์ฐ๋ฆฌ๊ฐ ๊ฑด๋ค ์ผ์ด ์๋ค.
#3-4 specs/...
specs/001-user-login/...
specs/002-database-migration/...
specs/003-cache-refactoring/...
specs/004-security-hardening/...
specs/005-api-rate-limit/...
...
Spec Kit์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด๋ฆ ๊ทธ๋๋ก ๋ช ์ธ(Spec)๋ฅผ ๋ด๋๋ค. ๋ช ์ธ๋ feature ๋ณ๋ก ๊ตฌ๋ถ๋๋ค. Spec Kit์์ feature๋ ์์ ๋จ์, ํ ๋จ์์ ๊ฐ๋ฐ๋ก ๋ณ๊ฒฝํ ๋ฒ์ ๋ฐ์๋ฅผ ์๋ฏธํ๋ ์ถ์์ ์ฉ์ด๋ค. ์ด๋๊น์ง๊ฐ feature์ธ๊ฐ๊ฐ ์ ํด์ง ๊ฒ์ ์๋๋ค. ๋ค๋ง ์์ฃผ ์์ํ ์์ ์ (์ค๋ฌด์ ์ผ๋ก) feature๋ผ ํ ์ ์๋ค. '๋ณธ๊ฒฉ์ ์ธ ๊ตฌํ์ ์์ ๋ช ์ธ๋ฅผ ํด์ผ ํ ์ ๋์ ๋ฒ์' ์ด์์ด์ด์ผ feature๋ผ ํ ์ ์์ ๊ฒ์ด๋ค.
#3-5 specs/example_feature_name/...
spec.md
plan.md
tasks.md
...
์ฌ๋ฌ ๋ช ์ธ ํ์ผ์ด ๋ด๊ธฐ์ง๋ง ๊ฐ์ฅ ํต์ฌ์ด ๋๋ 3๊ฐ์ง๋ spec.mdใplan.mdใtasks.md๋ค.
- spec.md
- ์ด ์์ ๋จ์์์ ๋ฌด์์ ๋ง์กฑํด์ผ ํ๋์ง ๋ช ์ํ๋ค.
- "์ฌ์ฉ์๋ ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํ ์ ์๋ค.", "์๋ชป๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋๋ค.", "๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ๋์๋ณด๋๋ก ์ด๋ํ๋ค.", ...
- plan.md
- spec.md๋ฅผ ์งํํ๊ธฐ ์ํ ๊ตฌ์กฐ, ๊ตฌํ ๋ฐฉ์, ๋๊ตฌ(๊ธฐ์ )๋ฅผ ๋ช ์ํ๋ค.
- "Spring Boot์ Spring Security๋ฅผ ์ฌ์ฉํ๋ค.", "์ฌ์ฉ์ ์ ๋ณด๋ PostgreSQL์ ์ ์ฅํ๋ค.", "JWT ๊ธฐ๋ฐ ์ธ์ฆ์ ์ฌ์ฉํ๋ค.", "ํตํฉ ํ ์คํธ๋ Testcontainers๋ก ์์ฑํ๋ค.", ...
- tasks.md
- ์ ์ฒด ํ๋ก๊ทธ๋๋ฐ์, ์งํ ์์๋ฅผ ์ง์ผ ์๊ฒ ๋ถํดํ๋ค.
- [ ] T001 User ์ํฐํฐ ์ถ๊ฐ
[ ] T002 UserRepository ๊ตฌํ
[ ] T003 ๋ก๊ทธ์ธ ์์ฒญ DTO ์์ฑ
[ ] T004 ์ธ์ฆ ์๋น์ค ๊ตฌํ
[ ] T005 ๋ก๊ทธ์ธ API ํตํฉ ํ ์คํธ ์์ฑ
...
#3-6 src/...
domain/User.kt
domain/Category.kt
application/LoginService.kt
infrastructure/JwtTokenProvider.kt
presentation/LoginController.kt
...
ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋. task.md์ ๊ฒฐ๊ณผ๋ก ๋ง๋ค์ด์ง๋ค.
#3-7 tests/...
์์ค ์ฝ๋๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ ํ์ผ๋ค์ ๋ด๋๋ค.
#4 ๋ถ์ - ๋ช ๋ น์ด
#4-1 /speckit.constitution
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
.specify/memory/constitution.md
.specify/templates/*.md
ํ๋ก์ ํธ ์ ์ฒด๊ฐ ์ง์ผ์ผ ํ ๊ฐ๋ฐ ์์น์ ์์ฑใ์์ ํ๋ค. ํ๋ก๊ทธ๋จ์ ํต์ฌ ๊ตฌ์กฐ(์ํคํ ์ฒ), ๋ณด์ ๊ฐ์ ๊ณตํต ๊ท์น๊น์ง ํฌํจํ๋ค. Constitution์ ํ๋ก๊ทธ๋จ์ ํ๋ฒ์ผ๋ก ๊ฐ์ฅ ์ค์ํ ์์น์ด๋ค. ๋ฐ๋ผ์ /speckit.constitution ๋ช ๋ น์ผ๋ก ์์น์ ์ ๋ฐ์ดํธํ์ ๋, (AI ์์ด์ ํธ๊ฐ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๊ณ ํ๋จํ ๊ฒฝ์ฐ) ๋ช ์ธ ํ ํ๋ฆฟ๊น์ง๋ ์์ ๋ ์ ์๋ค.
#4-2 /speckit.specify
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
specs/example_feature_name/spec.md
์ ์์ ๋จ์๋ฅผ ์ ์คํ๋ค. spec.md์๋ ๊ธฐ๋ฅ๋ช , ๊ด๋ จ ๋ธ๋์น, ์์ฑ์ผ, ์ํ, ์ต์ด ์์ฒญ ๋ด์ฉ, ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ ๋ฑ์ ๋ง์ ๋ด์ฉ์ด ๋ค์ด๊ฐ๋ค.
#4-3 /speckit.clarify
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
specs/example_feature_name/spec.md
์ด๋ฏธ ์กด์ฌํ๋ ์์ ๋จ์๋ฅผ ์ ๋ฐ์ดํธํ๋ค. ๋ชจํธ(underspecified)ํ ๋ถ๋ถ์ ๋ช ๋ฃ(Clarify)ํ๊ฒ ๋ง๋ ๋ค๋ ๋ป์ด๋ค. /speckit.plan ์ํ ์ spec.md๋ฅผ ๋ ๋ค๋ฌ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
#4-4 /speckit.plan
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
specs/example_feature_name/plan.md (์ต์ข ๊ตฌ์กฐ, ๊ตฌํ ๋ฐฉ์, ๊ธฐ์ ์คํ)
specs/example_feature_name/research.md (plan.md ์ ๊ธฐ์ ์คํ์ ์ ํ ์ด์ , ์ ํ์ ๊ณ ๋ คํ์๋ ํ๋ณด๋ค์ ํ๋ฝ ์ด์ )
specs/example_feature_name/data-model.md (Entity, Field, ...)
specs/example_feature_name/quickstart.md (๊ตฌํ ์ ์ฐจ๋ฅผ ์ถ์์ ์ผ๋ก๋ง ๋์ด)
specs/example_feature_name/contracts/* (ํ๋ก๊ทธ๋จ ์ธ๋ถ์์ ์ํต์ ์ํ ๊ท์น)
spec.md์ ์๊ตฌ์ฌํญ์ ์ด๋ค ๊ตฌ์กฐ์ ๋๊ตฌ(๊ธฐ์ )๋ก ๊ตฌํํ ์ง ์ค๊ณํ๋ค. ์ด ๋ช ๋ น์ ํต์ฌ ๊ฒฐ๊ณผ๋ฌผ์ plan.md์ง๋ง, ์ค์ ๋ก๋ ์ฌ๋ฌ ๋ฌธ์๊ฐ ์์ฑ๋๋ค.
- tests/... ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํ๋๋ฐ, quickstart.md๋ ์ ์กด์ฌํ ๊น? ์ค๋ณต์ ์๋๊น? tests/... ์๋ ํ๋ก๊ทธ๋จ์ด ํน์ ๋จ์๋ง๋ค ์๋ฐฑ์์ฒ ๋ฒ์ ์์์ ํ๋ ์๋ํ ํ
์คํธ๊ฐ ๋ค์ด๊ฐ์ง๋ง, quickstart.md์๋ ๊ฐ๋ฐํ feature๋ฅผ ์ฌ์ฉํ ์ด๋ค ์ฌ์ฉ์๋ฅผ ์์ ํ๊ณ ๊ทธ ์ฌ์ฉ์๊ฐ ๊ตฌํ ๊ฒฐ๊ณผ๋ฌผ์ ์ฌ์ฉํ๋ ์๋๋ฆฌ์ค๊ฐ ์ ํ๋ค. ๊ฐ๋ฐํ ๊ธฐ๋ฅ์ด '์ผ๋จ ์ ์ ์คํ๋๋ ๋ชจ์ต'์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ก ์ฌํํ๋ค.
- ์ฌ๋ด์ผ๋ก, ์ฐ๋ฆฌ๊ฐ ์ ์์ ํ์ ์ฌ๋ฉด ๋๋ด๋์ด ์ค๋ '์ฌ์ฉ ์ค๋ช ์'๋ 2์ข ๋ฅ๋ค. ํ๋๋ User Manual์ด๊ณ , ํ๋๋ Quick Start Guide๋ค. ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅใ์ค์ ใ์ค๋ฅ ํด๊ฒฐ๊น์ง ์์ธํ ์ค๋ช ํ๋ ๋ฐ๋ฉด, ํ์๋ ์ ์ ์ฐ๊ฒฐ → ์ด๊ธฐ ์ค์ → ํต์ฌ ๊ธฐ๋ฅ ์ฒซ ์ฌ์ฉ๊น์ง์ ์ต์ ๋จ๊ณ๋ง ์๋ดํ๋ค.
- plan.md๊ฐ ์ต์ข ์ ์ผ๋ก ์ฑํํ ๊ตฌํ ๋ฐฉํฅ์ ์์ฝ์ด๋ผ๋ฉด, research.md๋ ๊ทธ ๊ฒฐ๋ก ์ ๋๋ฌํ๊ธฐ ์ ์ ํด๊ฒฐํด์ผ ํ๋ ๊ธฐ์ ์ ์๋ฌธ๊ณผ ํ๋จ ๊ทผ๊ฑฐ๋ฅผ ์ ๋๋ค. research.md๋ ์ต์ข ๊ธฐ์ ์คํ, ๊ตฌ์กฐ์ ๊ฒฐ์ ์ ๋ํ ๊ทผ๊ฑฐ ๋ฌธ์์ธ ๊ฒ์ด๋ค.
- .../contracts/ ์๋ example-site-rest-api.yaml, user-event-schema.json ๋ฐ์์ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ๋ค.
- /speckit.specify ์ ๊ฒฝ์ฐ์๋, /speckit.clarify ๋ผ๋ ์ ๋ฐ์ดํธ ์ ์ฉ ๋ช ๋ น์ด๊ฐ ์๋ค. /speckit.plan ๋ ๊ทธ๋ด๊น? ์๋๋ค, ์๋ค. /speckit.plan๋ฅผ ํ ๋ฒ ๋ ํธ์ถํด์ ๊ณ ์ณ ๋ฌ๋ผ๊ณ ํ๊ฑฐ๋, plan.md ๋ฌธ์๋ฅผ ์ง์ ์์ ํด๋ ๋๋ค. ์ง์ ์์ ํ๋ ๊ฒฝ์ฐ, ์ด๋ฏธ ๋ง๋ค์ด์ง tasks.md๊ฐ ์๋ค๋ฉด /speckit.tasks ๋ช ๋ น๊น์ง (์ฐ์์ ์ผ๋ก) ์ฌ์คํํด ์ฃผ์ด์ผ ํ๋ค.
#4-5 /speckit.checklist
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
specs/example_feature_name/checklists/requirements.md
specs/example_feature_name/checklists/security.md
specs/example_feature_name/checklists/ux.md
...
์๊ตฌ์ฌํญ ๋ฌธ์๊ฐ ์์ฃผ ๋ช ํํ๊ณ ๋น ์ง์์ด ์์ฑ๋๋์ง ํ์ธํ ์ ๊ฒํ๋ฅผ ๋ง๋ ๋ค. ๊ตฌํ ์๋ฃ ์ฌ๋ถ๊ฐ ์๋๋ผ, ๋ช ์ธ์ ํ์ง์ ์ ๊ฒํ๋ ๋ฌธ์๋ค.
#4-6 /speckit.tasks
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
specs/example_feature_name/tasks.md
ํน์ feature ๋๋ ํ ๋ฆฌ์ ์๋ ์ฌ๋ฌ ๋ฌธ์๋ฅผ ์ด๋ง๋ผํด, ์๊ฒ ๋ถํด๋ ํ๋ก๊ทธ๋๋ฐ ๊ณํ์ ์ธ์ด๋ค.
#4-7 /speckit.analyze
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
.specify/memory/constitution.md
specs/example_feature_name/spec.md
specs/example_feature_name/plan.md
specs/example_feature_name/tasks.md
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ค ํ์ผ์ ๋ง๋๋ ๋ช ๋ น์ ์๋๊ณ , AI ์์ด์ ํธ๊ฐ ๋ํ์ฐฝ์ ์ถ๋ ฅํ ์ฑํ ์ผ๋ก ๋ช ๋ น์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค. AI ์์ด์ ํธ๋ ์๋์ ๊ฐ์ ๊ฒ๋ค์ ๋ถ์(Analyze)ํ๋ค.
- ์๊ตฌ์ฌํญ์ด ๊ณํ์ ๋น ์ง์์ด ๋ฐ์๋๋์ง
- ๊ณํ์ด ์์ ๋ชฉ๋ก์ผ๋ก ์ถฉ๋ถํ ๋ถํด๋๋์ง
- ๋ฌธ์๋ผ๋ฆฌ ์ถฉ๋ํ์ง ์๋์ง
- Constitution์ ์๋ฐํ์ง ์๋์ง
- ์ค๋ณต์ด๋ ๋ชจํธํจ์ด ์๋์ง
- ...
๋ณดํต
- /speckit.tasks
- /speckit.analyze
- /speckit.implement
์ ์์๋ก ์ฌ์ฉํ๋ค.
#4-8 /speckit.taskstoissues
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
specs/example_feature_name/tasks.md
tasks.md๋ฅผ GitHub Issue๋ก ๋ณํํ๋ค.
#4-9 /speckit.implement
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
src/...
tests/...
specs/example_feature_name/tasks.md
์์ค ์ฝ๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๊ณ , tasks.md์์ ์๋ฃ๋ ํญ๋ชฉ์ โ ํ์ํ๋ค.
#4-10 /speckit.converge
์ด ๋ช ๋ น์ด๊ฐ ์ฃผ๋ก ๋ค๋ฃจ๋ ํ์ผ:
.specify/memory/constitution.md
specs/example_feature_name/spec.md
specs/example_feature_name/plan.md
specs/example_feature_name/tasks.md
src/...
tests/...
...
/speckit.converge๋ /speckit.implement ํ์ ์ํํ๋ค. ๊ตฌํ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ๋ช ์ธ(Spec)์์ ์ฐจ์ด๋ฅผ ์ฐพ์, ๋น ์ก๊ฑฐ๋ ๋ถ์์ ํ ๊ตฌํ์ tasks.md ํ๋จ์ ๋ณด์ ์์ ์ผ๋ก ์ถ๊ฐํ๋ค. ์ด ๋ช ๋ น์ด ์ฝ๋(src/*)๋ฅผ ๊ณ ์น๋ ๊ฒ์ ์๋๋ฉฐ, tasks.md์ ์ ์์ ๋ง์ ์ถ๊ฐํ๋ค.
#5 ๋ถ์ - ์์กด์ฑ ๊ทธ๋ํ

์ด๋ค feature ํ๋๋ฅผ ๋ช ์ธ๋ถํฐ ๊ตฌํ๊น์ง ํด๋ด๋ ๋ฐ ํ์ํ ๋ช ๋ น์ด ๊ฐ์ ์์กด์ฑ ๊ทธ๋ํ๋ค. ํ๋์์ ํ ๋จ์์ ์์ฑ๋ ์ํฌํ๋ก๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํ์์ ์ผ๋ก ์๊ตฌ๋๋ ๋ช ๋ น์ด๊ณ , ์ฃผํฉ์์ ์์ด๋ ๋๋ ๋ช ๋ น์ด๋ค. ๋ฌผ๋ก , ๊ทธ๋ ๋ค๊ณ ์ค์๋๊ฐ ๋จ์ด์ง์ง ์์ ๊ฒ์ด๋ค. ์์ฝ๊ฒ๋ ํ์ฌ ๋ธ๋ก๊ทธ์๋ Mermaid ๊ทธ๋ํ ์ฝ๋๋ฅผ ์ด๋ฏธ์ง๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ด ์์ด์, ์ด๋ฏธ์ง ํ์ผ๋ก ๋์ฒดํ๋ค. ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
```mermaid
flowchart BT
subgraph Foundation["๊ธฐ๋ฐ ๋ช
์ธ"]
direction LR
Constitution["โ
/speckit.constitution
(constitution.md)"]
Specify["โก
/speckit.specify
(spec.md)"]
end
subgraph Refinement["๋ช
์ธ ๋ณด๊ฐ"]
direction LR
Clarify["โข
/speckit.clarify
(spec.md)"]
Checklist["โค
/speckit.checklist
(checklists/*.md)"]
end
subgraph Planning["๊ณํ ๋ฐ ์์
ํ"]
direction LR
Plan["โฃ
/speckit.plan
(plan.md + ์ค๊ณ ์ฐ์ถ๋ฌผ)"]
Tasks["โฅ
/speckit.tasks
(tasks.md)"]
end
subgraph Execution["๋ถ์·์ฐ๋·๊ตฌํ"]
direction LR
TasksToIssues["โฆ
/speckit.taskstoissues
(tasks.md)"]
Analyze["โง
/speckit.analyze
(*)"]
Implement["โจ
/speckit.implement
(*)"]
Converge["โฉ
/speckit.converge
(*)"]
end
Specify --> Constitution
Clarify --> Specify
Plan --> Specify
Plan --> Constitution
Checklist --> Specify
Tasks --> Plan
TasksToIssues --> Tasks
Analyze --> Tasks
Implement --> Tasks
Converge --> Implement
Legend["โป A → B: A ๋ช
๋ น์ด B ๋ช
๋ น์ ์ฐ์ถ๋ฌผ ๋๋ ์ ํ ์คํ์ ์์กด
โป ๊ดํธ ์: ํด๋น ๋ช
๋ น์ด ๋ค๋ฃจ๋ ์ฃผ์ ํ์ผ
โป *: ์ฌ๋ฌ ์ฐ์ถ๋ฌผ๊ณผ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ข
ํฉ์ ์ผ๋ก ๋ค๋ฃธ
โป ํ๋์ ๋
ธ๋: ํ์(Core) ๋ช
๋ น / ๋
ธ๋์ ๋
ธ๋: ์ ํ(Optional) ๋ช
๋ น
โป ์ ํ ๋ช
๋ น(โขโคโง)์ ํ์ง·๋ช
๋ฃํ๋ฅผ ๋๋ ๋ณด์กฐ ๋จ๊ณ๋ก, ์๋ตํด๋ ์ํฌํ๋ก์ฐ๋ ์ฑ๋ฆฝ
โป ๊ฐ๋
์ฑ์ ์ํด ์ ์ด ์์กด์ฑ๊ณผ ์ ํ์ ๋ณด์กฐ ์์กด์ฑ์ ์๋ต"]
Legend ~~~ Constitution
classDef note fill:none,stroke:none,color:#666,font-size:12px;
classDef core fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#1e3a5f;
classDef optional fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#7c4a03;
class Legend note;
class Constitution,Specify,Plan,Tasks,TasksToIssues,Implement,Converge core;
class Clarify,Checklist,Analyze optional;
style Foundation fill:#fafafa,stroke:#bbb
style Refinement fill:#fafafa,stroke:#bbb
style Planning fill:#fafafa,stroke:#bbb
style Execution fill:#fafafa,stroke:#bbb
```
#6 ๊ฐ๋จํ ์งํํ ์ค์ต
#6-1 ์งํ ๋ฐฉ์
๊ณต์ ์ ์ฅ์ README.md์ "Get Started" ์น์ ์ ๋์จ ๋ช ๋ น์ด ์์๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผ ํ๋, ๋ช ์ธ ๋ด์ฉ๋ง ๋ด๊ฐ ์ํ๋ ๋๋ก ๋ฐ๊ฟจ๋ค. ์๋๋ ๋ด๊ฐ AI ์์ด์ ํธ์๊ฒ ๋ด๋ฆฐ ๋ช ๋ น์ด ๋ชจ์์ด๋ค.
- /speckit.constitution ๊ฐ๋ฐ์ ๊ฐ ๋จ๊ณ์ ์งํ์ด ์ผ๋ชฉ์์ฐํ๊ฒ ๋ณด์ฌ์ผ ํ๋ฉฐ, README.md ํ์ผ ๋ฑ์ ์์ฃผ ์น์ ํ๊ฒ ์ ์ด ์ด๋ณด์๋ฅผ ๋ฐฐ๋ คํด์ผ ํจ.
- /speckit.specify ์ฌ์ฉ์๊ฐ ๋ฐฐ์ฐ๊ณ ์ถ์ ์ด๋ค ๊ฐ๋ ์ ๋งํ๋ฉด, ๋ฐ๋ผ ํ๊ธฐ ์ข์ Codelab ํ์ผ์ ๋ฐํํ๋ Agent Harness. ์ฌ์ฉ์๋ ๋ง์ฐํ ๊ฐ๋ ์ ์ง๋ฌธํด๋ ์ข๊ณ , ์ด๋ค ๊ตฌ์ฒด์ ์ธ ์นํ์ด์ง ๋งํฌ๋ฅผ ๋ณด๋ด๋ ์ข๋ค. ์ฌ์ฉ์์ ์ง๋ฌธ์ ๋ฐ์ผ๋ฉด Agent๋ Codelab์ ๊ฐ ๋จ๊ณ์ ๊ฐ์์ ์ด๋ฆ์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ๊ฒ์ธ์ง๋ฅผ ๋จผ์ ์๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฑธ ์ฌ์ฉ์์๊ฒ ์ค๊ฐ ์ ๊ฒ ๋ฐ์ ํ ๋น๋ก์ ๋ณธ๊ฒฉ์ ์ธ Codelab ํ์ผ ์ ์์ ์ฐฉ์ํ๋ค.
- /speckit.plan ๋ด๋ถ์ ์ผ๋ก .md ํ์ผ์ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฑธ claat.exe์ .md → .html ๋ณํ ๊ธฐ๋ฅ์ผ๋ก Codelab ํ์ผ(.html ํํ)๋ก ๋ง๋ค์ด ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค. claat๋ฅผ ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์ค์นํ์ง ์์๋ ๋๋๋ก ํ๋ก์ ํธ์ ๊ตฌ์ฑํ๋ค. ์ง์ ํ ๋ฒ์ ์ ์คํ ํ์ผ์ด ์์ผ๋ฉด ์๋์ผ๋ก ๋ค์ด๋ก๋ํ๋ค.
- /speckit.tasks
- /speckit.implement
#6-2 ๊ฒฐ๊ณผ
GitHub - Kanmanemone/keenel-codelab at simple-first-practice
Contribute to Kanmanemone/keenel-codelab development by creating an account on GitHub.
github.com
์ ๋ ํฌ์งํ ๋ฆฌ์ README.md ๋ํ Spec Kit์ ์ํด ์๋ ์์ฑ๋ ๊ฒ์ด๋ค.
'๊นจ์ ๊ฐ๋ ๐ > Agentic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Spec Kit - "assess" ์ต์คํ ์ (0) | 2026.07.19 |
|---|---|
| ํ๋ค์ค ์์ง๋์ด๋ง ์ค์ต (0) | 2026.06.27 |
| 2023 ~ 2026๋ AI ์ฌ์ฉ๋ฒ์ ์งํ (0) | 2026.05.01 |
| AI ํ์ ๋ค์ ๋จ๋ ๊ฒ (0) | 2026.02.18 |