| name | pjc-systematic-debugging |
| description | Use whenever the user reports a bug, test/build failure, runtime error, exception, crash, unexpected behavior, performance regression, memory leak, race condition, deadlock, or CI/CD issue. Triggers on Korean (๋ฒ๊ทธ/์๋ฌ/์ค๋ฅ/์์ธ/ํฌ๋์/์ ๋จ/๋์ ์ ํจ/์ด์ํด/์ ์ด๋/์ ์ ๋ผ/์ด์ํ ํ์/ํ
์คํธ ์คํจ/๋น๋ ์คํจ/์ฌํ/๋๋ฒ๊น
) and English (bug/fix/debug/error/exception/crash/fails/broken/regression). Root cause investigation is mandatory before any patch. If the compiler/stack trace pinpoints the cause (fileยทlineยทreason) and the fix is a small single-file change, use the lightweight path, not a skip. Not for non-bug "fix" requests (reformatting/renaming โ trivial edits, not debugging). Skip ONLY when the user explicitly asks to apply a fix they already diagnosed ("๊ทธ๋ฅ ์ด ํ ์ค๋ง ์์ ํด์ค, ์์ธ ๋ค ์๋ค"). pjc/DDD-integrated variant (regression-test-first fix, spec-compliance review, cross-project llm-wiki lookup); prefer over generic systematic-debugging in pjc projects. |
| argument-hint | <๋ฒ๊ทธ ๋๋ ์๋ฌ ์ค๋ช
> |
Systematic Debugging
์ฆ์ ์ถ์ธก์ด ์๋ ๊ทผ๋ณธ ์์ธ ์กฐ์ฌ๋ฅผ ๊ฐ์ ํ๋ 4๋จ๊ณ ๋๋ฒ๊น
๋ฐฉ๋ฒ๋ก .
Superpowers systematic-debugging skill์ 4-phase ๋ฐฉ๋ฒ๋ก ์ ํ๊ธยทDDD ์ปจ๋ฒค์
๊ณผ ํตํฉ.
Iron Law (์ ๋ ์์น)
๊ทผ๋ณธ ์์ธ์ ์ฐพ๊ธฐ ์ ์๋ ์ด๋ค ์์ ๋ ์๋ํ์ง ์๋๋ค.
์ฆ์ ์์ (symptom patch)์ ์คํจ๋ค.
95%์ "๊ทผ๋ณธ ์์ธ ์์" ์ฌ๋ก๋ ๋ถ์ถฉ๋ถํ ์กฐ์ฌ์ ๊ฒฐ๊ณผ๋ค.
์ด ์์น์ ์ด๊ธฐ๋ ๊ฒ์ ๋๋ฒ๊น
์ ์ ์ ์ ์๋ฐํ๋ ๊ฒ์ด๋ค.
์ถ์ธก์ผ๋ก ์์ธ์ ์ ํ ์ฑ Phase 4(์์ )๋ก ๊ฑด๋๋ฐ์ง ์๋๋ค โ ์์ธ์ ์ฆ๊ฑฐ๋ก ํ์ ๋ผ์ผ ํ๋ค(์๋ "๊ฒฝ๋ ๊ฒฝ๋ก"๋ ์ด ์์น์ ์์ธ๊ฐ ์๋๋ผ, ์ปดํ์ผ๋ฌยท์คํํธ๋ ์ด์ค๊ฐ ์ด๋ฏธ ์์ธ์ ํ์ ํด ์ค ๊ฒฝ์ฐ๋ผ ์กฐ์ฌ๊ฐ ์๋ช
ํ๊ฒ ๋๋ ๊ฒ์ด๋ค).
๊ฒฝ๋ ๊ฒฝ๋ก (์์ธ์ด ์ด๋ฏธ ํ์ ๋ ๊ฒฝ์ฐ)
Iron Law์ ๋ชฉ์ ์ "์กฐ์ฌ ์์ด ์ถ์ธก์ผ๋ก ๊ณ ์น๋ ๊ฒ"์ ๋ง๋ ๊ฒ์ด๋ค โ ์กฐ์ฌ๊ฐ ์ด๋ฏธ ์๋ช
ํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊น์ง ์ ์ฒด 4๋จ๊ณ๋ฅผ ๊ฐ์ ํ๋ ค๋ ๊ฒ ์๋๋ค. ๋ค์์ ๋ชจ๋ ๋ง์กฑํ๋ฉด ์ถ์ฝ ๊ฒฝ๋ก๋ฅผ ์ด๋ค:
- ์ปดํ์ผ๋ฌ/์คํํธ๋ ์ด์ค๊ฐ ์์ธ์ ํน์ ํ๋ค โ ํ์ผยท๋ผ์ธยท์์ธ์ด ๋ฉ์์ง์ ๊ทธ๋๋ก ๋๋ฌ๋จ(์: "CS0103: 'foo' ์์", NullReferenceException at File.cs:42์ ๋ช
๋ฐฑํ ๋ฏธ์ด๊ธฐํ). ์ถ์ธก์ด ์๋๋ผ ๋๊ตฌ๊ฐ ์์ธ์ ์ง์ด ์ค ๊ฒฝ์ฐ.
- ์์ ์ด ๋จ์ผ ํ์ผยท์๊ท๋ชจ๋ค(๋ค์ค ํ์ผ ํ๊ธยท์ค๊ณ ๋ณ๊ฒฝ ์์).
์ด๋ **1-A(์๋ฌยท์คํ ์ ๋
์ผ๋ก ์์ธ ํ์ธ) + Phase 4(ํ๊ท ํ
์คํธยท์ต์ ์์ ยท๊ฒ์ฆ)**๋ก ์ถ์ฝํ๋ค(Phase 1-B~1-Dยท2ยท3 ์๋ต โ ์์ธ์ด ์ด๋ฏธ ํ์ ์ด๋ผ ๊ฐ์ค ๋์ดยท๊ฒ์ฆ์ด ๋ถํ์). ์ถ์ฝ ๊ฒฝ๋ก๋ฅผ ์ฐ๋ฉด ๋ณด๊ณ ์ "๊ฒฝ๋ ๊ฒฝ๋ก"๋ฅผ ๋ช
์ํ๋ค(์ด๋ค ๋จ๊ณ๋ฅผ ์ ์๋ตํ๋์ง ๋๋ฌ๋๊ฒ). ์กฐ๊ฑด์ ํ๋๋ผ๋ ๋ชป ์ฑ์ฐ๋ฉด(์์ธ ๋ถ๋ช
ํยท๋ค์ค ํ์ผยท๋ฏธ์คํฐ๋ฆฌ) ํ์ค 4๋จ๊ณ ์ ์ฒด๋ฅผ ๋ฐ๋ฅธ๋ค.
๊ฒฝ๋ ๊ฒฝ๋ก ์ค ์น๊ฒฉ: ๊ฒฝ๋ ๊ฒฝ๋ก๋ก ์์ํ๋๋ผ๋ ์์ ์ค ๋ค์ค ํ์ผ ํ๊ธ์ด ๋๋ฌ๋๊ฑฐ๋ ์์ธ์ด ์ฒ์ ํ๋จ๊ณผ ๋ถ์ผ์นํ๋ฉด(์ปดํ์ผ๋ฌ๊ฐ ์ง์ ๊ฒ์ด ์ง์ง ์์ธ์ด ์๋์์), ์ฆ์ ํ์ค ๊ฒฝ๋ก(Phase 1 ์ ์ฒด + 2ยท3)๋ก ์น๊ฒฉํ๋ค โ ๊ฒฝ๋ ๊ฒฝ๋ก๋ ์์ธ ํ์ ์ด ์ ์ ์ด๋ฏ๋ก, ์ ์ ๊ฐ ๊นจ์ง๋ฉด ์ถ์ฝ์ ์ ์งํ์ง ์๋๋ค.
Phase 1 โ ๊ทผ๋ณธ ์์ธ ์กฐ์ฌ (Root Cause Investigation)
Phase 1 ์๋ฃ ์ ์๋ ์ ๋ ์์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค.
1-A. ์๋ฌ ๋ฉ์์งยท์คํํธ๋ ์ด์ค ์ ๋
- ์๋ฌ ๋ฉ์์ง๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ๋๋ค. ์ฒซ ์ค๋ง ๋ณด๊ณ ์ถ์ธก ๊ธ์ง.
- ์คํํธ๋ ์ด์ค์ ์ตํ๋จ(๊ฐ์ฅ ๊น์ ํธ์ถ)๋ถํฐ ๋ถ์.
- ์์ธ ์ฒด์ธ(
InnerException, aggregate)์ ๋ชจ๋ ํผ์น๋ค.
- ๋ฉ์์ง์ ๋ชจ๋ ์๋ณ์(ํ์ผ๋ช
, ํด๋์ค๋ช
, ๋ผ์ธ ๋ฒํธ)๋ฅผ ์ฝ๋์์ ํ์ธ.
1-B. ์ฌํ (Reproduction)
- ์ ๋ขฐ์ฑ ์๊ฒ ์ฌํ ๊ฐ๋ฅํ ์ ์ฐจ๋ฅผ ํ๋ณด. ์ฐ๋ฐ์ ์ด๋ฉด ๋น๋ ์ธก์ .
- ์ต์ ์ฌํ ์ผ์ด์ค(minimal repro)๋ก ์ขํ๋ค.
- ์ฌํ ์ ์ฐจ๋ฅผ
repro.md ๋๋ plan.md์ Investigation Log์ ๊ธฐ๋ก.
์ฌํ ๋ถ๊ฐ๋ฅํ๋ค๋ฉด:
- ํ๊ฒฝ ์ฐจ์ด (OS, .NET ๋ฒ์ , ์๊ฐ๋, ๋ก์ผ์ผ, ๊ถํ)
- ํ์ด๋ฐ ์์กด (race condition, ๋ถํ
์งํ๋ง, ์ฒซ ์คํ๋ง)
- ๋ฐ์ดํฐ ์์กด (ํน์ ์
๋ ฅ๋ง)
- ์ธ๋ถ ์์คํ
์ํ (DB row, ๋คํธ์ํฌ ์ํ)
์ ๊ฐ์ค ๊ฐ๊ฐ์ ๋ํด ๊ฒ์ฆ.
1-C. ์ต๊ทผ ๋ณ๊ฒฝ ๊ฒ์ฌ
git log --oneline -20
git diff HEAD~N..HEAD -- <์์ฌ ํ์ผ>
git log --since="N hours ago"
git blame <๋ฌธ์ ์ ๋ผ์ธ>
๊ฒ์ฌ ๋์:
- ์ต๊ทผ ์ปค๋ฐ
- ์ค์ ํ์ผ ๋ณ๊ฒฝ (
appsettings.json, .env, csproj, package.json)
- ์์กด์ฑ ๋ฒ์ ๋ณ๊ฒฝ (
packages.lock.json, pnpm-lock.yaml)
- ํ๊ฒฝ ๋ณ์ ๋ณ๊ฒฝ
- ๋น๋ ํ์ดํ๋ผ์ธ ๋ณ๊ฒฝ
1-D. ์ปดํฌ๋ํธ ๊ฒฝ๊ณ ์ฆ๊ฑฐ ์์ง (Cross-Component Evidence)
๋ฌธ์ ๊ฐ ์ด๋ ๋ ์ด์ด์์ ๋ฐ์ํ๋์ง๋ฅผ ๋จผ์ ์๋ณํ๋ค.
๋ฌด์์ด ๋ฌธ์ ์ธ์ง ์ถ์ธกํ์ง ๋ง๊ณ ์ด๋๊ฐ ๋ฌธ์ ์ธ์ง๋ถํฐ ํ์ธ.
๊ฐ ์ปดํฌ๋ํธ ๊ฒฝ๊ณ์์:
- ๋ค์ด์ค๋ ๋ฐ์ดํฐ ๋ก๊น
- ๋๊ฐ๋ ๋ฐ์ดํฐ ๋ก๊น
- ํ๊ฒฝ/์ค์ ๊ฐ ํ์ธ
- ๊ฐ ๋ ์ด์ด์ ์ํ ํ์ธ
์: WinUI 3 ์ฑ์์ "๋ฐ์ดํฐ๊ฐ ํ๋ฉด์ ์ ๋ณด์" ๋ฌธ์
_logger.LogInformation("[Repo] Fetched count={Count}", items.Count);
_logger.LogInformation("[Domain] After filter count={Count}", filtered.Count);
_logger.LogInformation("[VM] Items.Count={Count}", Items.Count);
์ด๋ฅผ ํตํด ์ด๋ ๋ ์ด์ด๊ฐ ์คํจํ๋์ง ๋๋ฌ๋๋ค (์: Repo โ โ Domain โ โ VM โ โ ๋ฐ์ธ๋ฉ ๋ฌธ์ ).
๋จผ์ ์ฆ๊ฑฐ๋ฅผ ๋ชจ์ผ๊ณ , ๊ทธ ๋ค์์ ๋ถ์ํ๋ค.
Phase 1 ํต๊ณผ ์กฐ๊ฑด
๋ค์์ ๋ชจ๋ ๋ตํ ์ ์์ด์ผ Phase 2๋ก ๋์ด๊ฐ ์ ์๋ค:
Phase 2 โ ํจํด ๋ถ์ (Pattern Analysis)
๊ฒฉ๋ฆฌ๋ ์คํจ ์ง์ ์ ๋ ํฐ ํจํด ์์์ ๋ณธ๋ค.
2-A. ์ ์ฌ ์ฌ๋ก ๊ฒ์
- ๊ฐ์ ์๋ฌ ๋ฉ์์ง๊ฐ ์ฝ๋๋ฒ ์ด์ค ๋ค๋ฅธ ๊ณณ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋๊ฐ?
- ๋์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/API๋ฅผ ์ฐ๋ ๋ค๋ฅธ ๋ชจ๋์ ์ ์ ๋์ํ๋๊ฐ? (์ฐจ์ด๊ฐ ๋จ์)
- git log์์ ๋น์ทํ ์์ ์ด๋ ฅ์ด ์๋๊ฐ?
- ์ํค ์ฐธ์กฐ โ ๊ต์ฐจ ํ๋ก์ ํธ ๊ฒ์ (llm-wiki ์ฌ์ฉ ์ค + vault ์กด์ฌ ์):
pjc:llm-wiki ์ ์ฐจ K(read-only)๋ก ๊ฐ์ ์ฆ์ยท์๋ฌ๋ฅผ ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์ด๋ฏธ ํด๊ฒฐํ๋์ง ์ฐพ๋๋ค โ 30_knowledge/patterns/(์น๊ฒฉ๋ ๊ต์ฐจ ๊ตํ) ์ฐ์ , ์์ผ๋ฉด ์๋ฌ ๋ฉ์์งยท์ฆ์ ํค์๋๋ก grep(ํ/์ยท๋์์ด ์์ชฝ ์๋ โ ์ํค๋ ํ๊ธ์ด๋ผ ์๋ฌธ ์๋ฌ๊ฐ ํ๊ธ๋ก ์ค๋ช
๋์ ์ ์์). ๊ฒ์ ๋ฐฉ๋ฒ๋ก (grep ๋งค์น ํ์ด์ง๋ง Readยท๋ฌด๋งค์นญ ํต๊ณผยท์ ์ฒด ์ ๋
๊ธ์ง)์ ์ ์ฐจ K ์ ๋ณธ. ์ฐธ์กฐ๋ ํ์ฌ ํ๋ก์ ํธ ๋ฑ๋ก๊ณผ ๋ฌด๊ด(๋ค๋ฅธ ํ๋ก์ ํธ ์๋ฃ ์ฝ๊ธฐ ๊ฐ๋ฅ). ๋ฐ๊ฒฌ ์ ์์ธยทํด๊ฒฐ์ฑ
์ ๊ฐ์ค์ ๋ฐ์ํ๋ ๊ทธ๋๋ก ๋ณต์ฌ ๋ง๊ณ ์ด ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ฌ๊ตฌํํ๋ค(๋งฅ๋ฝ ์์ด). deprecated(ํ๊ธฐ) ํ์ feature/ํจํด์ ์ ๊ฑฐ๋ ๊ธฐ๋ฅ์ด๋ผ ํ์ฌ ๋ฒ๊ทธ ํด๊ฒฐ ๊ทผ๊ฑฐ๋ก ์ผ์ง ์๋๋ค(๊ณผ๊ฑฐ ๋งฅ๋ฝ ์ฐธ๊ณ ๋ง). ์ํค๋ ์ฝ๊ธฐ๋ง(vault ์์ผ๋ฉด ๊ฑด๋๋).
- ๋
๋ฆฝ ์กฐ์ฌ ๋ณ๋ ฌํ (explorer ํฌ์์ โ ์ฝ๋๋ฒ ์ด์ค ์กฐ์ฌ๋ง): ์ ์ฝ๋๋ฒ ์ด์ค ์ ์ฌ ์ฌ๋ก ์กฐ์ฌ(๊ฐ์ ์๋ฌ์ ํ ์์น ์ฒ๋ฆฌยท๋์ผ API๋ฅผ ์ฐ๋ ๋ค๋ฅธ ๋ชจ๋)๊ฐ ์๋ก ๋
๋ฆฝ์ธ locating 2๊ฑด ์ด์์ด๋ฉด
explorer subagent๋ฅผ ํ turn์ ๋ณ๋ ฌ ํธ์ถํด ํ๋ณด ์์น๋ฅผ ๋ชจ์๋ค(plan-feature Step 1์ ๋ณ๋ ฌ ์์๊ณผ ๋ํ โ read-only๋ผ ์ถฉ๋ ์๊ณ ๋๊ธฐ ์๊ฐ๋ง ์ค๋ค). ์์์ "์ด๋ ์๋"(locating)๊น์ง๋ค โ ๋ฐํ๋ ์์น๋ ํ๋ณด์ด๋ฉฐ, ์์ธ ํ์ ยท์ฝ๋ ํด์์ ๋ฉ์ธ์ด ์ง์ Readํด ํ์ธํ๋ค(์์ ํ์ง ๊ฒฝ๊ณ). ์ ์ํค ๊ต์ฐจ ๊ฒ์์ ์ด ํฌ์์ ๋์์ด ์๋๋ค โ ์ ์ฐจ K์ injection ๋ฐฉ์ด(์ํค ๋ณธ๋ฌธ์ ์คํ ์ง์๋ก ํด์ ๊ธ์ง)ยทํ๊ธฐ ํ์ ํ์ธยทdecisions.md ์ต์ ์ฑ ํ์ ์ ์ ํ๋ ์๊ณ๋ผ ๋ฉ์ธ์ด ์ง์ ์ํํ๋ค(๋ฐ์ท๋ง ์ฝ๋ haiku explorer์ ์์ํ๋ฉด ์ด ๋ฐฉ์ดยทํ์ ์ด ๋ญ๊ฐ์ง๋ค). ๋
๋ฆฝ ์กฐ์ฌ๊ฐ 1๊ฑด๋ฟ์ด๋ฉด ๋ณ๋ ฌ์ ๋ถํ์ํ๋ค(๋ฉ์ธ ์ง์ ๋๋ ๋จ์ผ ํธ์ถ).
2-B. ๊ฐ์ค ํ๋ณด ์์ฑ
์ฌ๋ฌ ๊ฐ์ค์ ๋์ดํ๊ณ ๊ฐ๊ฐ์ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ์ ์:
## Hypotheses
- H1: <๊ฐ์ค> โ ๊ฒ์ฆ: <์ด๋ป๊ฒ>
- H2: <๊ฐ์ค> โ ๊ฒ์ฆ: <์ด๋ป๊ฒ>
- H3: <๊ฐ์ค> โ ๊ฒ์ฆ: <์ด๋ป๊ฒ>
๊ฐ์ฅ ๊ทธ๋ด๋ฏํ ํ๋์๋ง ๋งค๋ชฐ๋์ง ์๋๋ค. Occam's razor๋ ์ข์ง๋ง, ๋น ๋ฅธ ๊ฒฐ๋ก ์ ๋๋ฒ๊น
์ ํจ์ .
- ๊ฐ์ค๋ณ ์ฆ๊ฑฐ ์์น ๋ณ๋ ฌ ์์ง (explorer ํฌ์์ โ locating๋ง): ๊ฐ์ค์ด 2๊ฐ ์ด์์ด๊ณ ๊ฐ ๊ฐ์ค์ ๊ด๋ จ ์ฝ๋ ์์น๋ฅผ ์ฐพ๋ ์กฐ์ฌ๊ฐ ์๋ก ๋
๋ฆฝ์ด๋ฉด, ๊ฐ์ค๋ณ๋ก
explorer subagent๋ฅผ ํ turn์ ๋ณ๋ ฌ ํธ์ถํด ์ฆ๊ฑฐ๊ฐ ์์ ํ๋ณด ์์น(๊ด๋ จ ์ฌ๋ณผยทํธ์ถ๋ถยท์ค์ )๋ฅผ ๋ชจ์๋ค(๋๊ธฐ ์๊ฐ๋ง ์ค์ด๋ locating). ๊ฐ์ค์ ๊ฒ์ฆยทํ์ ๊ณผ Phase 3-A์ ์ง๋จ ์คํ(์์ ๋ก๊ทธยท๋จ์ ํ
์คํธยทbreakpointยท๊ฒฉ๋ฆฌ ์คํฌ๋ฆฝํธ ์คํ)์ ์์ํ์ง ์๋๋ค โ explorer๋ read-only ๋ฐ์ท๋ผ ์ง๋จยทํ์ ์ ๋ถ์ ํฉํ๊ณ , ๋ถ์์ฉ ์๋ ์คํ์ ๋ฉ์ธ ๋ชซ์ด๋ค(์์ ๊ธ์ง ๊ฐ๋ โ Phase P-2/P-3์ ๋์ผ ์์น). ์์น ํ๋ณด๋ฅผ ๋ฐ์ ์ค์ ๊ฐ์ค ํ์ ์ ๋ฉ์ธ์ด Phase 3์์ ์ง์ ํ๋ค. ๋จ์ผ ์์ธ ํ์ ์์ธ(์๋ ํต๊ณผ ์กฐ๊ฑด)๋ก ๊ฐ์ค์ด 1๊ฐ๋ฉด ์ด ํฌ์์์ ๋ถํ์ํ๋ค.
Phase 2 ํต๊ณผ ์กฐ๊ฑด
๋จ์ผ ์์ธ ํ์ ์์ธ. ์ฆ๊ฑฐ(์คํํธ๋ ์ด์คยท๋ก๊ทธยท์ฌํ ๊ฒฐ๊ณผ)๊ฐ ๋จ์ผ ์์ธ์ ํ์ ์ ์ผ๋ก ์ง๋ชฉํ๋ฉด โ ์ฌ๋ฌ ๊ฐ์ค์ ๋์ดํ ํ์ ์์ด ๊ฐ์ค 1๊ฐ + ๊ทธ๊ฒ์ด ์์ธ์์ ํ์ ํ๋ ๊ทผ๊ฑฐ๋ก Phase 2๋ฅผ ํต๊ณผํ๋ค. "๊ฐ์ค 2๊ฐ ์ด์"์ ์์ธ์ด ๋ถ๋ช
ํํ ๋ ์กฐ๊ธฐ ๊ฒฐ๋ก ์ ๋ง๊ธฐ ์ํ ์ฅ์น์ด์ง, ์ฆ๊ฑฐ๊ฐ ์ด๋ฏธ ์์ธ์ ํ์ ํ ๊ฒฝ์ฐ๊น์ง ์ต์ง ๊ฐ์ค์ ๋ง๋ค๋ผ๋ ๋ป์ด ์๋๋ค. ๋จ "ํ์ "์ ์ฆ๊ฑฐ๋ก ๋ท๋ฐ์นจ๋ผ์ผ ํ๋ค โ "๊ทธ๋ด ๊ฒ ๊ฐ๋ค"๋ ํ์ ์ด ์๋๋ค(๊ทธ ๊ฒฝ์ฐ ๊ฐ์ค 2๊ฐ ์ด์ ์ ์ง).
Phase 3 โ ๊ฐ์ค ๊ฒ์ฆ (Hypothesis Testing)
๊ฐ ๊ฐ์ค์ ์ต์ ๋ณ๊ฒฝ์ผ๋ก ๊ฒ์ฆํ๋ค. ์์ ์ด ์๋๋ผ ์ง๋จ.
3-A. ์ง๋จ ์ฐ์
๊ฐ์ค ๊ฒ์ฆ์ ์ํ ์ฝ๋๋:
- ์์ ๋ก๊ทธ ์ถ๊ฐ
- ๋จ์ ํ
์คํธ ์์ฑ (๊ฐ์ค์ ํ์ ํ๋ ์ผ์ด์ค)
- breakpoint / DebuggerStepThrough
- ๊ฒฉ๋ฆฌ๋ ์์ ์คํฌ๋ฆฝํธ ์คํ
์์ง ์์ ์ฝ๋(fix)๋ฅผ ์์ฑํ์ง ์๋๋ค.
3-B. ๊ฒ์ฆ ๊ฒฐ๊ณผ ๊ธฐ๋ก
๊ฐ ๊ฐ์ค์ ๋ํด:
- โ
ํ์ (ํ์คํ ์์ธ)
- โ ๊ธฐ๊ฐ (์ด์ ๋ช
์)
- โ ๏ธ ๋ถ๋ถ ๊ธฐ์ฌ (๋ค๋ฅธ ์์ธ๊ณผ ํจ๊ป)
๊ฐ์ค์ด ๋ชจ๋ ๊ธฐ๊ฐ๋๋ฉด Phase 1๋ก ๋ณต๊ท. ์ฆ๊ฑฐ๊ฐ ๋ถ์กฑํ๋ค๋ ์ ํธ.
3-C. ์ง๋จ ์ฝ๋ ์ ๋ฆฌ
๊ฒ์ฆ์ ์ํด ์ถ๊ฐํ ์์ ๋ก๊ทธ/์ฝ๋๋:
- ์๊ตฌ ์ ์งํ ๊ฐ์น๊ฐ ์๋ ๊ฒ๋ง ๋จ๊ธด๋ค (defense-in-depth)
- ๋๋จธ์ง๋ ์ ๊ฑฐ (
git checkout)
Phase 3 ํต๊ณผ ์กฐ๊ฑด
Phase 4 โ ์์ ๊ตฌํ (Implementation)
Phase 1โ3์ ๋ชจ๋ ํต๊ณผํ ๋ค์๋ง ์ง์
.
4-A. ํ๊ท ํ
์คํธ ๋จผ์
์์ ์ฝ๋ ์์ฑ ์ ์ ์คํจ ์ผ์ด์ค๋ฅผ ์ฌํํ๋ ํ
์คํธ๋ฅผ ์์ฑํ๋ค (RED).
1. ํ
์คํธ ์์ฑ โ ์คํจ ํ์ธ (ํ์ฌ ๋ฒ๊ทธ ์ฌํ)
2. ์์ ์ฝ๋ ์์ฑ โ ํ
์คํธ ํต๊ณผ (GREEN)
3. ๋ฆฌํฉํ ๋ง (์ ํ)
์ด๋ ๊ฒ ํ๋ฉด:
- ์์ ์ด ์ค์ ๋ก ํจ๊ณผ ์๋์ง ๊ฐ๊ด์ ์ผ๋ก ์ฆ๋ช
- ํฅํ ๋์ผ ๋ฒ๊ทธ ์ฌ๋ฐ์ ์๋ ์ฐจ๋จ
ํ
์คํธ ์์ฑ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ (UI, ํ๊ฒฝ ์์กด ๋ฑ)๋ ์๋ ์ฌํ ์ ์ฐจ๋ฅผ plan.md์ ๋จ๊ธด๋ค.
RED ์์ธ โ ๋น๋/์ปดํ์ผ ์คํจ. ๋ฒ๊ทธ๊ฐ ๋น๋ยท์ปดํ์ผ ์คํจ(ํ
์คํธ ์คํ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅ)๋ฉด RED๋ฅผ ๋จผ์ ๋ง๋ค ์ ์๋ค โ ์ปดํ์ผ์ด ์ ๋๋ฉด ํ
์คํธ๋ ๋ชป ๋๋ค. ์ด๋๋ "RED ํ
์คํธ โ GREEN" ์์ ๋์ , ์์ ์ผ๋ก ์ปดํ์ผ์ ํต๊ณผ์ํจ ๋ค(๋น๋ GREEN) ๊ด๋ จ ํ
์คํธ๊ฐ ํต๊ณผํจ์ ํ์ธํ๋ ๊ฒ์ผ๋ก ๋์ฒดํ๋ค. ๊ฐ๋ฅํ๋ฉด ๊ทธ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ์ฌ๋ฐ ์ฐจ๋จํ๋ ํ
์คํธ/๊ฒ์ฆ(์: ์ญ์ ๋ ์ฌ๋ณผ ์ฐธ์กฐ๊ฐ ์๋์ง ํ์ธํ๋ ํ
์คํธ)์ ์ถ๊ฐํ๋, ์ปดํ์ผ ์คํจ ์์ฒด๋ "๋น๋ ํต๊ณผ"๊ฐ ๊ณง ์ฒซ ๊ฒ์ฆ์ ์์ ์ธ์ ํ๋ค(RED ๋ถ๋ฅ์ ์ฐํ๊ฐ ์๋๋ผ ๋ฌผ๋ฆฌ์ ์ ์ฝ).
4-B. ์ต์ ์์
- ๊ทผ๋ณธ ์์ธ์๋ง ์ง์ ๋์ํ๋ ๋ณ๊ฒฝ
- ๋ฌด๊ดํ ๋ฆฌํฉํ ๋งยท์์ ๋ณ๊ฒฝ ๊ธ์ง
- ๋ณ๊ฒฝ ๋ฒ์๊ฐ plan.md์ task ๋ฒ์๋ฅผ ๋์ผ๋ฉด Halt
4-C. ๋ฐฉ์ด ์ฌ์ธตํ (Defense in Depth, ์ ํ)
๊ทผ๋ณธ ์์ธ์ ์์ ํ ๋ค, ์ฌ๋ฐ ๋ฐฉ์ง๋ฅผ ์ํด ๋ค๋ฅธ ๋ ์ด์ด์๋ ๋ฐฉ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ ๊ฐ์น๊ฐ ์๋ค๋ฉด:
- ์
๋ ฅ ๊ฒ์ฆ
- ๋จ์ธ(assertion)
- ๋ก๊น
๊ฐํ
๋จ, "ํน์ ๋ชจ๋ฅด๋" ์์ ๊ด๋ฒ์ํ ๋ฐฉ์ด๋ YAGNI ์๋ฐ. ์ฌ๋ฐ ๊ฐ๋ฅ ์๋๋ฆฌ์ค๊ฐ ์์ ๋๋ง.
4-D. ๊ฒ์ฆ
implement-task์ Phase V ์ ์ฐจ๋ฅผ ๋ฐ๋ฅธ๋ค:
- ๋น๋ / ํ
์คํธ / ๋ฆฐํธ
- spec-compliance-reviewer + code-quality-reviewer subagent
- BLOCKER 0๊น์ง ๋ฐ๋ณต
๊ฒฝ๋ ๊ฒ์ฆ ํ์ฉ (์๊ท๋ชจ ์์ ). ์์ ์ด ๋จ์ผ ํ์ผยท10์ค ์ดํ์ด๊ณ ํ๊ท ํ
์คํธ๊ฐ GREEN(4-A์์ ๋ฒ๊ทธ๋ฅผ ์ฌํํ๋ ํ
์คํธ๊ฐ ์ด์ ํต๊ณผ)์ด๋ฉด, full Sonnet ๋ฆฌ๋ทฐ(spec-compliance + code-quality) ๋์ spec-prefilter(Haiku) ๊ฒฝ๋ ๊ฒ์ฆ์ผ๋ก ๋์ฒดํ ์ ์๋ค(Type B ์์ค์ ์ ์ํ ์์ ๊ณผ ๋์ผ ๊ธฐ์ค). prefilter๊ฐ ESCALATEํ๋ฉด ์ ์ full ๋ฆฌ๋ทฐ๋ก ์ฌ๋ฆฐ๋ค. ์์ ์ด ๋ค์ค ํ์ผ์ด๊ฑฐ๋ 10์ค์ ๋๊ฑฐ๋ ํ๊ท ํ
์คํธ๊ฐ ์์ผ๋ฉด ์ด ๊ฒฝ๋ ๋์ฒด๋ฅผ ์ฐ์ง ์๊ณ full ๋ฆฌ๋ทฐ๋ฅผ ์ํํ๋ค.
plan.md ์์ด ๋๋ฒ๊น
ํ ๊ฒฝ์ฐ(๋ณ๋ debug-*.md๋ง ์์ฑ): spec-compliance-reviewer๋ plan.md task์ acceptance๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒ์ฆํ๋ฏ๋ก, plan.md๊ฐ ์์ผ๋ฉด task ์น์
๋์ ๋ณ๊ฒฝ ํ์ผ ๋ชฉ๋ก + 4-A์ ํ๊ท ํ
์คํธ๋ฅผ acceptance ๊ธฐ์ค์ผ๋ก ์ ๋ฌํ๋ค("์ด ๋ฒ๊ทธ๊ฐ ํ๊ท ํ
์คํธ๋ก ์ฐจ๋จ๋๋๊ฐ + cross-file caller ์ผ๊ด"์ด ๊ฒ์ฆ ๊ธฐ์ค โ spec-compliance ์
๋ ฅ์ "๋๋ ๋ณ๊ฒฝ ํ์ผ ๋ชฉ๋ก" ๊ฒฝ๋ก). plan-feature๋ฅผ ๊ฑฐ์ณ plan.md๊ฐ ์์ผ๋ฉด ํ์๋๋ก ํด๋น task ์น์
์ ์ ๋ฌํ๋ค.
4-E. ์ํค ๊ฐฑ์ ์ ์ (์ ํ)
llm-wiki ์ฌ์ฉ ์ค์ด๊ณ ์ด ํ๋ก์ ํธ๊ฐ ๋ฑ๋ก๋ผ ์์ผ๋ฉด(๋ฑ๋ก ์ฌ๋ถ๋ vault 20_projects/์ ์ด ํ๋ก์ ํธ ํ๋ธ๊ฐ ์๋์ง๋ก ํ๋จ โ read-only, ๋ฏธ์ค์ ยท๋ฏธ๋ฑ๋ก์ด๋ฉด ์ ์ ์๋ต), ์ด๋ฒ ๋ฒ๊ทธ์ ์ฆ์ยท๊ทผ๋ณธ ์์ธยทํด๊ฒฐ์ฑ
์ pjc:llm-wiki ์ ์ฐจ B(ingest)๋ก ์ํค์ ๋ฐ์ํ ๊ฒ์ ์ ์ํ๋ค. ์ ์ฅ ์์น๋ ๋ค์์ ๋ฐ๋ฅธ๋ค (๋ค๋ฅธ ํ๋ก์ ํธ์ 2-A ๊ต์ฐจ ๊ฒ์์ด ์ฐพ์ ์ ์์ด์ผ ํจ):
-
๊ด๋ จ ๊ธฐ๋ฅ์ feature ํ์ด์ง "๊ด๋ จ ์ง์ยท๋ ์ํผ" ์น์
์ "ํด๊ฒฐํ ๋ฌธ์ : {์ฆ์} โ {์์ธ} โ {ํด๊ฒฐ}" ํํ๋ก ๊ธฐ๋กํ๋ค (๊ฒ์ ํค์๋๊ฐ ๋๋๋ก ์๋ฌ ๋ฉ์์งยท์ฆ์์ ๋ช
์). ์ฒซ ๋ฐ๊ฒฌ์ด๋ฉด ์ฌ๊ธฐ๊น์ง โ patterns ์ ๊ท ์์ฑ์ ์ ํจ(2๊ฐ์งธ ์น๊ฒฉ, ์ ์ฐจ B-2 2-1).
-
๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ์ด๋ฏธ ํด๊ฒฐ๋ ์ ์์ผ๋ฉด(2๊ฐ์งธ), 30_knowledge/patterns/๋ก ์น๊ฒฉํด "๋ฌธ์ โ์์ธโํด๊ฒฐโ์ฌ๋ก ํ๋ก์ ํธ"๋ก ์ ๋ฆฌํ๋ค.
๋ค์์ ๊ฐ์ยท์ ์ฌ ์ฆ์์ด (์ด ํ๋ก์ ํธ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ ) ์ฌ๋ฐํ๋ฉด Phase 2-A์ ๊ต์ฐจ ํ๋ก์ ํธ ์ํค ๊ฒ์์ด ์ด ๊ธฐ๋ก์ ์ฐพ์ ์ฌ์กฐ์ฌ๋ฅผ ์ค์ธ๋ค. ๋๋ฒ๊น
์ธ์
์ ์ํค๋ฅผ ์ง์ ์์ ํ์ง ์์ผ๋ฏ๋ก ๋ณ๋ ์ํค ์ธ์
์์ ์งํํ๋ค (read-only ์์น ์ ์ง). ๋๋ฒ๊น
์ค pjc ์คํฌ ์์ฒด์ ๊ฒฐํจยท๋ง์ฐฐ์ ๋ฐ๊ฒฌํ์ผ๋ฉด pjc:llm-wiki ์ ์ฐจ K 5-1์ [SKILL-IMPROVE] ํ์ 1์ค ๊ธฐ๋กํ๋ค(vault ์์ผ๋ฉด ๊ทธ ๊ท์ฝ์ ํด๋ฐฑ).
-
์ฆ์ ํ์ ([SYMPTOM], ์๋): ๊ทผ๋ณธ์์ธ์ด ํ์ ยท๊ฒ์ฆ๋ ์ด ์์ (Phase 4 ํต๊ณผ)์์, ์ด ์ฆ์โ์์ธ ๋งคํ์ด ์ฌ์ฌ์ฉ ๊ฐ์น๊ฐ ์์ผ๋ฉด("์ด ๋งคํ์ด ์ํค์ ์์๋ค๋ฉด ์ด๋ฒ ๋๋ฒ๊น
์ด ๋นจ๋์๊น" โ ์ผํ์ฑยท์ปดํ์ผ๋ฌ๊ฐ ์ฆ์ ์ง์ ์ฌ์ ์ค๋ฅ๋ฉด ์๋ต) pjc:llm-wiki ์ ์ฐจ K 5-5์ [SYMPTOM] ํ์ 1์ค appendํ๋ค โ - [YYYY-MM-DD] [SYMPTOM] {ํ๋ก์ ํธ}: {์ฆ์ ๊ด์ฐฐํํ} | {๊ฒ์ฆ๋ ์์ธ} | {๋์ ํ์ด์ง(์์ผ๋ฉด)}. ์ฆ์์ ์ธ์
์์ ์์ ์ ๊ด์ฐฐ ํํ(ํด๋ฒ ์ดํ ์๋), ์์ธ์ ๊ฒ์ฆ๋ ์ธ๊ณผ๋ง(์ ์ ์ง๋จยท์คํจํ ์ ๊ทผ์ ํ์ํ์ง ์๋๋ค โ ๋ฏธ๊ฒ์ฆ ์คํจ๊ฐ ์ํค์ ์ฑ๊ณต ํด๋ฒ์ ์ค์ผ์ํค๋ ๊ฒ ์ฐจ๋จ). ์ํค ์ธ์
(ingest)์ด ์ด ํ๋ฅผ ์ฆ์๋ณ ์ธ๋ฑ์ค(schema ยง6)๋ก ์๋นํด, ๋ค์์ ๊ฐ์ ์ฆ์์ผ๋ก ์์ํ๋ ๋๋ฒ๊น
์ด ํด๋ฒ ์ด๋ฆ์ ๋ชฐ๋ผ๋ ์ํค์ ์ง์
ํ๊ฒ ํ๋ค. vault ๋ฏธ์ค์ ยท๋ถ์ฌยทํ๋ค์ค ๋ ํฌ ์์ธ ๋ฑ ํด๋ฐฑ์ ์ ์ฐจ K 5-5(=5-2 ๋ํ)๋ฅผ ๋ฐ๋ฅธ๋ค.
Phase 4.5 โ ์ํคํ
์ฒ ์์ฌ (Architectural Doubt)
๋ค์ ์ ํธ๊ฐ ๋ณด์ด๋ฉด Phase 1๋ก ๋ณต๊ทํ์ง ๋ง๊ณ ์ํคํ
์ฒ๋ฅผ ์์ฌํ๋ค:
- โ ๊ฐ์ ๋ฒ๊ทธ๋ฅผ 3ํ ์ด์ ์์ ํ๋๋ฐ ์ฌ๋ฐ
- โ ํ ๊ณณ์ ๊ณ ์น๋ ๋ค๋ฅธ ๊ณณ์ด ๊นจ์ง๋ค
- โ "์ด์ํ๋ค, ์ด๊ฒ ์ ๋์ํ์ง" ๊ฐ์ ๋ฏธ์คํฐ๋ฆฌ
- โ ๋น์ทํ ๋ฒ๊ทธ๊ฐ ์ฌ๋ฌ ๋ชจ๋์์ ๋ฐ๋ณต ์ถํ
- โ ์์ ์ ์์ ์ด ์๋ค (์ ๋๋ก ์ดํด ๋ชป ํ ์ฑ ์ถ์ธก)
์ด๋ ์ง๋ฌธ:
์ฆ์์ ๊ณ์ ๊ณ ์น๋ ๊ฒ vs ์ํคํ
์ฒ๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ โ ์ด๋ ์ชฝ์ด ์ณ์๊ฐ?
์ฌ์ฉ์์๊ฒ ๋ณด๊ณ ํ๊ณ ํจ๊ป ๊ฒฐ์ ํ๋ค. ์ด๊ฒ์ ์คํจํ ๊ฐ์ค์ด ์๋๋ผ ์๋ชป๋ ์ํคํ
์ฒ์ ์ ํธ๋ค.
์ฆ์ Phase 1 ๋ณต๊ท ์กฐ๊ฑด
๋ค์ ์ค ํ๋๋ผ๋ ๋ณด์ด๋ฉด STOP, Phase 1์ผ๋ก ๋์๊ฐ๋ค:
- "์๋ง ~ ๋๋ฌธ์ผ ๊ฑฐ์ผ"๋ผ๋ ํํ์ผ๋ก ์์ ์ ์ง์
ํ๋ ค ํจ
- ์๋ฌ ๋ฉ์์ง๋ฅผ ๋๊น์ง ์ฝ์ง ์๊ณ ์ฒซ ์ค๋ง์ผ๋ก ๊ฒฐ๋ก
- ์ฌํ ์ ์ฐจ๊ฐ ํ์ ๋์ง ์์ ์ฑ ์์
- ๊ฐ์ค์ด 1๊ฐ๋ฟ ์ธ๋ฐ ๊ทธ ์์ธ์ด ์ฆ๊ฑฐ๋ก ํ์ ๋์ง ์์(์ถ์ธก ๊ธฐ๋ฐ ๋จ์ผ ๊ฐ์ค โ STOP. ๋จ ์คํํธ๋ ์ด์คยท๋ก๊ทธ๊ฐ ๋จ์ผ ์์ธ์ ํ์ ์ ์ผ๋ก ์ง๋ชฉํ ๊ฒฝ์ฐ๋ "๋จ์ผ ์์ธ ํ์ ์์ธ"๋ผ STOP ์๋, Phase 2 ํต๊ณผ ์กฐ๊ฑด ์ฐธ์กฐ)
- ์์ ์ฝ๋๊ฐ try-catch๋ก ์๋ฌ๋ฅผ ๊ฐ๋ฆฌ๊ณ ์์
- ํ
์คํธ ์์ด ์์ ๋ง ํ๊ณ "์ด์ ๋ ๊ฑฐ๋ค"๋ผ๊ณ ํ๋จ
์ํฐํจํด (๊ธ์ง)
| ์ํฐํจํด | ์ฌ๋ฐ๋ฅธ ํ๋ |
|---|
| ๋น catch๋ก ์๋ฌ ์ผํค๊ธฐ | ๊ทผ๋ณธ ์์ธ ์์ |
| ์ฌ์๋ ๋ฃจํ ์ถ๊ฐ๋ก ์ฐํ | ์ ์คํจํ๋์ง ํ์
ํ ์์ |
| if ๋ถ๊ธฐ ์ถ๊ฐ๋ก ํน์ ์ผ์ด์ค๋ง ํํผ | ์ผ๋ฐ ๋ก์ง ์์ |
| ํ
์คํธ ๋นํ์ฑํ/์ฃผ์ ์ฒ๋ฆฌ | ํ
์คํธ๊ฐ ์ณ๊ณ ์ฝ๋๊ฐ ํ๋ฆฐ์ง ๊ฒ์ฆ |
| ์๋ฌ ๋ฉ์์ง์ "Unknown error" ์ถ๊ฐ | ๋ฉ์์ง๋ฅผ ๊ตฌ์ฒดํ |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๋ค์ด๊ทธ๋ ์ด๋๋ก ์ฐํ | upgrade ์ฌ์ ์ ์ถฉ๋ ์์ธ ๋ถ์ |
| ์บ์ ํด๋ฆฌ์ด, ์ฌ๋ถํ
์ผ๋ก "ํด๊ฒฐ" | ์ ๊ทธ ์ํ๊ฐ ๋๋์ง ์ถ์ |
| "ํ๊ฒฝ ์ฐจ์ด" ๊ฒฐ๋ก ์ผ๋ก ์ข
๊ฒฐ | ํ๊ฒฝ ์ฐจ์ด์ ๊ตฌ์ฒด์ ๋ฉ์ปค๋์ฆ ๋ช
์ |
| ํ๋ก์ ํธ ๋ก๊ทธ ๊ด๋ก๋ฅผ ๋ฌด์ํ ๋ก๊ทธ | ํ๋ก์ ํธ ๊ธฐ์กด ๋ก๊ทธ ๊ด๋ก ์ฐ์ (์/ํ ํผ์ฉยท๊ตฌ์กฐํ ๋ก๊ทธ ๋ฑ), ๊ด๋ก๊ฐ ์์ผ๋ฉด ํ๊ธ |
์กฐ์ฌ ๋ก๊ทธ ํ์
์กฐ์ฌ ๊ฒฐ๊ณผ๋ plan.md (๋๋ ๋ณ๋ debug-<๋ ์ง>.md)์ ๋ค์ ํ์์ผ๋ก ๊ธฐ๋ก:
# Debug: <์ฆ์ ์์ฝ>
## Symptom
<๋ฌด์์ด ์ด๋ป๊ฒ ์๋ชป๋๋๊ฐ>
## Reproduction
<์ฌํ ์ ์ฐจ โ ๋ค๋ฅธ ์ฌ๋์ด ๋ฐ๋ผํ ์ ์๊ฒ>
## Phase 1 โ Evidence
- Error: <๋ฉ์์ง ํต์ฌ ๋จ์>
- Stack: <ํต์ฌ ํ๋ ์>
- Recent changes: <git log ์์ฝ>
- Failing layer: <์ด๋์ ์คํจ>
## Phase 2 โ Hypotheses
- H1: ... โ ๊ฒ์ฆ: ... โ ๊ฒฐ๊ณผ: โ
/โ
- H2: ...
## Phase 3 โ Root Cause
<์ ๊ทธ๊ฒ์ด ์์ธ์ธ์ง ๋ฉ์ปค๋์ฆ ์ค๋ช
>
## Phase 4 โ Fix
- Test added: <ํ
์คํธ ํ์ผ:์ผ์ด์ค>
- Change: <ํ์ผ:๋ผ์ธ + ํ ์ค ์์ฝ>
- Defense in depth: <์ ํ, ์๋ค๋ฉด>
## Verification
- Build: OK
- Tests: <X/Y>
- Manual repro: ๋ ์ด์ ์ฌํ ์ ๋จ
Halt ์กฐ๊ฑด
๋ค์ ๋ฐ์ ์ ์ฌ์ฉ์์๊ฒ ๋ณด๊ณ :
- 3ํ ์ด์ ์์ ์๋ ์คํจ โ Phase 4.5 ํธ๋ฆฌ๊ฑฐ
- ์ฌํ์ด ๋ถ๊ฐ๋ฅํ๊ณ ๊ฐ์ค๋ ๋ชจ๋ ๊ฒ์ฆ๋์ง ์์
- ์ธ๋ถ ์์คํ
(์ 3์ API, ์ธํ๋ผ) ๊ฒฐํจ์ผ๋ก ์ขํ์ง
- ๋ณด์ยท๋ฐ์ดํฐ ์์ค ์ํ์ด ์๋ ์์ ์ด ํ์
- ๊ทผ๋ณธ ์์ธ์ด ๋ค๋ฅธ ์ฌ๋/ํ์ ์ฝ๋์ ์์