Skip to content

Latest commit

ย 

History

History
111 lines (86 loc) ยท 7.29 KB

File metadata and controls

111 lines (86 loc) ยท 7.29 KB

๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„

ํŒ€์ด Claude Code๋ฅผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•œ ์šด์˜ ๊ฐ€์ด๋“œ. ๊ฐ์ž ์ž‘์—…ํ•ด๋„ ๊ฒฐ๊ณผ๋ฌผ์ด ํ•œ ์‚ฌ๋žŒ์ด ์ง  ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒŒ ๋ชฉํ‘œ๋‹ค.

skill์€ Matt Pocock์˜ ์—”์ง€๋‹ˆ์–ด๋ง ์Šคํ‚ฌ ๋ชจ์Œ์—์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค. Matt Pocock์€ ์ „ Vercel ์—”์ง€๋‹ˆ์–ด์ด์ž Total TypeScript๋ฅผ ๋งŒ๋“  TypeScript ๊ต์œก์ž๋กœ, "vibe coding์ด ์•„๋‹Œ ์ง„์งœ ์—”์ง€๋‹ˆ์–ด๋ง"์„ ํ‘œ๋ฐฉํ•˜๋ฉฐ ๊ณต๊ฐœํ•œย .claude ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ TypeScript ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋„๋ฆฌ ์ฑ„ํƒ๋˜๋ฉฐ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด Claude Code๊ฐ€ ์•Œ์•„์„œ ๋ถˆ๋Ÿฌ ์“ด๋‹ค.

๊ธฐ๋ณธ ์›์น™

  • ์ž‘์—… ์ „์— ๋จผ์ € ๋ ˆํฌ์˜ ๋ฌธ์„œ์™€ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณธ๋‹ค.
  • ํ•œ ๋ฒˆ์— ํ•œ ์ž‘์—…๋งŒ ํ•œ๋‹ค.
  • ์• ๋งคํ•œ ์š”๊ตฌ๋Š” ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜์ง€ ๋ง๊ณ  ๋จผ์ € ์ •๋ ฌํ•œ๋‹ค.
  • ๊ฒฐ์ •์€ ๋ง๋กœ๋งŒ ๋‘์ง€ ์•Š๊ณ  CONTEXT.md๋‚˜ ADR์— ๋‚จ๊ธด๋‹ค (์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—… ์ค‘ ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ณ  ์‚ฌ๋žŒ์ด ํ™•์ธ).
  • ์Šคํ‚ฌ๊ณผ ์ปค๋งจ๋“œ๋Š” ๋‹ค๋ฅด๋‹ค. grill-with-docs, to-spec, tdd๋Š” ์Šคํ‚ฌ โ€” ์ด๋ฆ„์„ ์–ธ๊ธ‰ํ•˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค. /start-work, /ship์€ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ โ€” ํƒ€์ดํ•‘ํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค.

์ „์ฒด ํ๋ฆ„

์•„์ด๋””์–ด / ์š”์ฒญ
  โ†’ grill-with-docs (์š”๊ตฌ์‚ฌํ•ญยท์šฉ์–ด ์ •๋ ฌ)
  โ†’ to-spec โ†’ GitHub Issue ์ƒ์„ฑ
  โ†’ [์ถ”๊ฐ€] /start-work {์ด์Šˆ๋ฒˆํ˜ธ} โ†’ gh issue develop --checkout (์ด์Šˆ ์—ฐ๊ฒฐ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ)
  โ†’ /implement (seam๋ณ„๋กœ tdd ๋ฃจํ”„ ๋ฐ˜๋ณต, ์ปค๋ฐ‹๋งˆ๋‹ค pre-commit์ด ์Šคํ…Œ์ด์ง• ํŒŒ์ผ๋งŒ ๊ฒ€์‚ฌ)
      โ”” ์™„๋ฃŒ๋˜๋ฉด ์ž์ฒด code-review๋กœ ์ธ๊ณ„ (Standards/Spec ๋‘ ์ถ• ์ ๊ฒ€)
  โ†’ [์ถ”๊ฐ€] /ship โ†’ ์ „์ฒด typecheck โ†’ gh pr create (Closes #์ด์Šˆ๋ฒˆํ˜ธ ์ž๋™ ํฌํ•จ)
  โ†’ CodeRabbit ๋ฆฌ๋ทฐ (ESLint ์ž๋™ ์‹คํ–‰) + CI (typecheck)
  โ†’ review / approve โ†’ merge (develop ๋จธ์ง€ ์‹œ ์ด์Šˆ ์ž๋™ close)

์ด์Šˆ๊ฐ€ ์ด๋ฏธ ๋ช…ํ™•ํ•˜๋ฉด ์ •๋ ฌ ๋‹จ๊ณ„๋ฅผ ์งง๊ฒŒ ํ•˜๊ณ  ๋ฐ”๋กœ ๊ตฌํ˜„ํ•ด๋„ ๋œ๋‹ค. ์ด์Šˆ ํ•˜๋‚˜๊ฐ€ seam ํ•˜๋‚˜ ์ •๋„๋กœ ์•„์ฃผ ์ž‘์„ ๋• /implement ๋Œ€์‹  tdd๋ฅผ ์ง์ ‘ ๋ถˆ๋Ÿฌ๋„ ๋˜์ง€๋งŒ, ๊ทธ ๊ฒฝ์šฐ code-review ์ธ๊ณ„๋ฅผ ์ง์ ‘ ์ฑ™๊ฒจ์•ผ ํ•œ๋‹ค.

to-spec๊ณผ /implement ๋ชจ๋‘ PR์„ ์—ด์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ(/start-work)๊ณผ typecheckยทPR ์ƒ์„ฑ(/ship)์€ ๋ณ„๋„ ์ปค๋งจ๋“œ(.claude/commands/)๋กœ ์ž๋™ํ™”ํ•œ๋‹ค.

์–ด๋–ค ์Šคํ‚ฌ์„ ์–ธ์ œ ์“ฐ๋‚˜

์Šคํ‚ฌ ์–ธ์ œ ์“ฐ๋‚˜ ์ด์œ 
setup-matt-pocock-skills ๋ ˆํฌ๋ฅผ ์ฒ˜์Œ ์„ธํŒ…ํ•  ๋•Œ 1ํšŒ ์ด์Šˆ ํŠธ๋ž˜์ปค, ๋„๋ฉ”์ธ ๋ฌธ์„œ, ์ž‘์—… ๊ทœ์น™์˜ ๊ธฐ์ค€์ ์„ ์ •ํ•œ๋‹ค.
grill-with-docs ์ƒˆ ๊ธฐ๋Šฅ ์‹œ์ž‘, ์š”๊ตฌ์‚ฌํ•ญ์ด ์• ๋งคํ•  ๋•Œ, ์„ค๊ณ„ ์„ ํƒ์ด ํ•„์š”ํ•  ๋•Œ ์ฝ”๋“œ/๋ฌธ์„œ/๋„๋ฉ”์ธ ์šฉ์–ด๋ฅผ ๋จผ์ € ๋งž์ถฐ์„œ ์—‡๋‚˜๊ฐ„ ๊ตฌํ˜„์„ ๋ง‰๋Š”๋‹ค.
to-spec ์ •๋ ฌํ•œ ๋‚ด์šฉ์„ ์ด์Šˆ๋กœ ๋‚จ๊ธธ ๋•Œ ๋Œ€ํ™” ๋‚ด์šฉ์„ ์ž‘์—… ๋‹จ์œ„๋กœ ๊ณ ์ •ํ•œ๋‹ค. ํ…œํ”Œ๋ฆฟยท๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•„์š” (์•„๋ž˜ ์ฐธ๊ณ )
implement ์‹ค์ œ ๊ตฌํ˜„ํ•  ๋•Œ ํ‹ฐ์ผ“์„ seam ๋‹จ์œ„๋กœ ๋‚˜๋ˆ  tdd ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ , ๋๋‚˜๋ฉด ์ž์ฒด code-review๋กœ ์ธ๊ณ„ํ•œ๋‹ค. ๊ตฌํ˜„ ๋„์ค‘ tdd๋ฅผ ์ง์ ‘ ๋ถ€๋ฅผ ํ•„์š”๊ฐ€ ์—†๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค ์ปค๋งจ๋“œ

์ปค๋งจ๋“œ (์˜ˆ์‹œ๋กœ ์ž‘์„ฑ) ํ•˜๋Š” ์ผ
/start-work {์ด์Šˆ๋ฒˆํ˜ธ} gh issue develop {์ด์Šˆ๋ฒˆํ˜ธ} --checkout โ€” ์ด์Šˆ์— ์—ฐ๊ฒฐ๋œ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ฒดํฌ์•„์›ƒ
/ship ์ „์ฒด typecheck โ†’ gh pr create (Closes #์ด์Šˆ๋ฒˆํ˜ธ, --assignee @me ์ž๋™ ํฌํ•จ)

๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ

<prefix>/issue-{์ด์Šˆ๋ฒˆํ˜ธ} โ€” ์ด์Šˆ ๋ฒˆํ˜ธ๋Š” ๋์— ๋ถ™์ธ๋‹ค.

  • feat/issue-1, fix/issue-2
  • prefix๋Š” ์ด์Šˆ ๋ผ๋ฒจ๋กœ ์ •ํ•œ๋‹ค: bug ๋ผ๋ฒจ์ด๋ฉด fix, ๊ทธ ์™ธ์—๋Š” feat.

CONTEXT.md/ADR์€ ์ƒˆ ์šฉ์–ด๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ฒฐ์ •์„ ๋‚ด๋ ธ์„ ๋•Œ ์“ด๋‹ค. ๋‘˜ ๋‹ค ์ž‘์—…์˜ ๋ถ€์‚ฐ๋ฌผ์ด์ง€, ๋ณ„๋„ ๋ฌธ์„œ ์ž‘์—… ์ž์ฒด๊ฐ€ ๋ชฉํ‘œ๋Š” ์•„๋‹ˆ๋‹ค.

์„ธํŒ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ (๋ ˆํฌ๋‹น 1ํšŒ)

  • docs/agents/issue-tracker.md๊ฐ€ GitHub๋กœ ์„ค์ •๋ผ ์žˆ๋Š”์ง€ ํ™•์ธ (๋กœ์ปฌ .scratch/๋กœ ์žกํ˜€ ์žˆ์œผ๋ฉด ์ด์Šˆ๊ฐ€ ํŒ€์›๊ณผ ๊ณต์œ  ์•ˆ ๋จ โ†’ /setup-matt-pocock-skills ์žฌ์‹คํ–‰ ๋˜๋Š” ์ด ํŒŒ์ผ ์ง์ ‘ ์ˆ˜์ •)
  • .claude/skills/to-spec/SKILL.md์˜ ๋‚ด์žฅ ํ…œํ”Œ๋ฆฟ์„ ์šฐ๋ฆฌ .github/ISSUE_TEMPLATE/ ํ˜•์‹์œผ๋กœ ๊ต์ฒด
  • .claude/commands/start-work.md, .claude/commands/ship.md ์ž‘์„ฑ
  • CLAUDE.md์— "์ด์Šˆ ๋ฐœํ–‰ ์งํ›„ /start-work {์ด์Šˆ๋ฒˆํ˜ธ} ์‹คํ–‰" ๊ทœ์น™ ์ถ”๊ฐ€
  • /ship์— -assignee @me, ๋ธŒ๋žœ์น˜๋ช…์—์„œ ํŒŒ์‹ฑํ•œ Closes #์ด์Šˆ๋ฒˆํ˜ธ ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธ
  • .github/CODEOWNERS์— ํŒ€์› ์ „์ฒด ๋“ฑ๋ก (PR ์ž‘์„ฑ์ž๋Š” ์ž๋™ ์ œ์™ธ๋˜๊ณ  ๋‚˜๋จธ์ง€์—๊ฒŒ ๋ฆฌ๋ทฐ ์š”์ฒญ)

to-spec์ด ์ŠคํŽ™ ๋ฐœํ–‰ ํ›„ ์ž๋™์œผ๋กœ ๋ถ™์ด๋Š” ready-for-agent ๋ผ๋ฒจ์€ triage ์Šคํ‚ฌ(์•ˆ ์”€) ์—†์ด๋Š” ๊ทธ๋ƒฅ ์ฐธ๊ณ ์šฉ ํ‘œ์‹œ์ผ ๋ฟ, ๋ณ„๋‹ค๋ฅธ ์ž๋™ํ™”๋Š” ์—†๋‹ค.

ํŒŒ์ผ/ํด๋” ๊ตฌ์กฐ

/
โ”œโ”€โ”€ .claude/
โ”‚   โ”œโ”€โ”€ CLAUDE.md
โ”‚   โ”œโ”€โ”€ commands/
โ”‚   โ”‚   โ”œโ”€โ”€ start-work.md
โ”‚   โ”‚   โ””โ”€โ”€ ship.md
โ”‚   โ””โ”€โ”€ skills/
โ”œโ”€โ”€ .github/
โ”‚   โ”œโ”€โ”€ CODEOWNERS              # ๋ฆฌ๋ทฐ์–ด ์ž๋™ ๋“ฑ๋ก
โ”‚   โ”œโ”€โ”€ ISSUE_TEMPLATE/         # to-spec์ด ๋”ฐ๋ผ์•ผ ํ•  ํ˜•์‹
โ”‚   โ”œโ”€โ”€ pull_request_template.md
โ”‚   โ””โ”€โ”€ workflows/ci.yml        # ํƒ€์ž…์ฒดํฌ๋งŒ
โ”œโ”€โ”€ .husky/pre-commit
โ”œโ”€โ”€ CONTEXT.md                  # ์šฉ์–ด์ง‘
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ adr/                    # ๊ฒฐ์ • ๊ธฐ๋ก
โ”‚   โ”œโ”€โ”€ agents/                 # ์ด์Šˆ ํŠธ๋ž˜์ปค/๋„๋ฉ”์ธ ๋ฌธ์„œ ์œ„์น˜ ์„ค์ •
โ”‚   โ”œโ”€โ”€ conventions/frontend.md # Vercel best practices ์œ„์— ์–น๋Š” ํŒ€ ๊ทœ์น™
โ”‚   โ””โ”€โ”€ design/design-system.md # Figma โ†” ์ฝ”๋“œ ๋Œ€์‘ํ‘œ
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ app/ pages/ features/ entities/
โ”‚   โ””โ”€โ”€ shared/{api,config,hooks,lib,ui}/
โ””โ”€โ”€ styles/globals.css

๋ ˆํฌ ๊ตฌ์กฐ ์›์น™

์ง€๊ธˆ ๊ตฌ์กฐ๋Š” FSD(Feature-Sliced Design)๋ฅผ ํ†ต์งธ๋กœ ๊ฐ€์ ธ์˜จ ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ ์ผ๋ถ€๋งŒ ๋ฝ‘์•„์˜จ ๊ฒƒ์ด๋‹ค.

app โ†’ pages โ†’ features โ†’ entities โ†’ shared
  • ์ƒ์œ„ ๋ ˆ์ด์–ด๋Š” ํ•˜์œ„ ๋ ˆ์ด์–ด๋งŒ ์ฐธ์กฐํ•œ๋‹ค (์—ญ๋ฐฉํ–ฅ ์ฐธ์กฐ ๊ธˆ์ง€).
  • features ๋ผ๋ฆฌ, entities ๋ผ๋ฆฌ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š”๋‹ค (๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์ฐธ์กฐ ๊ธˆ์ง€).
  • ๋ฐ”๊นฅ์—์„œ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ features/{๋„๋ฉ”์ธ}/index.ts, entities/{๋„๋ฉ”์ธ}/index.ts๋งŒ ํ†ตํ•ด ๊ฐ€์ ธ๊ฐ„๋‹ค.
  • entities๋Š” ํŠน์ • feature์— ์ข…์†๋˜์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ํƒ€์ž…, ์—ฌ๋Ÿฌ feature๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋ณธ UI)๋ฅผ ๋‘”๋‹ค.
  • UI๋Š” ๋จผ์ € shared/ui์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • widgets ์€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.