๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

AI/๊ณต๋ถ€

SpecKit ์™„๋ฒฝ ๊ฐ€์ด๋“œ - AI์™€ ํ•จ๊ป˜ํ•˜๋Š” ์ŠคํŽ™ ์ฃผ๋„ ๊ฐœ๋ฐœ(SDD)

๋ฐ˜์‘ํ˜•

SpecKit

์ŠคํŒฉํ‚ท ๋กœ๊ณ 
SpecKit

https://github.com/github/spec-kit

 

GitHub - github/spec-kit: ๐Ÿ’ซ Toolkit to help you get started with Spec-Driven Development

๐Ÿ’ซ Toolkit to help you get started with Spec-Driven Development - github/spec-kit

github.com

 

 

๊นƒํ—ˆ๋ธŒ๊ฐ€ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํšŒ์‚ฌ์—์„œ AI๋ฅผ ์ด์šฉํ•œ ๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ์„ ์• ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๋•Œ๋งˆ๋‹ค ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์•„ ํ•จ์ˆ˜๋‹จ์œ„๋กœ ์ชผ๊ฐœ์„œ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜,
Cursor Plan Mode ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ SDD๋ž€ ๋ฐฉ๋ฒ•๋ก ์„ ์ฐพ์•˜๋‹ค.

์ŠคํŒฉ์ฃผ๋„ ๊ฐœ๋ฐœ์ด๋ž€(Spec-Driven Development)

๊ฐœ๋ฐœ ์ž์ฒด๋ฅผ ์ŠคํŒฉ(๋ช…์„ธ?, ํ™•์‹คํ•œ ๊ธฐ๋Šฅ)์„ ๋จผ์ € ํ•˜๊ณ  ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.
์›๋ž˜๋Š” DDD ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ด๋‚˜, TDDํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋ก ์ด ์žˆ์—ˆ๊ณ  ๊ทธ ์ด์ „์—๋Š” Waterfall ๋ฐฉ์‹์˜ ๋ฐฉ๋ฒ•๋ก ์ด ์žˆ์—ˆ๋‹ค.

 

์›Œํ„ฐํด์€ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•˜๊ณ  ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ธ๋ฐ ์•ˆ ํ•˜๋Š” ์ด์œ ๋Š”

์• ์ž์ผ (Agile) ๋ฐฉ๋ฒ•๋ก ์— ๋ฐ€๋ ธ๊ณ (๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹œ์žฅ์˜ ๋ฐ˜์‘์„ ๋ด์•ผํ•˜๋Š”๋ฐ ์„ค๊ณ„ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ค์–ด๊ฐ)
์„ค๊ณ„๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๋„ ์˜ค๋ฅ˜๋‚˜ ๊ตฌ๋ฉ์ด ์žˆ์—ˆ๊ณ , ๋ฌธ์„œ๋ฅผ ์“ฐ๋Š”๊ฒŒ ๋„ˆ๋ฌด ์–ด๋ ต๊ณ 

์ด๋ฅผ ์ฝ”๋“œ์™€ ๋™๊ธฐํ™” ์‹œํ‚คํ‚ค๋„ ์–ด๋ ต๋‹ค๋Š” ์ด์œ  ๋•Œ๋ฌธ์— ์•ˆ ์“ฐ์ด๊ณ  ์žˆ์—ˆ๋‹ค.

 

๊ทผ๋ฐ LLM์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.
-> ๋ฌธ์„œ๋ฅผ ์“ฐ๋Š” ๋ฐ์— ๋…ธ๋ ฅ์ด ๋งค์šฐ ๋‚ฎ์•„์กŒ๊ณ , ์ž์—ฐ์–ด๋กœ ์ด๋Ÿฐ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ณ  ์‹ถ์–ด ํ•˜๋ฉด AI ๊ฐ€ ๋Œ€์‹  ์ž‘์„ฑํ•ด ์ฃผ๋Š” ๊ฒฝ์ง€๊นŒ์ง€ ์ด๋ฅด๋ €๋‹ค.


๋˜ํ•œ ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์„ ํ•ด๋ณด๋‹ˆ ํ™•์‹คํ•œ ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ๊ธฐ์ˆ ์ด ํ•„์š”ํ•ด์กŒ๋‹ค.


AI๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ์ž˜ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์ถ”์ƒ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด ์ถ”์ƒ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. (์ž๊ธฐ ๋งˆ์Œ๋Œ€๋กœ)

๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ์ „์— ์ƒ์„ธํ•œ ์ŠคํŽ™์„ ๋ฏธ๋ฆฌ AI์™€ ํ•จ๊ป˜ ์ž‘์„ฑํ•˜๊ณ  ๊ทธ ์ŠคํŽ™์„ ๊ณ„์†ํ•ด์„œ ์ฐธ๊ณ ํ•˜๊ฒŒ instruction์œผ๋กœ ์ฃผ์—ˆ๋‹ค.


์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•๋ก ์ด ๋„๋ฆฌ ํผ์ ธ์„œ ์ง€๊ธˆ์— ์ด๋ฅด๋Ÿฌ SDD ๊ฐ€ ๋˜์—ˆ๋‹ค.

SpecKit์—์„œ์˜ SDD

SpecKit์€ SDD๋ฅผ GitHub Next ํŒ€์—์„œ ํ•ด์„ํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ ๊ทธ๋“ค์˜ ์ƒ๊ฐ์„ ์ง์ ‘ ์ •๋ฆฌํ•ด๋†“์€ ๋ฌธ์„œ๋‹ค.

 

https://github.com/github/spec-kit/blob/main/spec-driven.md

 

spec-kit/spec-driven.md at main · github/spec-kit

๐Ÿ’ซ Toolkit to help you get started with Spec-Driven Development - github/spec-kit

github.com

 

 

๋ช…์„ธ์„œ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์„ฌ๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฝ”๋“œ๊ฐ€ ๋ช…์„ธ์„œ๋ฅผ ์„ฌ๊น๋‹ˆ๋‹ค. PRD๋Š” ๊ตฌํ˜„์„ ์œ„ํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ์•„๋‹Œ, ์ด๋ฅผ ๋ณด๊ณ  ๊ตฌํ˜„์„ ํ•˜๋Š” ์›์ฒœ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฌด์—‡์ด ๊ฐœ๋ฐœ์„ ์ฃผ๋„ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ์žฌ ํ•ด์„์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ์— ๋งž์ถ”์–ด ๋ช…์„ธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ช…์„ธ๋ฅผ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜(Transformation)์ด ๊ทธ๋“ค์ด ์ œ์‹œํ•œ ๋น„์ „์ด๋‹ค.

์˜ˆ์‹œ)

  • ์ „ํ†ต์  ๋ฐฉ์‹: ์•ฝ 12์‹œ๊ฐ„์˜ ๋ฌธ์„œ ์ž‘์—… (PRD ์ž‘์„ฑ, ์„ค๊ณ„ ๋ฌธ์„œ, ํ”„๋กœ์ ํŠธ ์„ธํŒ…, ๊ธฐ์ˆ  ๋ช…์„ธ, ํ…Œ์ŠคํŠธ ๊ณ„ํš ๋“ฑ)
  • ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ SDD ๋ฐฉ์‹:
    1. /speckit.specify: "๋ฉ”์‹œ์ง€ ๊ธฐ๋ก๊ณผ ์‚ฌ์šฉ์ž ์ƒํƒœ๊ฐ€ ์žˆ๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์‹œ์Šคํ…œ" (5๋ถ„) -> ๋ช…์„ธ์„œ ์ƒ์„ฑ
    2. /speckit.plan: "์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•์šฉ ์›น์†Œ์ผ“, ๊ธฐ๋ก์šฉ PostgreSQL, ์ƒํƒœ์šฉ Redis" (5๋ถ„) -> ๊ตฌํ˜„ ๊ณ„ํš ์ƒ์„ฑ
    3. /speckit.tasks: (5๋ถ„) -> ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ž‘์—… ๋ชฉ๋ก ์ƒ์„ฑ

15๋ถ„ ๋งŒ์— ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค: ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ, ๊ธฐ์ˆ ์  ์„ ํƒ๊ณผ ๊ทผ๊ฑฐ๊ฐ€ ๋‹ด๊ธด ๊ตฌํ˜„ ๊ณ„ํš, API ๊ณ„์•ฝ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ํฌ๊ด„์  ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค, ๋ฒ„์ „ ๊ด€๋ฆฌ๋œ ๋ฌธ์„œ๋“ค.

๊ตฌ์กฐํ™”๋œ ์ž๋™ํ™”์˜ ํž˜

์ด ๋ช…๋ น์–ด๋“ค์€ ๋‹จ์ˆœํžˆ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ๊ด€์„ฑ๊ณผ ์™„์ „์„ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค:

  1. ๋ˆ„๋ฝ๋œ ์„ธ๋ถ€ ์‚ฌํ•ญ ์—†์Œ: ํ…œํ”Œ๋ฆฟ์ด ๋น„๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ๋ถ€ํ„ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜๊ฒŒ ํ•จ
  2. ์ถ”์  ๊ฐ€๋Šฅํ•œ ๊ฒฐ์ •: ๋ชจ๋“  ๊ธฐ์ˆ ์  ์„ ํƒ์ด ํŠน์ • ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์—ฐ๊ฒฐ๋จ
  3. ์‚ด์•„์žˆ๋Š” ๋ฌธ์„œ: ๋ช…์„ธ์„œ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์™€ ๋™๊ธฐํ™”๊ฐ€ ์œ ์ง€๋จ
  4. ๋น ๋ฅธ ๋ฐ˜๋ณต: ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฉฐ์น ์ด ์•„๋‹Œ ๋ช‡ ๋ถ„ ๋งŒ์— ๊ณ„ํš์„ ์žฌ์ƒ์„ฑ

๋”ฐ๋ผ์„œ ๊ทธ๋“ค์˜ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” "AI๋ผ๋Š” ๋ฌดํ•œํ•œ ๋…ธ๋™๋ ฅ์„ ์ด์šฉํ•ด ์ฝ”๋”ฉ(๊ตฌํ˜„)์˜ ๊ณ ํ†ต์€ ์ œ๊ฑฐํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๋Š” ์ˆœ์ˆ˜ํ•œ "์„ค๊ณ„ ์™€ ๋…ผ๋ฆฌ"์˜ ์˜์—ญ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ทธ ๊ณผ์ • ์ค‘์˜ ํ•˜๋‚˜"๋ผ๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.


์‚ฌ์šฉ ์ค€๋น„

ํ•„์ˆ˜ ๋„๊ตฌ: Python 3.11+, Git, uv (ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €)

AI ์—์ด์ „ํŠธ: Claude Code, GitHub Copilot CLI, Cursor ๋“ฑ

๋จผ์ € SpecKit CLI๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  1. UV๋ฅผ ์ด์šฉํ•ด์„œ ์„ค์น˜
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
  1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
# ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (์˜ˆ: my-app) ๋ฐ AI ์—์ด์ „ํŠธ ์„ ํƒ (์˜ˆ: claude)
specify init my-app --ai claude

# ๋˜๋Š” ํ˜„์žฌ ํด๋”์—์„œ ์‹œ์ž‘
specify init . --ai claude

์ด๋Ÿฐ ์‹์œผ๋กœ

 

์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ํ”„๋กœ์ ํŠธ ํด๋”์—. specify ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ฐ์ข… ํ…œํ”Œ๋ฆฟ์ด ๋‹ค์šด๋กœ๋“œ๋œ๋‹ค.

์ดํ›„ ์›ํ•˜๋Š” AI ๋ช…๋ น์–ด์— ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ชฉ๋ก์ด ๋œน๋‹ˆ๋‹ค.

์ŠคํŒฉํ‚ท ์‹คํ–‰ ํ™”๋ฉด

  1. ํ—Œ๋ฒ•(Constitution) ์ œ์ •

ํ”„๋กœ์ ํŠธ์˜ '๋Œ€์›์น™'์„ ์„ธ์šฐ๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. AI๊ฐ€ ๋‚ด ๋งˆ์Œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์ง€ ์•Š๋„๋ก ๊ทœ์น™์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ปจ๋ฒค์…˜์ด๋‚˜, ์ฝ”๋“œ์Šคํƒ€์ผ, ์•„ํ‚คํƒ์ณ ๋“ฑ๋“ฑ AI๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์ง€ ์•Š๊ฒŒ ์„ ์–ธ์„ ํ•ด์ค๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•ด๋„ ๋˜๋‚˜ ์ปจ๋ฒค์…˜์ด ๋ฐ”๋€Œ๋ฉด ์ˆ˜์ •ํ•ด ๋‹ฌ๋ผ๊ณ  ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ฒ˜: AI ์—์ด์ „ํŠธ ์ฑ„ํŒ…์ฐฝ (ํ„ฐ๋ฏธ๋„ ์•„๋‹˜)


๋ช…๋ น์–ด: /speckit.constitution 

 

์˜ˆ์‹œ ํ”„๋กฌํ”„ํŠธ: " ์•„ํ‚คํ…์ฒ˜๋Š” MVC์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅผ ๊ฑฐ๊ณ  Kotlin์Šค๋Ÿฌ์šด ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•ด ์ค˜, ๊ฐ๊ฐ์˜ ํ•จ์ˆ˜๋Š” ๋ชจ๋“ˆํ™”๋ฅผ ๊ฑฐ์น  ๊ฑฐ๊ณ  ์„œ๋น„์Šค๋Š” ์„œ๋น„์Šค ํด๋”์— ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํด๋”์— ์ปจํŠธ๋กค๋Ÿฌ ํด๋” ์•ˆ์— ๋„๋ฉ”์ธ ๋ณ„๋กœ ๊ฐ๊ฐ ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ํ•œํŒŒ์ผ์—๋Š” ๊ผญ ํ•˜๋‚˜์˜ API๊ฐ€ ์„ ์–ธ์ด ๋˜์–ด์•ผ ํ•ด ์ด๋Š” ์„œ๋น„์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์•ผ ์ž‘๋ช…์€ RESTful์— ๋งž์ถฐ์ฃผ๊ณ  ํด๋”๋Š” ์นด๋ฉœ์ผ€์ด์Šค ํŒŒ์ผ์€ ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค๋ฅผ ๋”ฐ๋ผ์ค˜ ๋„ค๊ฐ€ ํŒ๋‹จํ•ด์„œ ์žฌ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํ•จ์ˆ˜๋“ค์€ Common์— ๋”ฐ๋กœ ๋ชจ์•„์ฃผ๊ณ  DB์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ(ORM)๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ชจ์•„์ค˜ ๋“ฑ.."

 


์‹ค์ œ ์‚ฌ์šฉ

 

  1. ์ŠคํŽ™ ์ž‘์„ฑ

"๋ฌด์—‡(What)์„ ๋งŒ๋“ค์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค."
์—ฌ๊ธฐ์„œ๋Š” ๊ธฐํš์ž/์‚ฌ์šฉ์ž๊ฐ€ ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฉ์„ ๊ฒฝํ—˜๊ณผ ๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฌ˜์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ์ž์—ฐ์–ด๋กœ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€์ง€ ์ž์„ธํžˆ ์ž‘์„ฑํ•œ๋‹ค.

 

๋ช…๋ น์–ด: /speckit.specify 

 

 

โŒ ๋‚˜์œ ์˜ˆ (๊ธฐ์ˆ  ์Šคํƒ์„ ๋ฏธ๋ฆฌ ์ •ํ•ด๋ฒ„๋ฆผ)
"React๋ž‘ Tailwind CSS ์จ์„œ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค์–ด์ค˜. ์ƒํƒœ ๊ด€๋ฆฌ๋Š” Redux๋กœ ํ•˜๊ณ  DB๋Š” Firebase ๋ถ™์—ฌ์ค˜."

๐Ÿ‘‰ ๋ฌธ์ œ์ : plan ๋‹จ๊ณ„์—์„œ ํ•ด์•ผ ํ•  ๊ธฐ์ˆ ์  ๊ฒฐ์ •์„ ๋ฏธ๋ฆฌ ํ•ด๋ฒ„๋ฆฌ๋ฉด, AI๊ฐ€ ๋” ๋‚˜์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ์•ˆํ•  ๊ธฐํšŒ๋ฅผ ์žƒ๊ณ  ์ŠคํŽ™ ๋ฌธ์„œ๊ฐ€ ๊ธฐ์ˆ ์— ์ข…์†๋ฉ๋‹ˆ๋‹ค.

 

 

โญ• ์ข‹์€ ์˜ˆ : ํŒ€ ํ”„๋กœ์ ํŠธ์šฉ ์นธ๋ฐ˜ ๋ณด๋“œ (์ค‘๊ธ‰์šฉ)


๋ณต์žกํ•œ ๋กœ์ง๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜์„ ๋ฌ˜์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

 

/speckit.specify "์†Œ๊ทœ๋ชจ ํŒ€์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋„๊ตฌ์ธ 'Taskify'๋ฅผ ๋งŒ๋“ค ๊ฑฐ์•ผ.

์ฃผ์š” ๊ธฐ๋Šฅ:

๋ณด๋“œ ๊ตฌ์„ฑ: ๊ธฐ๋ณธ์ ์œผ๋กœ 'ํ•  ์ผ', '์ง„ํ–‰ ์ค‘', '์™„๋ฃŒ' 3๊ฐœ์˜ ์นผ๋Ÿผ์„ ๊ฐ€์ง„๋‹ค.

๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ: ์นด๋“œ๋ฅผ ๋งˆ์šฐ์Šค๋กœ ์žก์•„์„œ ๋‹ค๋ฅธ ์นผ๋Ÿผ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค.

์นด๋“œ ์ƒ์„ธ: ์นด๋“œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ƒ์„ธ ๋ชจ๋‹ฌ์ด ๋œจ๊ณ , ์ œ๋ชฉ/์„ค๋ช…/๋‹ด๋‹น์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ์ž: ๋ณ„๋„ ๋กœ๊ทธ์ธ ์—†์ด, ์•ฑ ์‹คํ–‰ ์‹œ '๊ธฐํš์ž', '๊ฐœ๋ฐœ์ž', '๋””์ž์ด๋„ˆ' ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์ž…์žฅํ•œ๋‹ค.

์ œ์•ฝ ์‚ฌํ•ญ: ์™„๋ฃŒ๋œ ์นด๋“œ๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค."

 

๊ทธ๋Ÿผ ์ด๋Ÿฐ ์‹์œผ๋กœ

speckit์ด ๋งŒ๋“  ํด๋” ๋ฆฌ์ŠคํŠธ

spec.md ๋ฌธ์„œ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ ์—ฌ๊ธฐ์—๋Š”

spec.md ๋ฌธ์„œ

 

์ด๋Ÿฐ ์‹์œผ๋กœ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ• ์ง€ ๋ฌธ์„œํ™”๊ฐ€ ๋œ๋‹ค.

 

 

  1. ๋ช…ํ™•ํ™” (Clarification) - ์„ ํƒ์ด์ง€๋งŒ ๊ฐ•๋ ฅ ์ถ”์ฒœ

AI๊ฐ€ ์ŠคํŽ™์˜ ๊ตฌ๋ฉ์„ ์ฐพ์•„๋‚ด ์งˆ๋ฌธ์„ ๋˜์ง‘๋‹ˆ๋‹ค.

 

๋ช…๋ น์–ด: /speckit.clarify 

 

์ด๊ฑธ ํ•˜๋ฉด AI ๊ฐ€ ์งˆ๋ฌธ์„ ๋˜์ง‘๋‹ˆ๋‹ค. ๋ชจํ˜ธํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ตฌํ˜„ ๋‹จ๊ณ„์˜ ์‚ฝ์งˆ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: "์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ์‹ ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์‹ค์ˆ˜๋กœ ์‚ญ์ œํ–ˆ์„ ๋•Œ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ๊ฐ€์š”, ์•„๋‹ˆ๋ฉด ์˜๊ตฌ ์‚ญ์ œ์ธ๊ฐ€์š”?", "์‚ฌ์šฉ์ž ์ด๋ฆ„์— ํŠน์ˆ˜๋ฌธ์ž ์ž…๋ ฅ์„ ํ—ˆ์šฉํ• ๊นŒ์š”?"

 

์‚ฌ์šฉ์ž๋Š” ์ž์—ฐ์–ด๋กœ ๋‹ต๋ณ€์„ ํ•จ. -> ์ด๋ฅผ ํ† ๋Œ€๋กœ spec.md์ˆ˜์ •

 

 

  1. ๊ตฌํ˜„ ๊ณ„ํš ์ˆ˜๋ฆฝ

AI์˜ ๋™์ž‘ (The Action):

 

AI๊ฐ€ '์†”๋ฃจ์…˜ ์•„ํ‚คํ…ํŠธ(Architect)'๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์™„์„ฑ๋œ ์ŠคํŽ™(What)๊ณผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ธฐ์ˆ  ์Šคํƒ(How)์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ „์ฒด ์‹œ์Šคํ…œ ์„ค๊ณ„๋„๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ์˜ 'ํ—Œ๋ฒ•(Constitution)'์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: "ํ—Œ๋ฒ•์— ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ตœ์†Œํ™”๊ฐ€ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ Lodash๋ฅผ ์“ฐ๋Š” ๊ฑด ๋ถˆํ•„์š”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ํŒ๋‹จ)

 

๋ช…๋ น์–ด: /speckit.plan (๋’ค์— ๊ธฐ์ˆ  ์Šคํƒ ํ”„๋กฌํ”„ํŠธ ์ถ”๊ฐ€)

 

ํ”„๋กฌํ”„ํŠธ:

 

/speckit.plan "์ด ์•ฑ์€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•ด์•ผ ํ•ด.

  • Frontend: React์™€ Vite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์Šคํƒ€์ผ๋ง์€ Tailwind CSS๋กœ ํ•ด์ค˜. ์ƒํƒœ ๊ด€๋ฆฌ๋Š” Context API๋ฉด ์ถฉ๋ถ„ํ•ด.
  • Backend: Node.js์™€ Express๋ฅผ ์‚ฌ์šฉํ•ด ์ค˜.
  • Database: ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ SQLite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ORM์€ Prisma๋ฅผ ์จ์ค˜."

 

๊ฒฐ๊ณผ๋ฌผ

data-model.md: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ(ERD), ํ…Œ์ด๋ธ” ๊ตฌ์กฐ, ํ•„๋“œ ํƒ€์ž… ์ •์˜.

contracts/ ํด๋”: ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ์†Œํ†ตํ•  API ๋ช…์„ธ์„œ(JSON/Markdown). ์–ด๋–ค URL๋กœ ์š”์ฒญํ•˜๋ฉด ์–ด๋–ค JSON์„ ์‘๋‹ตํ•˜๋Š”์ง€ ๋ฏธ๋ฆฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

research.md: ์™œ ์ด ๊ธฐ์ˆ ์„ ์„ ํƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์  ๊ทผ๊ฑฐ์™€ ๋ถ„์„ ๋‚ด์šฉ.

 

์•„๋ž˜๋Š” data-model.md ์˜ˆ์‹œ)

data-model.md ์˜ˆ์‹œ

  1. ์ž‘์—… ๋ถ„ํ•ด

๋ช…๋ น์–ด: /speckit.tasks 

 

๐Ÿค– AI์˜ ๋™์ž‘ (The Action):

 

AI๊ฐ€ 'ํ”„๋กœ์ ํŠธ ๋งค๋‹ˆ์ €(PM)'๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ฑฐ๋Œ€ํ•œ ๊ณ„ํš(plan.md)์„ ์‹ค์ œ๋กœ ์ฝ”๋”ฉ ๊ฐ€๋Šฅํ•œ ์•„์ฃผ ์ž‘์€ ๋‹จ์œ„(Unit)๋กœ ์ž˜๊ฒŒ ์ชผ๊ฐญ๋‹ˆ๋‹ค.

์˜์กด์„ฑ(Dependency) ๊ด€๋ฆฌ: "DB ํ…Œ์ด๋ธ”์„ ๋จผ์ € ๋งŒ๋“ค์–ด์•ผ API๋ฅผ ์งค ์ˆ˜ ์žˆ์ง€"์™€ ๊ฐ™์ด ์ž‘์—… ์ˆœ์„œ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

TDD ์ ์šฉ: ๊ตฌํ˜„ ์ฝ”๋“œ๋ณด๋‹ค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋„๋ก ์ž‘์—…์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“„ ๊ฒฐ๊ณผ๋ฌผ (The Output):

 

tasks.md: ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํŒŒ์ผ.

์ž‘์—… ๋‚ด์šฉ ์˜ˆ์‹œ:

[ ] 1.1: ์‚ฌ์šฉ์ž(User) ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(Schema) ํŒŒ์ผ ์ƒ์„ฑ

[ ] 1.2: ์‚ฌ์šฉ์ž ์ƒ์„ฑ API์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

[ ] 1.3: ์‚ฌ์šฉ์ž ์ƒ์„ฑ API ์‹ค์ œ ๊ตฌํ˜„

๋ณ‘๋ ฌ ํ‘œ์‹œ: [P] ๋งˆํฌ๊ฐ€ ๋ถ™์€ ์ž‘์—…์€ ๋™์‹œ์— ์ง„ํ–‰ํ•ด๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

 

 

  1. ๊ตฌํ˜„(Implement)

๋ช…๋ น์–ด: /speckit.implement

AI ๊ฐ€ Task์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค!


์ง์ ‘ ์จ๋ณด๊ณ  ๋А๋‚€ SpecKit ๋ฆฌ์–ผ ํ›„๊ธฐ

 

  1. ํ† ํฐ ๋น„์šฉ vs ๊ฐœ๋ฐœ ๋น„์šฉ (ROI์˜ ๊ด€์ )
    ์†”์งํžˆ ๋งํ•˜๋ฉด ํ† ํฐ ์†Œ๋ชจ๋Ÿ‰์ด ์ƒ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŽ™์„ ์ƒ์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„ํš์„ ์งœ๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ํ† ํฐ์ด ์ฆ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ ํ ์นซํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” "์˜คํžˆ๋ ค ๋น„์šฉ์ด ์ ˆ์•ฝ๋˜๋Š” ๋А๋‚Œ"์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋ฐฉ์‹: ๋Œ€์ถฉ ์งœ๊ณ  -> ์—๋Ÿฌ ๋‚˜๊ณ  -> ๋””๋ฒ„๊น…ํ•˜๊ณ  -> ๋‹ค์‹œ ์งœ๋Š” ๋ฌดํ•œ ๋ฃจํ”„ (์‹œ๊ฐ„๊ณผ ์ •์‹ ๋ ฅ ์†Œ๋ชจ)

SpecKit ๋ฐฉ์‹: ์ดˆ๋ฐ˜์— ํ† ํฐ์„ ํƒœ์›Œ์„œ ์ŠคํŽ™์„ ์™„๋ฒฝํžˆ ์žก์Œ -> ๊ฑฐ์˜ ์ •ํ™•ํ•œ ์ฝ”๋“œ๊ฐ€ ํ•œ ๋ฒˆ์— ๋‚˜์˜ด

๊ฒฐ๊ตญ '๋””๋ฒ„๊น… ์‹œ๊ฐ„'๊ณผ '์ŠคํŠธ๋ ˆ์Šค'๋ฅผ ํ† ํฐ ๊ฐ’์œผ๋กœ ์ƒ€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด, ์ถฉ๋ถ„ํžˆ ๋‚จ๋Š” ์žฅ์‚ฌ์ž…๋‹ˆ๋‹ค.

 

 

  1. DB ์„ค๊ณ„๋Š” ์—ฌ์ „ํžˆ 'ํœด๋จผ ํ„ฐ์น˜'๊ฐ€ ํ•„์š”ํ•˜๋‹ค
    AI๊ฐ€ data-model.md๋ฅผ ํ†ตํ•ด DB ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•ด ์ฃผ์ง€๋งŒ, ์ด ๋ถ€๋ถ„์„ 100% ์‹ ๋ขฐํ•˜๊ณ  ๋ฐ”๋กœ ์ ์šฉํ•˜๊ธฐ์—” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ RDB(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ๊ตฌ์กฐ๋Š” ์„œ๋น„์Šค์˜ ํŠน์„ฑ์ด๋‚˜ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„์— ๋”ฐ๋ผ ์ •๊ทœํ™”/๋น„์ •๊ทœํ™” ์ „๋žต์ด ๋‹ฌ๋ผ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. AI๊ฐ€ ์ œ์•ˆํ•œ ๊ตฌ์กฐ๋ฅผ ๋ฒ ์ด์Šค๋กœ ํ•˜๋˜, ๋ฐ˜๋“œ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ์ž…ํ•˜์—ฌ ๊ฒ€์ˆ˜ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ ๋’ค ๋ฐฑ์—”๋“œ์™€ ์—ฐ๊ฒฐํ•˜์‹œ๊ธธ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ์ž์˜ ๋ฏธ๋ž˜: '์ฝ”๋”(Coder)'์˜ ์ข…๋ง๊ณผ '์•„ํ‚คํ…ํŠธ'์˜ ๋ถ€์ƒ
    SpecKit์„ ์“ฐ๋ฉด์„œ ํ™•์‹ ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹จ์ˆœํžˆ ๋ฌธ๋ฒ•์„ ์™ธ์›Œ ์ฝ”๋“œ๋ฅผ ํƒ€์ดํ•‘ํ•˜๋Š” '์ฝ”๋”'๋กœ์„œ์˜ ๊ฒฝ์Ÿ๋ ฅ์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ์€ '๊ตฌํ˜„ ๋Šฅ๋ ฅ' ํ•˜๋‚˜๋กœ๋„ ๋จน๊ณ ์‚ด ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์•ž์œผ๋กœ ํ•„์š”ํ•œ ์—ญ๋Ÿ‰์€ ์™„์ „ํžˆ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ค๊ณ„ ์—ญ๋Ÿ‰: ๋ฌด์—‡์„ ๋งŒ๋“ค์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๋Š” ๋Šฅ๋ ฅ

๊ฒ€์ฆ ์—ญ๋Ÿ‰: AI๊ฐ€ ์งœ์ค€ ์ฝ”๋“œ๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋งž๋Š”์ง€, ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋Šฅ๋ ฅ

์ด์ œ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์งœ๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ, AI๋ผ๋Š” ์œ ๋Šฅํ•œ ์‹œ๊ณต์‚ฌ๋ฅผ ๊ฐ๋…ํ•˜๋Š” 'ํ˜„์žฅ ์†Œ์žฅ'์ด๋‚˜ '์•„ํ‚คํ…ํŠธ'๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฟ€ํŒ: ์œ ์—ฐํ•œ ํˆด ์Šค์œ„์นญ (Claude Code ↔ Cursor)
    ์ž‘์—…ํ•˜๋‹ค๊ฐ€ Claude Code์˜ ํ† ํฐ์ด๋‚˜ ํ• ๋‹น๋Ÿ‰์„ ๋‹ค ์ผ๋‹ค๊ณ  ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์„ธ์š”. ์ž‘์—…ํ•˜๋˜ ํด๋” ๊ทธ๋Œ€๋กœ Cursor(์ปค์„œ) ๊ฐ™์€ ๋‹ค๋ฅธ AI ์—๋””ํ„ฐ๋กœ ๋„˜์–ด๊ฐ€์„œ ์ž‘์—…์„ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฃผ์˜ํ•  ์ : ํˆด์„ ์˜ฎ๊ธธ ๋•Œ Constitution(ํ—Œ๋ฒ•/์›์น™) ์ปจํ…์ŠคํŠธ๊ฐ€ ๋Š๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ๋ฒ•:. spec ํด๋” ๋‚ด์˜ ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ๋„ ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ํ™•์‹คํ•œ ๊ฑด ๊ธฐ์กด. claude ์„ค์ • ํŒŒ์ผ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๋ผ๊ณ  ๋˜์ ธ์ฃผ๊ฑฐ๋‚˜, Constitution ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•ด์„œ ํ”„๋กฌํ”„ํŠธ์— ํ•œ ๋ฒˆ ์ž…๋ ฅํ•ด ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ๋งŒ ํ•ด์ฃผ๋ฉด AI๊ฐ€ ์ฐฐ๋–ก๊ฐ™์ด ์•Œ์•„๋“ฃ๊ณ  ์ž‘์—…์„ ์ด์–ด๊ฐ‘๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•