Day 6: PRD μμ± & PR μ μΆ
PRD(Product Requirements Document) μ΄μμ ν
νλ¦Ώ κΈ°λ°μΌλ‘ μμ±νκ³ , νμ νμμ κ²μ¦ν λ€, GitHub PR μ μΆ κ³Όμ μ μλ΄νλ€.
μ©μ΄ μ 리
μ΄ μ€ν¬μμ μ¬μ©νλ ν΅μ¬ μ©μ΄:
| μ©μ΄ |
μ€λͺ
|
| PRD |
Product Requirements Document. "μ΄ νλ‘μ νΈκ° λ ν΄κ²°νκ³ , λ λ§λλμ§" μ 리ν λ¬Έμ |
| GitHub |
μ½λμ λ¬Έμλ₯Ό ν¨κ» κ΄λ¦¬νκ³ κ³΅μ νλ μ¨λΌμΈ μλΉμ€. Google Docsμ μ½λ λ²μ |
| GitHub ID |
GitHub μ¬μ΄νΈμμ λλ₯Ό μλ³νλ μ΄λ¦. νλ‘ν URLμ λ§μ§λ§ λΆλΆ (github.com/μ¬κΈ°) |
| Repository (Repo) |
νλ‘μ νΈ νμΌμ΄ λͺ¨μ¬μλ ν΄λ. Google Driveμ 곡μ ν΄λμ λΉμ· |
| λΈλμΉ(Branch) |
μλ³Έμ 건λλ¦¬μ§ μκ³ λ΄ μμ
곡κ°μ λ°λ‘ λ§λλ κ². "μ¬λ³ΈμΌλ‘ μ μ₯"κ³Ό λΉμ· |
| 컀λ°(Commit) |
λ³κ²½μ¬νμ μ μ₯νλ κ². Ctrl+Sμ Git λ²μ |
| Push |
λ΄ μ»΄ν¨ν°μ μ μ₯ν κ²μ μ¨λΌμΈ(GitHub)μ μ¬λ¦¬λ κ² |
| PR (Pull Request) |
"λ΄ μμ
μ νμΈν΄μ£ΌμΈμ"λΌκ³ μ΄μμ§μκ² λ³΄λ΄λ κ²ν μμ². μ μΆ λ²νΌκ³Ό κ°λ€ |
| gh CLI |
ν°λ―Έλμμ GitHubμ μ‘°μν μ μλ λꡬ |
μ¬μ μꡬμ¬ν
μ΄ μ€ν¬μ μλ νκ²½μ΄ κ°μΆ°μ Έ μλ€κ³ κ°μ νλ€. Step 0μμ μλ νμΈνλ€.
gitμ΄ μ€μΉλμ΄ μμ΄μΌ νλ€
gh CLIκ° μ€μΉλκ³ μΈμ¦λμ΄ μμ΄μΌ νλ€
- λμ repoκ° clone λμ΄ μμ΄μΌ νλ€
- repoμ push κΆν(collaborator)μ΄ μμ΄μΌ νλ€
μμ μκ° κ°μ΄λ
| Step |
μ£Όμ |
μμ μκ° |
| 0 |
νκ²½ μ²΄ν¬ |
~1λΆ |
| 1 |
GitHub ID νμΈ |
~1λΆ |
| 2 |
PRD μμ± + κ²μ¦ |
~10λΆ |
| 3 |
μ μΆ (git + PR) |
~3λΆ |
| ν©κ³ |
|
~15λΆ |
νκ²½μ΄ μΈν
λμ΄ μμΌλ©΄ 15λΆ λ΄ μλ£ κ°λ₯. νκ²½ λ¬Έμ λ°μ μ +5~10λΆ.
PRD ν
νλ¦Ώ
# [νλ‘μ νΈ μ λͺ©]
## λ¬Έμ
> ν μ€: λꡬμ, μ΄λ€ λΆνΈμ, μ΄λ»κ² ν΄κ²°νλκ°
- **νμ¬ μν**: (ꡬ체μ μμΉ β λͺ 건, λͺ λΆ, λͺ λͺ
)
- **μνλ μν**: (1μ£Ό ν λμκ°κ³ μμ λͺ¨μ΅)
- **μ±κ³΅ κΈ°μ€**: (μ«μλ‘ νλ¨ κ°λ₯ν κ² 1~2κ°)
## μ€ν¬
|---|--------|-----------|------|
| 1 | `/my-skill-1` | μ
λ ₯ β μΆλ ₯ | β
λμ / π¨ μ§νμ€ |
| 2 | `/my-skill-2` | μ
λ ₯ β μΆλ ₯ | β
λμ / π¨ μ§νμ€ |
## λ³ν κΈ°λ‘
- **Day 1**: "μ²μ μ μ" β
- **Day 6**: "μ§κΈ μ μ" β
- **κ°μ₯ ν¬κ² λ¬λΌμ§ μ **:
μ€ν νλ¦
Step 0 Step 1 Step 2 Step 3
νκ²½ μ²΄ν¬ β GitHub ID νμΈ β PRD μμ±/κ²μ¦ β μ μΆ (git + PR)
Step 0: νκ²½ μ¬μ 체ν¬
μ€ν¬ μμ μ μ§ν μ μ μλλ₯Ό μλμΌλ‘ νμΈνλ€:
git --version
gh --version
gh auth status
git remote -v
κ²°κ³Όλ₯Ό μ°Έκ°μμκ² λ³΄μ¬μ€λ€:
=== νκ²½ μ²΄ν¬ ===
β
git: μ€μΉλ¨
β
gh CLI: μ€μΉλ¨
β
GitHub λ‘κ·ΈμΈ: μλ£ (μ¬μ©μ: {detected-id})
β
νλ‘μ νΈ ν΄λ: μ°κ²°λ¨ ({repo-url})
νκ²½ μ€λΉκ° μλ£λμμ΅λλ€!
νλλΌλ μ€ν¨νλ©΄ ν΄λΉ νλͺ©μ ν΄κ²° λ°©λ²μ μλ΄νκ³ , ν΄κ²° ν λ€μ 체ν¬νλ€. λͺ¨λ νλͺ©μ΄ ν΅κ³Όν λκΉμ§ λ€μ StepμΌλ‘ μ§ννμ§ μλλ€.
| μ€ν¨ νλͺ© |
μλ΄ |
| git λ―Έμ€μΉ |
"gitμ΄ μ€μΉλμ΄μμ§ μμ΅λλ€. μ΄μμ§μκ² λμμ μμ²ν΄μ£ΌμΈμ." |
| gh CLI λ―Έμ€μΉ |
"brew install ghλ₯Ό ν°λ―Έλμ μ
λ ₯ν΄μ£ΌμΈμ." (macOS κΈ°μ€). μ€ν¨ μ μ΄μμ§ νΈμΆ |
| gh λ―ΈμΈμ¦ |
"gh auth loginμ μ
λ ₯νκ³ λμ€λ μλ΄λ₯Ό λ°λΌμ£ΌμΈμ. GitHub κ³μ μΌλ‘ λ‘κ·ΈμΈνλ©΄ λ©λλ€." |
| repo μ°κ²° μ λ¨ |
"νλ‘μ νΈλ₯Ό μμ§ λ΄ μ»΄ν¨ν°μ λ€μ΄λ‘λνμ§ μμμ΄μ. ν°λ―Έλμμ μλλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ: gh repo clone {owner/repo}" |
Step 1: GitHub ID νμΈ
Step 0μμ gh auth statusλ‘ κ°μ§λ GitHub IDλ₯Ό 보μ¬μ£Όκ³ νμΈλ§ λ°λλ€:
AskUserQuestion: "GitHub μ¬μ©μλͺ
μ΄ '{detected-id}'κ° λ§λμ?"
- λ€, λ§μ΅λλ€
- μλμ, λ€λ₯Έ IDμ
λλ€ (μ§μ μ
λ ₯)
ID νμ κ²μ¦: μ
λ ₯λ IDκ° μλ¬Έ, μ«μ, νμ΄ν(-)λ§ ν¬ν¨νλμ§ νμΈνλ€. νΉμλ¬Έμ, 곡백, μ¬λμ λ±μ΄ ν¬ν¨λλ©΄ μλ΄ ν λ€μ μ
λ ₯λ°λλ€.
μ
λ ₯λ IDλ μλ¬Έμλ‘ μ κ·ννλ€.
μ΄ IDλ μ΄ν νμΌ κ²½λ‘μ λΈλμΉλͺ
μ μ¬μ©λλ€:
- νμΌ:
{github-id}/PRD.md
- λΈλμΉ:
prd/{github-id}
Step 2: PRD μμ± λλ κ²μ¦
AskUserQuestionμΌλ‘ νμ¬ μνλ₯Ό 묻λλ€:
| μ νμ§ |
λμ |
| PRD μλ‘ μμ±νκΈ° |
Step 2-A: ν
νλ¦Ώ κΈ°λ° μμ± κ°μ΄λ |
| μ΄λ―Έ μμ±ν PRD κ²μ¦νκΈ° |
Step 2-B: κΈ°μ‘΄ νμΌ κ²μ¦ |
Step 2-A: PRD μμ± κ°μ΄λ
- μ PRD ν
νλ¦Ώμ 보μ¬μ€λ€
- AskUserQuestionμΌλ‘ νλ‘μ νΈ μ£Όμ λ₯Ό 묻λλ€:
"μ΄λ€ νλ‘μ νΈμ PRDλ₯Ό μμ±ν κΉμ?"
- μΊ νμμ λ§λ μ€ν¬ κΈ°λ° (μ΄λ² μ£Όμ λ§λ μ€ν¬μ νλ‘μ νΈλ‘ λ°μ )
- μ
무 μλν μμ΄λμ΄ (μ€μ μ
무μμ μλννκ³ μΆμ κ²)
- μ§μ μ
λ ₯
"μΊ νμμ λ§λ μ€ν¬ κΈ°λ°"μ μ ννλ©΄, .claude/skills/ λλ ν 리λ₯Ό μ€μΊνμ¬ μ°Έκ°μκ° λ§λ μ€ν¬ λͺ©λ‘μ 보μ¬μ£Όκ³ μ ννκ² νλ€.
-
μ°Έκ°μμ λ΅λ³μ λ°νμΌλ‘ PRD μ΄μμ μμ±νλ€
-
μ΄μμ ν°λ―Έλμ μΆλ ₯νκ³ AskUserQuestion:
| μ νμ§ |
λμ |
| μ΄λλ‘ μ§ν |
{github-id}/PRD.mdμ μ μ₯ ν Step 2-Bλ‘ |
| μμ νκ³ μΆμ΄μ |
μ΄λ€ λΆλΆμ μμ ν μ§ λ¬»κ³ (λ¬Έμ μ μ / μ€ν¬ λͺ©λ‘ / λ³ν κΈ°λ‘) λ°μ ν λ€μ μΆλ ₯ |
- μ€μ: PRD λ΄μ©μ μ°Έκ°μμ μ€μ κ²½νκ³Ό νλ‘μ νΈλ₯Ό λ°μν΄μΌ νλ€. μΌλ°μ μΈ μμκ° μλ μΊ νμμ λ§λ μ€ν¬, μ€μ μ
무 λ¬Έμ λ₯Ό λ΄λλ‘ μ λνλ€.
Step 2-B: PRD νμ κ²μ¦
{github-id}/PRD.md νμΌμ μ½κ³ μλ 체ν¬λ¦¬μ€νΈλ‘ κ²μ¦νλ€.
κ²μ¦ 체ν¬λ¦¬μ€νΈ
| # |
νλͺ© |
κ²μ¦ λ°©λ² |
νμ |
| 1 |
νλ‘μ νΈ μ λͺ© |
#μΌλ‘ μμνλ 첫 λ²μ§Έ μ€ (ν° μ λͺ©)μ΄ μ‘΄μ¬νλκ° |
νμ |
| 2 |
λ¬Έμ μΉμ
|
## λ¬Έμ ν€λ©μ΄ μ‘΄μ¬νλκ° |
νμ |
| 3 |
νμ¬ μν |
νμ¬ μν ν
μ€νΈκ° μ‘΄μ¬νκ³ 10μ μ΄μμΈκ° |
νμ |
| 4 |
μνλ μν |
μνλ μν ν
μ€νΈκ° μ‘΄μ¬νκ³ 10μ μ΄μμΈκ° |
νμ |
| 5 |
μ±κ³΅ κΈ°μ€ |
μ±κ³΅ κΈ°μ€ ν
μ€νΈκ° μ‘΄μ¬νκ³ 10μ μ΄μμΈκ° |
νμ |
| 6 |
μ€ν¬ μΉμ
|
## μ€ν¬ ν€λ©μ΄ μ‘΄μ¬νλκ° |
νμ |
| 7 |
μ€ν¬ 2κ° μ΄μ |
μ€ν¬ ν
μ΄λΈμμ ` |
1 |
| 8 |
λ³ν κΈ°λ‘ |
## λ³ν κΈ°λ‘ ν€λ©μ΄ μ‘΄μ¬νλκ° |
νμ |
κ²μ¦ κ²°κ³Ό μΆλ ₯
=== PRD νμ κ²μ¦ κ²°κ³Ό ===
[PASS] λλ [보μ νμ]
β
νλ‘μ νΈ μ λͺ©: μμ
β
λ¬Έμ μΉμ
: μμ
β
νμ¬ μν: μμ
β
μνλ μν: μμ
β
μ±κ³΅ κΈ°μ€: μμ
β
μ€ν¬ μΉμ
: μμ
β
μ€ν¬ 2κ° μ΄μ: μμ (Nκ°)
β
λ³ν κΈ°λ‘: μμ
κ²°κ³Ό: 8/8 ν΅κ³Ό β PASS
보μ νμμΈ κ²½μ° λλ½λ νλͺ©μ ꡬ체μ μΌλ‘ μλ΄νλ€:
β μ±κ³΅ κΈ°μ€: λ΄μ©μ΄ λ무 μ§§μ΅λλ€. ꡬ체μ μΈ μ«μλ₯Ό ν¬ν¨ν΄μ£ΌμΈμ.
μ) "μ£Ό 3ν μ¬μ©, κ±΄λΉ μ²λ¦¬ μκ° 30λΆ β 5λΆ"
Step 3: μ μΆ (git + PR)
κ²μ¦ PASS ν, AskUserQuestion:
"PRD κ²μ¦μ ν΅κ³Όνμ΅λλ€! GitHubμ μ μΆν κΉμ?"
- λ€, μ μΆν΄μ£ΌμΈμ (κΆμ₯)
- λμ€μ ν κ²μ
"λμ€μ ν κ²μ" μ ν μ: "μ€λΉλλ©΄ λ€μ μ΄ μ€ν¬μ μ€νν΄μ£ΌμΈμ." μλ΄ ν μ’
λ£.
"λ€, μ μΆν΄μ£ΌμΈμ" μ ν μ μλλ₯Ό μ€ννλ€. κ° λ¨κ³λ§λ€ νκΈ μ§ν μνλ₯Ό μΆλ ₯νλ€:
[1/5] μ΅μ μνλ‘ λκΈ°ννλ μ€...
git checkout main && git pull origin main
[2/5] μ μΆμ© 곡κ°μ λ§λλ μ€...
git checkout -b prd/{github-id}
λΈλμΉκ° μ΄λ―Έ μ‘΄μ¬νλ©΄ git checkout prd/{github-id}λ‘ μ ννλ€.
[3/5] PRD νμΌμ λ±λ‘νλ μ€...
git add {github-id}/PRD.md
git statusλ‘ μ€ν
μ΄μ§λ νμΌμ΄ {github-id}/PRD.md 1κ°λΏμΈμ§ νμΈνλ€. λ€λ₯Έ νμΌμ΄ ν¬ν¨λλ©΄ ν΄λΉ νμΌμ unstageνλ€.
[4/5] μ μ₯νλ μ€...
git commit -m "feat: {github-id} PRD μ΄μ μ μΆ"
[5/5] GitHubμ μ¬λ¦¬λ μ€...
git push origin prd/{github-id}
push μλ£ ν, gh CLIλ‘ PRμ μμ±νλ€:
gh pr create --repo {owner/repo} --title "PRD: {github-id}" --body "$(cat <<'EOF'
## PRD μ΄μ μ μΆ
- μμ±μ: {github-id}
- νμΌ: {github-id}/PRD.md
κ²μ¦ κ²°κ³Ό: PASS (8/8)
EOF
)"
PR URLμ μΆλ ₯νκ³ μλ£λ₯Ό μλ΄νλ€.
μλ£ λ¦¬ν¬νΈ
=== Day 6 PRD μ μΆ μλ£ ===
GitHub ID: {github-id}
νμΌ: {github-id}/PRD.md
λΈλμΉ: prd/{github-id}
κ²μ¦: PASS (8/8)
PR: {PR URL}
μΆνν©λλ€! GitHubμ 첫 PRμ μ¬λ Έμ΅λλ€.
μ΄μμ§μ΄ νμΈ ν μΉμΈν μμ μ
λλ€.
μλ¬ μ²λ¦¬
| μν© |
λμ |
| git λ―Έμ€μΉ |
"gitμ΄ μ€μΉλμ΄μμ§ μμ΅λλ€. μ΄μμ§μκ² λμμ μμ²ν΄μ£ΌμΈμ." |
| gh CLI λ―Έμ€μΉ |
"brew install ghλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ." μ€ν¨ μ μ΄μμ§ νΈμΆ μλ΄ |
| gh λ―ΈμΈμ¦ |
"gh auth loginμ μ
λ ₯νκ³ GitHub κ³μ μΌλ‘ λ‘κ·ΈμΈν΄μ£ΌμΈμ." |
| PRD.md νμΌ μμ |
"PRD νμΌμ΄ μμ§ μμ΄μ. λ¨Όμ μμ±ν κΉμ?" |
| κ²μ¦ 보μ νμ |
λλ½ νλͺ© + ꡬ체μ μμ μλ΄ + μμ λμ |
| git λΈλμΉ μ΄λ―Έ μ‘΄μ¬ |
κΈ°μ‘΄ λΈλμΉλ‘ μλ μ ν |
| push μ€ν¨ (μΈμ¦) |
"GitHub λ‘κ·ΈμΈμ΄ νμν©λλ€. gh auth loginμ μ€νν΄μ£ΌμΈμ." |
| push μ€ν¨ (κΆν) |
"μ΄ νλ‘μ νΈμ μ μΆ κΆνμ΄ μμ΄μ. Slackμμ μ΄μμ§(@zoon)μκ² 'κΆνμ΄ νμν©λλ€'λΌκ³ λ©μμ§λ₯Ό 보λ΄μ£ΌμΈμ." |
| repo clone μ λ¨ |
"νλ‘μ νΈλ₯Ό λ¨Όμ λ€μ΄λ‘λν΄μΌ ν΄μ. ν°λ―Έλμ gh repo clone {owner/repo}λ₯Ό μ
λ ₯ν΄μ£ΌμΈμ." |
| GitHub ID νμ μ€λ₯ |
"GitHub IDμλ μλ¬Έ, μ«μ, νμ΄ν(-)λ§ μ¬μ©ν μ μμ΄μ." |
μΆλ ₯ μμΉ
| κ²½λ‘ |
λ΄μ© |
{github-id}/PRD.md |
μ°Έκ°μ PRD λ¬Έμ |