| name | spec-reviewer |
| description | Use when a spec or planning document needs development-readiness validation. Detects missing edge cases, state transitions, data constraints, and gives PASS/FAIL judgment. For developers reviewing specs or planning teams wanting pre-development quality checks. Triggers: "๊ธฐํ์ ๋ฆฌ๋ทฐ", "spec review", "๊ธฐํ์ ๊ฒ์ฆ", "๊ฐ๋ฐ Ready ํ์ธ", "spec reviewer", "๊ธฐํ์ ๋ด์ค"
|
| allowed-tools | AskUserQuestion, Write, Read, Glob, Grep |
Spec Reviewer
๊ธฐํ์์ ์์ฑ๋๋ฅผ ๊ฐ๋ฐ ๊ด์ ์์ ๊ฒ์ฆํ๋ค. 14๊ฐ ์ฒดํฌ๋ฆฌ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๋๋ฝ ํญ๋ชฉ์ ๊ฒ์ถํ๊ณ , Critical/Important/Nice-to-have๋ก ๋ถ๋ฅํ์ฌ "๊ฐ๋ฐ Ready" ํ์ ์ ๋ด๋ฆฐ๋ค.
When to Use
- ๊ธฐํ์๊ฐ ๊ฐ๋ฐ์ ์์ํ๊ธฐ์ ์ถฉ๋ถํ์ง ํ์ธํ๊ณ ์ถ์ ๋
- spec-generator ์ฐ์ถ๋ฌผ์ ๊ฒ์ฆํ ๋
- ๊ธฐ์กด ๊ธฐํ์(์ด๋ค ํํ๋ )์ ๋นํ์ ์ฐพ๊ณ ์ถ์ ๋
Do NOT use when:
- ์๊ตฌ์ฌํญ์ด ์์ง ์ ๋ฆฌ๋์ง ์์ ์ํ โ spec-interview ๋จผ์
- ๊ธฐํ์๊ฐ ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ โ pr-reviewer ์ฌ์ฉ
- ๊ฐ๋ฐ ์คํ์ ์์ฑํ๊ณ ์ถ์ ๋ โ interview Skill ์ฌ์ฉ
Quick Reference
| Phase | Action | Key Rule |
|---|
| 1. Input ํ์ฑ | ๊ธฐํ์ ์ฝ๊ธฐ + ํ
ํ๋ฆฟ ๋งคํ | ์ด๋ค ํํ์ ๊ธฐํ์๋ ์์ฉ |
| 2. ์ปค๋ฒ๋ฆฌ์ง ์ฒดํฌ | 8๊ฐ ์น์
๋๋น ๋น/์ฝํ ์น์
์๋ณ | ์ ๋์ ๋งคํธ๋ฆญ์ค |
| 2.5. ํ์ ์ง๋ฌธ | M1-M8 ๊ฐ์ ์ง๋ฌธ ๋ธ๋ก | ์คํต ๋ถ๊ฐ, ๋ชจ๋ ๋ต๋ณ ํ์ |
| 3. ๊ฐญ ๋ถ์ | 14๊ฐ ์ฒดํฌ๋ฆฌ์คํธ ๊ธฐ๋ฐ ๋๋ฝ ๊ฒ์ถ | ๋๋ฉ์ธ ๊ธฐ๋ฐ ์ถ๋ก |
| 4. ์ง๋ฌธ ์์ฑ + ํ์ | ๋ถ๋ฅ + PASS/FAIL | Critical 0๊ฐ = PASS |
CRITICAL: AskUserQuestion ํด ๋ถ๋ฆฌ ๊ท์น
AskUserQuestion์ ์ด ์คํฌ์ด ๋ก๋๋ ํด(๊ฐ์ assistant turn)์์ ์ ๋ ํธ์ถํ์ง ๋ง์ธ์.
Skill tool๋ก ์ด ์คํฌ์ด ๋ก๋๋๋ฉด, ๊ฐ์ ํด์์ AskUserQuestion์ ํธ์ถํ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ์ง๋ฌธ UI๊ฐ ํ์๋์ง ์๊ณ ๋น ์๋ต์ผ๋ก ์๋ ์ฒ๋ฆฌ๋ฉ๋๋ค (Claude Code ํ๋ซํผ ์ ์ฝ).
ํ์ ์ ์ฐจ:
- Input์ด ์์ผ๋ฉด: "์ด๋ค ๊ธฐํ์๋ฅผ ๋ฆฌ๋ทฐํ ๊น์?"๋ฅผ ํ
์คํธ๋ก ์ถ๋ ฅํ๊ณ STOPํ๋ค
- Input์ด ์์ผ๋ฉด: Phase 1-4๋ฅผ ์ํํ๊ณ ๊ฒฐ๊ณผ ํ์ผ์ ์ถ๋ ฅํ๋ค (AskUserQuestion ๋ถํ์)
์ด ๊ท์น์ ์ด๊ธฐ๋ฉด ์ฌ์ฉ์๊ฐ ์ง๋ฌธ์ ๋ณผ ์ ์์ต๋๋ค.
ํต์ฌ ์์น
1. ๊ฐ๋ฐ์ ๊ด์ ์์ ๊ฒ์ฆํ๋, ๊ธฐํํ์ด ๋ตํ ์ ์๋ ์ง๋ฌธ์ ๋ง๋ ๋ค.
"์ด ๊ธฐ๋ฅ์ soft delete์ธ๊ฐ์?"๊ฐ ์๋๋ผ "์ญ์ ํ๋ฉด ๋ณต๊ตฌํ ์ ์๋์, ์์ ํ ์ฌ๋ผ์ง๋์?"๋ก ์ง๋ฌธํ๋ค.
2. ๊ฒ์ฆ์ ์๊ฒฉํ๊ฒ, ์ง๋ฌธ์ ์น์ ํ๊ฒ.
๋นํ์ ์ ํํ ์ง๋, ์ง๋ฌธ์ ๊ธฐํํ์ด ์ดํดํ ์ ์๋ ๋น์ฆ๋์ค ์ธ์ด๋ก ์์ฑํ๋ค.
3. ํ์ ๊ธฐ์ค์ ๋ช
ํํ๋ค.
- Critical 0๊ฐ โ PASS (๊ฐ๋ฐ ์์ ๊ฐ๋ฅ)
- Critical 1๊ฐ ์ด์ โ FAIL (๋ณด์ ํ์)
- Important 5๊ฐ ์ด์ โ PASS์ด์ง๋ง ๊ฒฝ๊ณ
Protocol
Phase 1: Input ํ์ฑ
-
๊ธฐํ์ ํ์ผ ํ์ธ:
specs/{feature}-spec.md ์กด์ฌ ์ฌ๋ถ ํ์ธ (Glob)
- ๊ฐ์ ์ธ์
์์ spec-generator๊ฐ ์คํ๋์๋ค๋ฉด ํด๋น ์ปจํ
์คํธ ํ์ฉ
- ์ฌ์ฉ์๊ฐ ์ง์ ์ ๊ณตํ ํ์ผ/ํ
์คํธ๋ ๊ฐ๋ฅ
-
์ ํ Context ๋ก๋ฉ (๋ํ ์ปจํ
์คํธ์ ์ด๋ฏธ domain.md/codebase-summary.md๊ฐ ์กด์ฌํ๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ด๋ค โ spec-pipeline์์ ํธ์ถ๋ ๊ฒฝ์ฐ):
~/.claude/skills/spec-pipeline/products/_registry.md๋ฅผ ์ฝ๊ณ ๊ธฐํ์ ๋ด์ฉ์์ ์ ํ์ ์๋ณํ๋ค
- ๋งค์นญ๋ ์ ํ์
~/.claude/skills/spec-pipeline/products/{product-id}/codebase-summary.md๋ฅผ ์ฝ์ด ๊ธฐ์ ์ ์ ์ฝ์ ํ์
ํ๋ค
- Context ํ์ฉ โ ๊ฒ์ฆ ๊ฐํ: ์ฝ๋๋ฒ ์ด์ค์ ์ด๋ฏธ ์กด์ฌํ๋ API/DB ๊ตฌ์กฐ์ ๊ธฐํ์์ ์๋๋ฆฌ์ค๋ฅผ ๋์กฐํ์ฌ, ๊ธฐ์กด ์์คํ
๊ณผ์ ์ ํฉ์ฑ์ ์ถ๊ฐ ๊ฒ์ฆํ๋ค
- [Context ๊ธฐ๋ฐ] ๋งํฌ ์ฒ๋ฆฌ: spec-generator๊ฐ ๋ถ์ธ [Context ๊ธฐ๋ฐ] ๋งํฌ๋ ์ฝ๋/๋ฌธ์์ ๊ทผ๊ฑฐ๊ฐ ์์ผ๋ฏ๋ก [์ถ์ ]๋ณด๋ค ๋ฎ์ ๊ฒ์ฆ ๊ฐ๋๋ฅผ ์ ์ฉํ๋ค:
- ๊ธฐ๋ณธ: Nice-to-have (๊ทผ๊ฑฐ๊ฐ ์์ผ๋ฏ๋ก)
- ๋จ, Critical ์กฐ๊ฑด(ํต์ฌ ํ๋ฆ ์ํฅ, ํต์ฌ ๋ฐ์ดํฐ ์ ์ฝ ๋ฑ)์ ํด๋นํ๋ฉด Important ๋๋ Critical๋ก ์ฌ๋ฆฐ๋ค โ ์ฝ๋ ๊ทผ๊ฑฐ๊ฐ ์์ด๋ ํต์ฌ ๊ธฐ๋ฅ์ ์ํฅ์ด๋ฉด ๋ฐ๋์ ๊ฒ์ฆ
- ๋ฏธ๋ฑ๋ก ์ ํ์ด๋ฉด context ์์ด ๋ฒ์ฉ ๋ชจ๋๋ก ์งํํ๋ค
-
ํ
ํ๋ฆฟ ๋งคํ:
์
๋ ฅ์ด 8๊ฐ ์น์
๊ตฌ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ด์ฉ์ 8๊ฐ ์น์
์ ๋งคํ:
์
๋ ฅ์ ๊ฐ ๋ถ๋ถ โ 8๊ฐ ์น์
์ค ์ด๋์ ํด๋นํ๋๊ฐ?
๋งคํ ๋ถ๊ฐ๋ฅํ ๋ด์ฉ์ "์ถ๊ฐ ์ ๋ณด"๋ก ๋ณ๋ ๊ธฐ๋กํ๋ค.
-
[์ถ์ ] / [Context ๊ธฐ๋ฐ] ๋งํฌ ์์ง:
๊ธฐํ์์ [์ถ์ ] ๋๋ [Context ๊ธฐ๋ฐ] ๋งํฌ๊ฐ ์์ผ๋ฉด ๋ณ๋๋ก ์์งํ๋ค.
[์ถ์ ]์ ์๋์ผ๋ก Important ์ด์์ผ๋ก ๋ถ๋ฅ๋๋ค
[Context ๊ธฐ๋ฐ]์ ์ฝ๋/๋ฌธ์ ๊ทผ๊ฑฐ๊ฐ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ Nice-to-have๋ก ๋ถ๋ฅํ๋ค
- ๋จ, [Context ๊ธฐ๋ฐ]์ด๋ผ๋ Critical ์กฐ๊ฑด(ํต์ฌ ํ๋ฆ ์ํฅ, ํต์ฌ ๋ฐ์ดํฐ ์ ์ฝ ๋๋ฝ ๋ฑ)์ ํด๋นํ๋ฉด Important ๋๋ Critical๋ก ์ฌ๋ฆฐ๋ค
- ์ฃผ์: spec-generator์์ PM์ด ํ์ธํ์ฌ ๋งํฌ๊ฐ ์ ๊ฑฐ๋ ํญ๋ชฉ์ ํ์ ๋ด์ฉ์ผ๋ก ์ทจ๊ธํ๋ค. reviewer๋ ๋จ์์๋ ๋งํฌ๋ง ํ๋๊ทธํ๋ค.
-
๋ฏธ๊ฒฐ ์ฌํญ ์์ง:
๊ธฐํ์ ๋๋ ์๊ตฌ์ฌํญ์ "๋ฏธ๊ฒฐ ์ฌํญ" ์น์
์ด ์์ผ๋ฉด ์์งํ๋ค.
- ๋ฏธ๊ฒฐ ์ฌํญ์ด ์ด๋ฒ ๋ฒ์(scope) ๋ด ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ:
- Generator๊ฐ ํฉ๋ฆฌ์ ๊ธฐ๋ณธ๊ฐ์ [์ถ์ ]์ผ๋ก ์ ์ํ ๋ฏธ๊ฒฐ ์ฌํญ โ Important (๊ธฐ๋ณธ๊ฐ์ด ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ์์์ ๊ฐ๋ฅ)
- Generator๊ฐ ๊ธฐ๋ณธ๊ฐ์ ์ ์ํ์ง ๋ชปํ(๋น์นธ) ๋ฏธ๊ฒฐ ์ฌํญ โ Critical (๊ฐ๋ฐ ์์ ๋ถ๊ฐ)
- ๋ฏธ๊ฒฐ ์ฌํญ์ด ์ด๋ฒ ๋ฒ์ ๋ฐ์ด๊ฑฐ๋ v2 ์ดํ ๊ธฐ๋ฅ์ ํด๋น โ Nice-to-have๋ก ๋ถ๋ฅ
- ๋ฏธ๊ฒฐ ์ฌํญ์ "์๋ ค์ง ๋ฏธ๊ฒฐ"๋ก์, ๋๋ฝ ํญ๋ชฉ๊ณผ ๊ตฌ๋ถํ์ฌ ๋ณ๋ ์น์
์ ๊ธฐ๋กํ๋ค
Phase 2: ์ปค๋ฒ๋ฆฌ์ง ์ฒดํฌ
8๊ฐ ์น์
๊ฐ๊ฐ์ ๋ํด ์ํ๋ฅผ ํ์ ํ๋ค:
| ์ํ | ๊ธฐ์ค | ์์ |
|---|
| ์ถฉ๋ถ | ๊ตฌ์ฒด์ ๋ด์ฉ์ด ์๊ณ , ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ๊ตฌํ ๊ฐ๋ฅ | ์์ธ ์ํฉ 3๊ฐ ์ด์ + ๊ฐ๊ฐ ์ฌ์ฉ์ ๋ฐ์ ๋ช
์ |
| ์ฝํจ | ๋ด์ฉ์ด ์์ง๋ง ๋ชจํธํ๊ฑฐ๋ ํต์ฌ ์์ ์ ๋ฐ ์ด์ ๋๋ฝ | "๊ด๋ฆฌ์๋ง ๊ฐ๋ฅ"๋ง ์๊ณ ์ธ๋ถ ๊ถํ ์์ |
| ์์ | ํด๋น ์น์
๋ด์ฉ์ด ์ ํ ์๊ฑฐ๋, ํ ๋ฌธ์ฅ ์ดํ | ๋ฐ์ดํฐ ํ๋ ๋ชฉ๋ก ์์ด "์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ" ์์ค |
| ํด๋น์์ | ์ด ๊ธฐ๋ฅ์ ์ ์ฉ๋์ง ์์ (๋ช
์์ ์ผ๋ก "์์" ์ธ๊ธ ์) | "์ธ๋ถ ์ฐ๋ ์์" ๋ช
์ |
๋งํฌ๊ฐ ํฌํจ๋ ์น์
์ ํ์ ๊ท์น:
-
[์ถ์ ] ๋น์จ ์๊ณ์น๋ ๊ธฐ๋ฅ ๋ณต์ก๋์ ๋ฐ๋ผ ์ฐจ๋ฑ ์ ์ฉํ๋ค:
| ๊ธฐ๋ฅ ๋ณต์ก๋ | [์ถ์ ] ์๊ณ์น | ํ๋จ ๊ธฐ์ค |
|---|
| Low (๋จ์ผ CRUD, ๋
๋ฆฝ ๊ธฐ๋ฅ) | 30% ์ด์ โ ์ต๋ "์ฝํจ" | ์๊ตฌ์ฌํญ์ด ๋ช
ํํด์ผ ํ๋ ๋ฒ์ |
| Medium (๋ค์ค ์๋๋ฆฌ์ค, ์ฐ๋ 1-2๊ฐ) | 40% ์ด์ โ ์ต๋ "์ฝํจ" | ์ผ๋ถ ์ถ์ ์ด ์์ฐ์ค๋ฌ์ด ๋ฒ์ |
| High (๋ณตํฉ ํ๋ฆ, ์ฐ๋ 3๊ฐ+, ์ ๊ท ๋๋ฉ์ธ) | 50% ์ด์ โ ์ต๋ "์ฝํจ" | ๋ฏธ์ง ์์ญ์ด ๋์ด ์ถ์ ์ด ๋ถ๊ฐํผ |
-
๋ณต์ก๋ ํ๋จ: ๊ธฐํ์์ ์๋๋ฆฌ์ค ์, ์ฐ๋ ์์คํ
์, ์ํ ์ ์ด ์๋ฅผ ์ข
ํฉํ์ฌ ํ๋จ
-
์๊ณ์น ๋ฏธ๋ง์ด๋ฉด โ "์ถฉ๋ถ" ๊ฐ๋ฅํ๋, ๋น๊ณ ์ [์ถ์ ] ํญ๋ชฉ์ ๋ช
์
-
[Context ๊ธฐ๋ฐ] ํญ๋ชฉ์ ์ด ์๊ณ์น์ ํฌํจํ์ง ์๋๋ค โ ์ฝ๋/๋ฌธ์ ๊ทผ๊ฑฐ๊ฐ ์์ผ๋ฏ๋ก ํ์ ๋ด์ฉ์ ์คํ๋ค
์ปค๋ฒ๋ฆฌ์ง ๋งคํธ๋ฆญ์ค:
| ์น์
| ์ํ | ๋น๊ณ |
|------|------|------|
| 1. ๋ฐฐ๊ฒฝ | ์ถฉ๋ถ | โ |
| 2. ์ฌ์ฉ์์ ๋ชฉํ | ์ฝํจ | ์ฌ์ฉ์ ์ ํ์ด 1๊ฐ๋ง ๋ช
์ |
| 3. ์ฌ์ฉ ์๋๋ฆฌ์ค | ์ถฉ๋ถ | ์ ์ ํ๋ฆ + ์์ธ 3๊ฐ |
| 4. ๋ฐ์ดํฐ์ ์ํ | ์์ | ์ํ ์ ์ด ๋๋ฝ |
| 5. ์ฐ๊ฒฐ๋๋ ์์คํ
| ํด๋น์์ | โ |
| 6. ๊ถํ | ์ฝํจ | "๊ด๋ฆฌ์๋ง ๊ฐ๋ฅ"๋ง ๋ช
์ |
| 7. ๋ฒ์์ ์ฑ๊ณต ๊ธฐ์ค | ์ถฉ๋ถ | โ |
| 8. ๊ฐ๋ฐ ์ ์ฑ
| ์ฝํจ | [์ถ์ ] 3๊ฐ, ๋์ ์์ ๋ฏธ์ ์ |
Phase 2.5: ๊ฐ์ ํ์ ์ง๋ฌธ ๋ธ๋ก (Mandatory Questions)
Phase 2 ์ปค๋ฒ๋ฆฌ์ง ์ฒดํฌ ํ, Phase 3 ๊ฐญ ๋ถ์ ์ ์ 8๊ฐ ํ์ ์ง๋ฌธ์ ๋ฐ๋์ ๋ตํ๋ค.
์ด ์ง๋ฌธ๋ค์ ์ฒดํฌ๋ฆฌ์คํธ 14๊ฐ์ ๋ณ๊ฐ๋ก, ๊ธฐํ์์ "ํฐ ๊ทธ๋ฆผ" ๋นํ์ ์ก๋๋ค.
์ด๋ค ์ง๋ฌธ๋ ๊ฑด๋๋ธ ์ ์๋ค โ "ํด๋น์์"์ด๋ฉด ๊ทธ ์ด์ ๋ฅผ ๋ช
์ํด์ผ ํ๋ค.
| # | ํ์ ์ง๋ฌธ | ์ ์ค์ํ๊ฐ |
|---|
| M1 | ์ฒซ ์ฌ์ฉ ์ ๋ฌด์์ด ๋ณด์ด๋๊ฐ? (๋น ์ํ, ์จ๋ณด๋ฉ) | ๊ธฐํ์์ 80%๋ "๋ฐ์ดํฐ๊ฐ ์๋ ์ํ"๋ง ๊ธฐ์ . ๋น ์ํ๊ฐ ์ ์ ์ ๋๋ฉด ๊ฐ๋ฐ์๊ฐ ์์๋ก ๋ง๋ฆ |
| M2 | ์๋ชป๋ ์
๋ ฅ์ด ๋ค์ด์ค๋ฉด? (์
์์ ์
๋ ฅ ํฌํจ) | XSS, SQL injection, ํ์ ์๋ฐ ๋ฑ ๋ฐฉ์ด ์๋๋ฆฌ์ค ๋๋ฝ ์ฌ๋ถ |
| M3 | ๋์์ ์ฌ๋ฌ ๋ช
์ด ๊ฐ์ ๊ฒ์ ์์ ํ๋ฉด? | ๋์์ฑ ์ด์๋ ๊ธฐํ์์ ๊ฑฐ์ 100% ๋๋ฝ๋จ |
| M4 | ์ธ๋ถ ์ฐ๋์ด ์คํจํ๋ฉด? (API ํ์์์, ์๋ฒ ๋ค์ด) | ์ธ๋ถ ์์กด์ฑ ์ฅ์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ์ ์ ๋๋ฉด 500 ์๋ฌ ๋
ธ์ถ |
| M5 | ์ด ๋ฐ์ดํฐ์ ์๋ช
์ฃผ๊ธฐ๋? (์์ฑโ์์ โ์ญ์ โ๋ณด๊ด) | ์ญ์ ์ ์ฑ
, ๋ณด๊ด ๊ธฐ๊ฐ, ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ ๋๋ฝ |
| M6 | ๋๊ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๊ณ , ์์ /์ญ์ ํ ์ ์๋๊ฐ? | ๊ถํ ๋ชจ๋ธ ๋๋ฝ ์ ๋ณด์ ์ทจ์ฝ์ ๋ฐ์ |
| M7 | ์ด ๊ธฐ๋ฅ์ด ํ๋ก๋์
์์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ด๋ป๊ฒ ๋๋๋ฆฌ๋๊ฐ? | ๋กค๋ฐฑ ์ ๋ต์ด ์์ผ๋ฉด ์ฅ์ ์ ์์ต ๋ถ๊ฐ |
| M8 | ์ฑ๊ณต์ ์ด๋ป๊ฒ ์ธก์ ํ๋๊ฐ? (์ ๋์ ๊ธฐ์ค) | "์ ๋๋ฉด ๋๋ค"๋ ํ
์คํธ ๋ถ๊ฐ๋ฅ. ๊ตฌ์ฒด์ ์์น ํ์ |
๋ต๋ณ ํ์:
## ํ์ ์ง๋ฌธ ๋ธ๋ก
| # | ์ง๋ฌธ | ๊ธฐํ์ ๋ต๋ณ | ์ํ |
|---|------|-----------|------|
| M1 | ์ฒซ ์ฌ์ฉ ์ ๋ฌด์์ด ๋ณด์ด๋๊ฐ? | "๋น ๋ชฉ๋ก + ์์ฑ ๋ฒํผ" (์น์
3) | โ
์ถฉ๋ถ |
| M2 | ์๋ชป๋ ์
๋ ฅ์ด ๋ค์ด์ค๋ฉด? | ์ ์ ์์ | โ ๋๋ฝ โ Important |
| M3 | ๋์ ์์ ์? | ํด๋น์์ (์ฝ๊ธฐ ์ ์ฉ ๊ธฐ๋ฅ) | โ N/A |
| ... | ... | ... | ... |
๋๋ฝ๋ ํญ๋ชฉ์ Phase 4์ ์ง๋ฌธ ๋ชฉ๋ก์ ์๋์ผ๋ก ์ถ๊ฐ๋๋ค.
M1-M8 ์ค Critical ์กฐ๊ฑด์ ํด๋นํ๋ ๋๋ฝ์ Phase 4์ Critical๋ก ์ง์ ๋ถ๋ฅํ๋ค.
Phase 3: ๊ฐญ ๋ถ์
14๊ฐ ๊ฒ์ฆ ์ฒดํฌ๋ฆฌ์คํธ:
| # | ๊ฒ์ฆ ํญ๋ชฉ | ๊ฒ์ฆ ์ง๋ฌธ | Critical ์กฐ๊ฑด |
|---|
| 1 | ์๋ฌต์ ๊ฐ์ | ๋น์ฐํ๋ค๊ณ ์๊ฐํด์ ์ ์ด ๋น์ฆ๋์ค ๊ท์น์ ์๋๊ฐ? | ํต์ฌ ํ๋ฆ์ ์ํฅ |
| 2 | ์๋ฌ/์คํจ ์๋๋ฆฌ์ค | ๋ชจ๋ ์ ์ ํ๋ฆ์ ๋์ํ๋ ์คํจ ์๋๋ฆฌ์ค๊ฐ ์๋๊ฐ? | ์ ์ ํ๋ฆ ๋๋น ์์ธ ์ปค๋ฒ์จ 50% ๋ฏธ๋ง |
| 3 | ์ํ ์ ์ด ์์ ์ฑ | ๋ชจ๋ (ํ์ฌ์ํ, ์ด๋ฒคํธ) ์กฐํฉ์ด ์ ์๋์๋๊ฐ? spec-generator๊ฐ ๊ตฌ์กฐํํ ์ํ ํ์ ์์ ์ฑ์ ๊ฒ์ฆํ๋ค. | ์ํ๊ฐ ์๋๋ฐ ์ ์ด ๋ฏธ์ ์ |
| 4 | ๋ฐ์ดํฐ ์ ์ฝ | ๋ชจ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ํ์/์ ํ, ์ต๋๊ธธ์ด, ํ์์ด ์๋๊ฐ? | ํต์ฌ ๋ฐ์ดํฐ ์ ์ฝ ๋๋ฝ |
| 5 | ๊ถํ ๋ชจ๋ธ | ๊ฐ ๊ธฐ๋ฅ์ ๋ํด ๋๊ฐ ํ ์ ์๊ณ /์๋์ง ๋ช
์๋์๋๊ฐ? | ๋ค์ค ์ญํ ์ธ๋ฐ ๊ถํ ๋ฏธ์ ์ |
| 6 | ์ฐ๋ ๊ณ์ฝ | ์ธ๋ถ ์์คํ
๊ณผ์ ์ธํฐํ์ด์ค๊ฐ ์ถฉ๋ถํ ๊ธฐ์ ๋์๋๊ฐ? | ์ฐ๋ ์๋๋ฐ ์ฅ์ ์ ๋์ ๋ฏธ์ ์ |
| 7 | ๋ชฉ๋ก ๋์ | ๋ชฉ๋ก์ด ์๋ค๋ฉด ๋น ์ํ/๋๋/์ ๋ ฌ/๊ฒ์์ด ์ ์๋์๋๊ฐ? | ๋ชฉ๋ก UI์ธ๋ฐ ๋น ์ํ ๋ฏธ์ ์ |
| 8 | ์
๋ ฅ ์ ํจ์ฑ | ์ฌ์ฉ์ ์
๋ ฅ ํ๋์ ํ์ฉ ๋ฒ์/ํ์์ด ์ ์๋์๋๊ฐ? | ํต์ฌ ์
๋ ฅ ํ๋ ์ ํจ์ฑ ๋๋ฝ |
| 9 | ๋ฒ์ ๊ฒฝ๊ณ | "์ ํ๋ ๊ฒ"์ด ๋ช
์์ ์ผ๋ก ์ ์๋์๋๊ฐ? | ๋ฒ์๊ฐ ์ ํ ์ ์๋์ง ์์ |
| 10 | ์ฑ๊ณต ๊ธฐ์ค | ์์ฑ์ ์ ์๊ฐ ํ
์คํธ ๊ฐ๋ฅํ ํํ์ธ๊ฐ? | ์ฑ๊ณต ๊ธฐ์ค ์์ |
| 11 | ๋น๊ธฐ๋ฅ ์๊ตฌ์ฌํญ | ๋์ ์ฌ์ฉ์ ์, ์๋ต ์๋, ๋ณด์/๊ฐ์ธ์ ๋ณด ์๊ฑด์ด ์ ์๋์๋๊ฐ? ๊ณ ์ํ ๋๋ฉ์ธ(๊ฒฐ์ /์๋ฃ/๊ฐ์ธ์ ๋ณด)์ด๋ฉด ๊ท์ ์ค์ ์๊ฑด์ด ์๋๊ฐ? | ํต์ฌ ๋น๊ธฐ๋ฅ ์๊ฑด ๋๋ฝ (์: ๊ฒฐ์ ๊ธฐ๋ฅ์ธ๋ฐ ๋ณด์ ์๊ฑด ์์, ์๋ฃ ๋ฐ์ดํฐ์ธ๋ฐ ๋น์๋ณํ ์๊ฑด ์์) |
| 12 | ๊ฐ๋ฐ ์ ์ฑ
์์ ์ฑ | ์น์
8์ ์ ์ฑ
์ด ๊ธฐ๋ฅ ์ ํ์ ๋ง๊ฒ ์ ์๋์๋๊ฐ? CRUD ๊ธฐ๋ฅ์ด๋ฉด ์์ /์ญ์ /๋์์ฑ/์ค๋ณต/์ด๋ ฅ ์ ์ฑ
์ด ์๋๊ฐ? ๊ณต์ ๊ธฐ๋ฅ์ด๋ฉด ์๋ณธ-์ฌ๋ณธ ๋๊ธฐํ/๊ณต์ ์ทจ์/๋ฒ์ ์ ์ฑ
์ด ์๋๊ฐ? | CRUD ๊ธฐ๋ฅ์ธ๋ฐ ์ญ์ ๋๋ ๋์์ฑ ์ ์ฑ
๋ฏธ์ ์. ๊ณต์ ๊ธฐ๋ฅ์ธ๋ฐ ๋๊ธฐํ ์ ์ฑ
๋ฏธ์ ์ |
| 13 | ์ฐ๊ด ๋ฐ์ดํฐ ์ํฅ | ์ํฐํฐ ๊ฐ ์ฐ๊ฒฐ์ด ์๋ค๋ฉด, ๋ณ๊ฒฝ/์ญ์ ์ ์ฐ์ ์ํฅ์ด ์ ์๋์๋๊ฐ? ์น์
4์ "์ฐ๊ด ๋ฐ์ดํฐ ์ํฅ" ํ๊ฐ ์์ด์ผ ํ๋๋ฐ ์๊ฑฐ๋, ์์ง๋ง ๋ถ์์ ํ๊ฐ? | ์ฐ๊ด ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ ์ฐ์ ์ํฅ ๋ฏธ์ ์ |
| 14 | ๊ธฐ์กด ์์คํ
์ ํฉ์ฑ | ๊ธฐํ์์ ์๋๋ฆฌ์ค/๋ฐ์ดํฐ/์ํ๊ฐ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค(codebase-summary.md)์ ๋ชจ์๋์ง ์๋๊ฐ? ๊ธฐ์กด API/DB ๊ตฌ์กฐ์ ์ถฉ๋ํ๋ ์ค๊ณ๊ฐ ์๋๊ฐ? | ๊ธฐ์กด ์์คํ
๊ณผ ๋ช
์์ ์ผ๋ก ๋ชจ์๋๋ ์ค๊ณ (context ์์ ๋๋ง ๊ฒ์ฆ) |
๊ฐญ ๋ถ์ ๋ฐฉ๋ฒ:
- ๊ฐ ํญ๋ชฉ์ ์์๋๋ก ๊ฒ์ฆ
- ๋๋ฉ์ธ ์ง์์ ํ์ฉํ์ฌ ๊ธฐํ์์์ ๋น ์ง ๊ตฌ์ฒด์ ์๋๋ฆฌ์ค๋ฅผ ์ ์
- ์: "๊ฒฐ์ ๊ธฐ๋ฅ์ธ๋ฐ '๊ฒฐ์ ์ค ๋คํธ์ํฌ ์ค๋ฅ' ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค"
- ์: "'์ฃผ๋ฌธ' ์ํ์์ '์ทจ์ ์์ฒญ'์ด ๋ค์ด์ค๋ฉด ์ด๋ป๊ฒ ๋๋์ง ์ ์๋์ง ์์์ต๋๋ค"
- [์ถ์ ] ๋งํฌ๊ฐ ๋ถ์ ํญ๋ชฉ์ ๋ถ๋ฅ ๊ท์น:
- [์ถ์ ]์ด ์ฒดํฌ๋ฆฌ์คํธ Critical ์กฐ๊ฑด ํญ๋ชฉ(ํต์ฌ ํ๋ฆ, ํต์ฌ ๋ฐ์ดํฐ, ๋ฒ์ ๋ฑ)์ ํด๋น:
- ๋ฏธ๊ฒฐ ์ฌํญ์์ Generator๊ฐ ํฉ๋ฆฌ์ ๊ธฐ๋ณธ๊ฐ์ ์ ์ํ [์ถ์ ] โ Important (๊ธฐ๋ณธ๊ฐ์ด ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ์์ ๊ฐ๋ฅ, ๋ค๋ง PM ํ์ธ ํ์)
- ๊ทธ ์ธ [์ถ์ ] (Generator๊ฐ ๋
์์ ์ผ๋ก ์ฑ์ด ๋ด์ฉ, ๊ธฐ๋ณธ๊ฐ ์๋ ๋ฏธ๊ฒฐ) โ Critical
- [์ถ์ ]์ด ๊ทธ ์ธ ํญ๋ชฉ์ ํด๋น โ Important
- [์ถ์ ]์ ์ต์ Important. Nice-to-have๋ก ๋ด๋ฆฌ์ง ์๋๋ค
Phase 4: ์ง๋ฌธ ์์ฑ + ํ์
์ง๋ฌธ ๋ถ๋ฅ:
| ๋ฑ๊ธ | ๊ธฐ์ค | ์์ |
|---|
| Critical | ์ด ์ ๋ณด ์์ด๋ ๊ฐ๋ฐ ์์ ๋ถ๊ฐ | "์ญ์ ์ ๋ณต๊ตฌ ๊ฐ๋ฅํ๊ฐ์, ์์ ํ ์ฌ๋ผ์ง๋์?" |
| Important | ๊ฐ๋ฐ ๊ฐ๋ฅํ์ง๋ง ๋์ค์ ์ฌ์์
ํ์ | "๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด ์ด๋ป๊ฒ ๋๋์?" |
| Nice-to-have | ์์ด๋ v1์ ๊ฐ๋ฅ | "๋ค๊ตญ์ด ์ง์์ด ํ์ํ๊ฐ์?" |
์ง๋ฌธ ์์ฑ ๊ท์น:
- ๋น๊ธฐ์ ์ธ์ด๋ก ์์ฑ (๊ธฐํํ์ด ๋ตํ ์ ์์ด์ผ ํจ)
- ๊ฐ ์ง๋ฌธ์ ์ ํ์ํ์ง ํ ์ค ์ค๋ช
์ถ๊ฐ
- ์ง๋ฌธ์ด 15๊ฐ ์ด์์ด๋ฉด ์ฐ์ ์์ ์์ 10๊ฐ๋ง ํ์, ๋๋จธ์ง๋ "์ถ๊ฐ ์ง๋ฌธ" ์น์
์ผ๋ก
ํ์ ๊ธฐ์ค:
| ์กฐ๊ฑด | ํ์ |
|---|
| Critical 0๊ฐ | PASS โ ๊ฐ๋ฐ Ready |
| Critical 0๊ฐ + Important 5๊ฐ ์ด์ | PASS (๊ฒฝ๊ณ ) โ ๊ฐ๋ฐ ๊ฐ๋ฅํ์ง๋ง ์ฌ์์
๋ฆฌ์คํฌ |
| Critical 1๊ฐ ์ด์ | FAIL โ Critical ํด์ ํ ์ฌ๊ฒ์ฆ ํ์ |
Output ์์ฑ โ Write to specs/{feature-slug}-review.md:
# {๊ธฐ๋ฅ๋ช
} โ ๊ธฐํ์ ๋ฆฌ๋ทฐ
## ํ์ : PASS / FAIL
(FAIL์ธ ๊ฒฝ์ฐ) Critical N๊ฐ ํด์ ํ์
(PASS + ๊ฒฝ๊ณ ์ธ ๊ฒฝ์ฐ) ๊ฐ๋ฐ ๊ฐ๋ฅํ๋ Important N๊ฐ ์ฃผ์
## ์ปค๋ฒ๋ฆฌ์ง
| ์น์
| ์ํ | ๋น๊ณ |
|------|------|------|
| 1. ๋ฐฐ๊ฒฝ | ์ถฉ๋ถ | โ |
| ... | ... | ... |
## ๋๋ฝ ํญ๋ชฉ
### Critical (N๊ฐ)
1. **[ํญ๋ชฉ๋ช
]**: [์ง๋ฌธ]
- ์ ํ์ํ๊ฐ: [์ค๋ช
]
2. ...
### Important (N๊ฐ)
1. **[ํญ๋ชฉ๋ช
]**: [์ง๋ฌธ]
- ์ ํ์ํ๊ฐ: [์ค๋ช
]
2. ...
### Nice-to-have (N๊ฐ)
1. ...
## ๋ฐ๊ฒฌ๋ ์ฃ์ง ์ผ์ด์ค
- [์๋๋ฆฌ์ค ์ค๋ช
]: [์ ๋ฌธ์ ๊ฐ ๋๋๊ฐ]
- ...
## ์ํ ์ ์ด ๋นํ
- [ํ์ฌ์ํ] + [์ด๋ฒคํธ] โ ์ ์ ์ ๋จ
- ...
(์ํ ์ ์ด๊ฐ ํด๋นํ์ง ์์ผ๋ฉด ์ด ์น์
์๋ต)
## [์ถ์ ] ํญ๋ชฉ ๊ฒํ
- [์ถ์ ๋ด์ฉ]: [ํ์ธ ํ์ ์ฌ๋ถ]
- ...
(์ถ์ ํญ๋ชฉ์ด ์์ผ๋ฉด ์ด ์น์
์๋ต)
## [Context ๊ธฐ๋ฐ] ํญ๋ชฉ ๊ฒํ
| ํญ๋ชฉ | ์ฝ๋/๋ฌธ์ ๊ทผ๊ฑฐ | ์ ํฉ์ฑ | ๋ฑ๊ธ |
|------|--------------|--------|------|
| [๋ด์ฉ] | [์ถ์ฒ: codebase-summary.md์ ํด๋น ๋ถ๋ถ] | ์ผ์น/๋ถ์ผ์น/ํ์ธ ํ์ | Nice-to-have/Important/Critical |
(Context ๊ธฐ๋ฐ ํญ๋ชฉ์ด ์์ผ๋ฉด ์ด ์น์
์๋ต)
## ๋ฏธ๊ฒฐ ์ฌํญ ํํฉ
- [๋ฏธ๊ฒฐ ๋ด์ฉ]: [์ด๋ฒ ๋ฒ์์ ์ํฅ ์ฌ๋ถ] โ [Important / Nice-to-have]
- ...
(๋ฏธ๊ฒฐ ์ฌํญ์ด ์์ผ๋ฉด ์ด ์น์
์๋ต)
## ๊ถ์ฅ ์ฌํญ
1. ...
2. ...
slug ๊ท์น: ์๊ตฌ์ฌํญ/๊ธฐํ์ ํ์ผ์ slug์ ๋์ผ. ์๋ฌธ ์๋ฌธ์, ํ์ดํ ๊ตฌ๋ถ.
Tell the user the file path after writing.
์ถ๋ ฅ ํ ์๋ด:
PASS์ธ ๊ฒฝ์ฐ:
"๊ฐ๋ฐ Ready์
๋๋ค. ๊ธฐ์กด /interview๋ก ๊ฐ๋ฐ ์คํ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค."
FAIL์ธ ๊ฒฝ์ฐ:
"Critical N๊ฐ๋ฅผ ํด์ํ ํ ๋ค์ /spec-reviewer๋ฅผ ์คํํด์ฃผ์ธ์.
๊ธฐํํ์ ์ ๋ฌํ ์ง๋ฌธ ๋ชฉ๋ก์ด specs/{feature-slug}-review.md์ ์์ต๋๋ค."
์ฌ๊ฒ์ฆ(Re-review) ํ๋กํ ์ฝ:
FAIL ํ ์ฌ์คํ ์, ์ด์ ๋ฆฌ๋ทฐ ํ์ผ(specs/{feature-slug}-review.md)์ด ์กด์ฌํ๋ฉด:
- ์ด์ Critical/Important ํญ๋ชฉ ์ค ํด์๋ ํญ๋ชฉ๋ง ์ฌ๊ฒ์ฆํ๋ค
- ๋ณ๊ฒฝ๋ ์น์
์ด ์์ผ๋ฉด ํด๋น ์น์
์ ๋ํด์๋ง ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ค์ ์ ์ฉํ๋ค
- ๋ณ๊ฒฝ ์๋ ์น์
์ ์ด์ ํ์ ์ ์ ์งํ๋ค
- ์ ์ฒด ์ฌ๊ฒ์ฆ(full re-review)์ ํ์ํ์ง ์๋ค
Input ์ ํ๋ณ ์ฒ๋ฆฌ
| Input ์ ํ | ์ฒ๋ฆฌ ๋ฐฉ์ |
|---|
specs/{feature}-spec.md ์กด์ฌ | ์๋์ผ๋ก ์ฝ๊ณ ๊ฒ์ฆ |
| ๊ฐ์ ์ธ์
์์ spec-generator ์๋ฃ | ์ปจํ
์คํธ์์ ์ง์ ํ์ฉ |
| ์ฌ์ฉ์๊ฐ ๊ธฐ์กด ๊ธฐํ์ ์ ๊ณต (๋น๊ตฌ์กฐํ) | Phase 1์์ ํ
ํ๋ฆฟ ๋งคํ ํ ๊ฒ์ฆ |
| ์ฌ์ฉ์๊ฐ ํ์ผ ๊ฒฝ๋ก ์ ๊ณต | Read๋ก ํ์ผ ์ฝ๊ณ ๊ฒ์ฆ |
| Input ์์ด ์คํ | "์ด๋ค ๊ธฐํ์๋ฅผ ๋ฆฌ๋ทฐํ ๊น์?" ์ง๋ฌธ |
Common Mistakes
| Mistake | Fix |
|---|
| ๊ธฐ์ ์ฉ์ด๋ก ์ง๋ฌธ ์์ฑ | ๊ธฐํํ์ด ๋ตํ ์ ์๋ ๋น์ฆ๋์ค ์ธ์ด๋ก |
| ๋ชจ๋ ํญ๋ชฉ์ Critical๋ก ๋ถ๋ฅ | ๋ถ๋ฅ ๊ธฐ์ค ์๊ฒฉํ ์ ์ฉ โ Critical์ "๊ฐ๋ฐ ๋ถ๊ฐ"์ผ ๋๋ง |
| ๋๋ฉ์ธ ๋ถ์ ์์ด ์ฒดํฌ๋ฆฌ์คํธ๋ง ๊ธฐ๊ณ์ ์ ์ฉ | ๋๋ฉ์ธ ๋งฅ๋ฝ์ ์ดํดํ๊ณ ๊ตฌ์ฒด์ ์๋๋ฆฌ์ค๋ก ์ง๋ฌธ |
| ์ง๋ฌธ๋ง ๋์ดํ๊ณ "์ ํ์ํ์ง" ๋ฏธ์ค๋ช
| ๊ฐ ์ง๋ฌธ์ ํ์ ์ด์ ํ ์ค ์ถ๊ฐ |
| specs/ ์ธ ๊ฒฝ๋ก์ ์ ์ฅ | ํญ์ specs/{feature-slug}-review.md |
| "ํด๋น์์" ์น์
์ ์ง๋ฌธ ์์ฑ | ํด๋น์์์ผ๋ก ํ์ ํ ์น์
์ ๊ฒ์ฆ ๊ฑด๋๋ |
| [์ถ์ ] ํญ๋ชฉ์ ๋ฌด์ | [์ถ์ ]์ ์๋ Important ์ด์ ๋ถ๋ฅ |
Red Flags โ STOP and Reassess
- ๊ธฐํ์๋ฅผ ์ฝ์ง ์๊ณ ๋ฆฌ๋ทฐ ์์
- ์ฒดํฌ๋ฆฌ์คํธ 14๊ฐ๋ฅผ ๋ชจ๋ Critical๋ก ํ์
- ๊ธฐํ์์ ์๋ ๊ธฐ๋ฅ์ ์์๋ก ์ถ๊ฐํ์ฌ "๋๋ฝ"์ผ๋ก ํ์
- ๊ฐ๋ฐ ๊ตฌํ ๋ฐฉ์์ ๋ํด ์๊ฒฌ ์ ์ (๋ฆฌ๋ทฐ์ด๋ "๋ฌด์"์ ๋นํ์ ์ฐพ๋ ๊ฒ์ด์ง, "์ด๋ป๊ฒ"๋ฅผ ๋งํ์ง ์๋๋ค)
- ์ง๋ฌธ์ด 20๊ฐ ์ด์์ธ๋ฐ ์ค์ด์ง ์์
- PASS/FAIL ํ์ ์์ด ๋ฆฌ๋ทฐ ์ข
๋ฃ