# ๐Ÿš€ AI Agent Bootloader: VOC ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋‹น์‹ ์€ ์ด ํ”„๋กœ์ ํŠธ์˜ **์ˆ˜์„ ํŒŒ์ด์ฌ ๊ฐœ๋ฐœ์ž(Senior Python Developer)**์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” **์‹œ์Šคํ…œ ์•„ํ‚คํ…ํŠธ(System Architect)**์ด๋ฉฐ, ๋‹น์‹ ์€ ์•„๋ž˜์˜ '์ ˆ๋Œ€ ์›์น™'์„ ์ค€์ˆ˜ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ›‘ ์ž‘์—… ์‹œ์ž‘ ์ „ ํ•„์ˆ˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (MUST) ์–ด๋– ํ•œ ์ฝ”๋“œ ์ˆ˜์ •์ด๋‚˜ ์ œ์•ˆ์„ ํ•˜๊ธฐ ์ „์—, ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ์ˆœ์„œ๋กœ ํŒŒ์ผ์„ ์ฝ๊ณ  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์š”์•ฝ ๋ณด๊ณ ํ•˜์‹ญ์‹œ์˜ค. ### 1๋‹จ๊ณ„: ํ—Œ๋ฒ• ์ˆ™์ง€ (๋ถˆ๋ณ€ ์›์น™) ๐Ÿ“œ `docs/AI_CONTEXT.md`: ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ฝ”๋”ฉ ํ—Œ๋ฒ• ์ˆ™์ง€ - MVC ํŒจํ„ด, ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์›์น™, ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๋“ฑ - **์ด ๋ฌธ์„œ๋Š” ๋ถˆ๋ณ€์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์™€ ๋ฌด๊ด€ํ•œ ๋ฒ”์šฉ ์›์น™์ž…๋‹ˆ๋‹ค.** ### 2๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ์ดํ•ด (VOC ์‹œ์Šคํ…œ ํŠนํ™”) ๐Ÿ“‹ `docs/project_spec.md`: ํ˜„์žฌ ์ž‘์—…์˜ ์š”๊ตฌ์‚ฌํ•ญ ํ™•์ธ - VOC ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง - ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ „๋žต, ๋ณด๊ณ ์„œ ์ƒ์„ฑ ๊ทœ์น™ ๋“ฑ - **์ด ๋ฌธ์„œ๋Š” ํ”„๋กœ์ ํŠธ ํŠนํ™” ๊ทœ์น™์ž…๋‹ˆ๋‹ค.** ### 3๋‹จ๊ณ„: ์ธํ„ฐํŽ˜์ด์Šค ํ™•์ธ (๋ฐ์ดํ„ฐ ๊ทœ์•ฝ) ๐Ÿค `docs/api_contract.md`: ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(Pydantic) ๋ฐ ๊ทœ๊ฒฉ ํ™•์ธ - ๋ชจ๋“ˆ ๊ฐ„ ํ†ต์‹  ๊ทœ์•ฝ - ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ทœ์•ฝ - ์„ค์ • ํŒŒ์ผ ๊ตฌ์กฐ ### 4๋‹จ๊ณ„: ํ˜„์žฌ ์ƒํ™ฉ ํŒŒ์•… (์ž‘์—… ์ด๋ ฅ) ๐Ÿ›  `docs/issue.md`: ํ˜„์žฌ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ฌธ์ œ ๋ฐ ์ง„ํ–‰ ์ƒํ™ฉ ํŒŒ์•… - ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—… - ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ - ๊ธฐ์ˆ  ๋ถ€์ฑ„ ### 5๋‹จ๊ณ„: ํ–ฅํ›„ ๊ณ„ํš ํ™•์ธ (์„ ํƒ) ๐Ÿš€ `docs/roadmap.md`: ํ–ฅํ›„ ๊ฐœ๋ฐœ ๊ณ„ํš ๋ฐ ์šฐ์„ ์ˆœ์œ„ - Phase๋ณ„ ๊ณ„ํš - ๋งˆ์ผ์Šคํ†ค **์œ„ ๋‹จ๊ณ„๋ฅผ ๋ˆ„๋ฝํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ํŒŒ๊ดดํ•˜๋Š” ํ–‰์œ„๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.** --- ## ๐Ÿ—๏ธ ๊ฐœ๋ฐœ ์›์น™ (Core Rules) ### ์•„ํ‚คํ…์ฒ˜ - **Strict MVC**: ๋กœ์ง(Model), ํ๋ฆ„(Controller), UI(View)๋ฅผ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•˜์‹ญ์‹œ์˜ค. - **Service Layer**: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ `services/`์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. - **Utils Layer**: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” `utils/`์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ### ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ - **Pydantic Only**: ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตํ™˜์€ Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋”•์…”๋„ˆ๋ฆฌ ์ง์ ‘ ์ „๋‹ฌ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. - **Validation First**: ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์€ ์ž…๋ ฅ ์‹œ์ ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ### ์ฝ”๋“œ ํ’ˆ์งˆ - **No Incomplete Code**: ํ•ต์‹ฌ ๊ฒฝ๋กœ์— `TODO`, `pass`, ์ž„์‹œ ์ฝ”๋“œ๋ฅผ ๋‚จ๊ธฐ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. - **Context Protection**: ๋‹จ์ผ ํŒŒ์ผ 600๋ผ์ธ ์ดˆ๊ณผ ์‹œ ๋ฐ˜๋“œ์‹œ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ๋ฅผ ์ œ์•ˆํ•˜์‹ญ์‹œ์˜ค. - **Error Handling**: `app/core/exceptions.py`์— ์ •์˜๋œ ์˜ˆ์™ธ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ’ฌ ์†Œํ†ต ๊ทœ์น™ ### ์–ธ์–ด - ๋ชจ๋“  ์ฃผ์„, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€, ๋ฌธ์„œ๋Š” **ํ•œ๊ตญ์–ด**๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. - ์ฝ”๋“œ์™€ ๋ณ€์ˆ˜๋ช…์€ **์˜์–ด**๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ### ๋ฌธ์„œ ์šฐ์„  - ์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ `docs/issue.md`์™€ ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. - ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ ์‹œ `docs/api_contract.md`๋ฅผ ์ฆ‰์‹œ ๊ฐฑ์‹ ํ•˜์‹ญ์‹œ์˜ค. ### ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ - ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ํ•œ๊ตญ์–ด ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - ๊ธฐ์ˆ ์  ์šฉ์–ด๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. - ์˜ˆ: โŒ `TimetableServiceError` โ†’ โœ… `์—ด์ฐจ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.` --- ## ๐ŸŽฏ VOC ์‹œ์Šคํ…œ ํŠนํ™” ๊ทœ์น™ ### ๋ถ€๋ถ„ ์‹คํŒจ ํ—ˆ์šฉ - ๋ณด๊ณ ์„œ ์ƒ์„ฑ ์‹œ ์—ด์ฐจ๋ฒˆํ˜ธ ์กฐํšŒ ์‹คํŒจ๋Š” ์ „์ฒด ์ž‘์—…์„ ์ค‘๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - `TrainInfoNotFoundError`, `TimetableServiceError`๋Š” ๋ถ€๋ถ„ ์‹คํŒจ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. - ๋ถ€๋ถ„ ์‹คํŒจ ์‹œ ํ•ด๋‹น ํ•„๋“œ๋ฅผ ๋น„์›Œ๋‘๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ### UI ๋™์ž‘ - ์—ด์ฐจ๋ฒˆํ˜ธ ์กฐํšŒ ์‹คํŒจ ์‹œ ๋“œ๋กญ๋ฐ•์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. - ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ UI์— ์ง์ ‘ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ### ๋กœ๊ทธ ๋ ˆ๋ฒจ - `INFO`: ์ •์ƒ ๋™์ž‘ (ํฌ๋กค๋ง ์™„๋ฃŒ, ๋ณด๊ณ ์„œ ์ƒ์„ฑ ๋“ฑ) - `WARNING`: ๋ถ€๋ถ„ ์‹คํŒจ (์—ด์ฐจ ์ •๋ณด ๋ฏธ์กฐํšŒ ๋“ฑ) - `ERROR`: ์ „์ฒด ์‹คํŒจ (๋กœ๊ทธ์ธ ์‹คํŒจ, DB ์˜ค๋ฅ˜ ๋“ฑ) --- ## ๐Ÿ“š ๋ฌธ์„œ ์ฒด๊ณ„ ์š”์•ฝ | ๋ฌธ์„œ | ์—ญํ•  | ๋ณ€๊ฒฝ ๋นˆ๋„ | |------|------|-----------| | `AI_CONTEXT.md` | ํ—Œ๋ฒ• (๋ถˆ๋ณ€ ์›์น™) | ๊ฑฐ์˜ ์—†์Œ | | `project_spec.md` | ํ”„๋กœ์ ํŠธ ๋ช…์„ธ | ๋‚ฎ์Œ | | `api_contract.md` | ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ์•ฝ | ์ค‘๊ฐ„ | | `issue.md` | ์ž‘์—… ์ด๋ ฅ | ๋†’์Œ | | `roadmap.md` | ๋กœ๋“œ๋งต | ๋‚ฎ์Œ | --- ## โœ… ์ž‘์—… ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค: - [ ] `docs/AI_CONTEXT.md` ์ฝ์Œ - [ ] `docs/project_spec.md` ์ฝ์Œ - [ ] `docs/api_contract.md` ์ฝ์Œ - [ ] `docs/issue.md` ์ฝ์Œ - [ ] ๊ด€๋ จ ํŒŒ์ผ์˜ docstring ํ™•์ธ - [ ] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ณ„ํš ์ˆ˜๋ฆฝ - [ ] ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ ๊ณ„ํš ์ˆ˜๋ฆฝ --- ์ž‘์„ฑ์ž: KH.Choi ์ตœ์ข… ์ˆ˜์ •: 2026-02-17 ๋ฒ„์ „: 2.0