Skip to main content
Glama
USER_GUIDE.mdโ€ข32.3 kB
# ๐Ÿ“š WorkflowMCP ์™„์ „ ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ **WorkflowMCP v2.7** - AI ํ†ตํ•ฉ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ํ”Œ๋žซํผ ์™„์ „ ์‚ฌ์šฉ ์„ค๋ช…์„œ --- ## ๐Ÿ“‹ ๋ชฉ์ฐจ 1. [๋น ๋ฅธ ์‹œ์ž‘](#๋น ๋ฅธ-์‹œ์ž‘) 2. [์›น ๋Œ€์‹œ๋ณด๋“œ ์™„์ „ ๊ฐ€์ด๋“œ](#์›น-๋Œ€์‹œ๋ณด๋“œ-์™„์ „-๊ฐ€์ด๋“œ) 3. [MCP ์„œ๋ฒ„ ์‚ฌ์šฉ๋ฒ•](#mcp-์„œ๋ฒ„-์‚ฌ์šฉ๋ฒ•) 4. [์‹ค๋ฌด ์›Œํฌํ”Œ๋กœ์šฐ](#์‹ค๋ฌด-์›Œํฌํ”Œ๋กœ์šฐ) 5. [๊ณ ๊ธ‰ ๊ธฐ๋Šฅ](#๊ณ ๊ธ‰-๊ธฐ๋Šฅ) 6. [๋ฌธ์ œ ํ•ด๊ฒฐ](#๋ฌธ์ œ-ํ•ด๊ฒฐ) --- ## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘ ### 1. ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ - **Node.js**: v18.0.0 ์ด์ƒ - **SQLite3**: ์ž๋™ ์„ค์น˜๋จ - **๋ธŒ๋ผ์šฐ์ €**: Chrome, Firefox, Safari (์ตœ์‹  ๋ฒ„์ „) - **Claude Code**: MCP ์—ฐ๋™์šฉ (์„ ํƒ์‚ฌํ•ญ) ### 2. ์„ค์น˜ ๋ฐ ์‹คํ–‰ ```bash # 1. ์ €์žฅ์†Œ ํด๋ก  git clone https://github.com/foswmine/workflow-mcp.git cd workflow-mcp # 2. ์˜์กด์„ฑ ์„ค์น˜ npm install # 3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” cd src/database node simple-migrate.js cd ../.. # 4. ์›น ๋Œ€์‹œ๋ณด๋“œ ์„ค์น˜ ๋ฐ ์‹คํ–‰ cd dashboard npm install npm run dev ``` ### 3. ์ ‘์† ํ™•์ธ - **์›น ๋Œ€์‹œ๋ณด๋“œ**: http://localhost:3301 - **MCP ์„œ๋ฒ„**: `npm start` (Claude Code ์—ฐ๋™์‹œ) --- ## ๐ŸŒ ์›น ๋Œ€์‹œ๋ณด๋“œ ์™„์ „ ๊ฐ€์ด๋“œ WorkflowMCP ์›น ๋Œ€์‹œ๋ณด๋“œ๋Š” 11๊ฐœ์˜ ์ฃผ์š” ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ### ๐Ÿ“Š 1. ๋Œ€์‹œ๋ณด๋“œ (`/`) **๋ฉ”์ธ ํ—ˆ๋ธŒ - ํ”„๋กœ์ ํŠธ ์ „์ฒด ํ˜„ํ™ฉ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **๐Ÿ“ˆ ํ•ต์‹ฌ ์ง€ํ‘œ ์นด๋“œ** - **์ „์ฒด PRD**: ์ƒ์„ฑ๋œ ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ ์ˆ˜์™€ ํ™œ์„ฑ PRD ๊ฐœ์ˆ˜ - **์ „์ฒด ์ž‘์—…**: ์ด ์ž‘์—… ์ˆ˜์™€ ์™„๋ฃŒ์œจ ํผ์„ผํ‹ฐ์ง€ - **์ง„ํ–‰์ค‘ ์ž‘์—…**: ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…๊ณผ ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—… ์ˆ˜ - **์ „์ฒด ๊ณ„ํš**: ์ƒ์„ฑ๋œ ๊ณ„ํš ์ˆ˜์™€ ํ™œ์„ฑ ๊ณ„ํš ๊ฐœ์ˆ˜ - **๐Ÿ“Š ์‹œ๊ฐํ™” ์ฐจํŠธ** - **์ž‘์—… ํ™œ๋™ ์ถ”์ด (30์ผ)**: ์ตœ๊ทผ 30์ผ๊ฐ„ ์ž‘์—… ์ƒ์„ฑ/์™„๋ฃŒ ํŠธ๋ Œ๋“œ ๋ผ์ธ ์ฐจํŠธ - **์šฐ์„ ์ˆœ์œ„๋ณ„ ์ž‘์—… ๋ถ„ํฌ**: High/Medium/Low ์šฐ์„ ์ˆœ์œ„๋ณ„ ๋„๋„› ์ฐจํŠธ - ๐Ÿ”ด ๋†’์Œ (High): ๋นจ๊ฐ„์ƒ‰ - ๐ŸŸก ๋ณดํ†ต (Medium): ์ฃผํ™ฉ์ƒ‰ - ๐ŸŸข ๋‚ฎ์Œ (Low): ์ดˆ๋ก์ƒ‰ - ๐Ÿ”ด ๊ธด๊ธ‰ (Critical): ์ง„ํ•œ ๋นจ๊ฐ„์ƒ‰ - **โšก ๋น ๋ฅธ ์‹คํ–‰ ๋ฒ„ํŠผ** - ๐Ÿ“‹ ์ƒˆ PRD ์ž‘์„ฑ - โœ… ์ƒˆ ์ž‘์—… ์ถ”๊ฐ€ - ๐Ÿ“… ์ƒˆ ๊ณ„ํš ์ƒ์„ฑ - **๐Ÿ“‹ ์ตœ๊ทผ ํ™œ๋™** - ์ตœ๊ทผ 7์ผ๊ฐ„ ์ผ๋ณ„ ์ž‘์—… ์ƒ์„ฑ/์™„๋ฃŒ ํ˜„ํ™ฉ #### ์‚ฌ์šฉ๋ฒ• 1. ๋Œ€์‹œ๋ณด๋“œ ์ ‘์† ์‹œ ์ž๋™์œผ๋กœ ์ตœ์‹  ๋ฐ์ดํ„ฐ ๋กœ๋“œ 2. ๊ฐ ์ง€ํ‘œ ์นด๋“œ ํด๋ฆญ ์‹œ ํ•ด๋‹น ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ 3. ์ฐจํŠธ๋ฅผ ํ†ตํ•œ ์‹œ๊ฐ์  ํŠธ๋ Œ๋“œ ๋ถ„์„ 4. ๋น ๋ฅธ ์‹คํ–‰์œผ๋กœ ์ƒˆ ํ•ญ๋ชฉ ์ฆ‰์‹œ ์ƒ์„ฑ --- ### ๐Ÿ—๏ธ 2. ํ”„๋กœ์ ํŠธ (`/projects`) **ํ”„๋กœ์ ํŠธ ์ค‘์‹ฌ์˜ ํ†ตํ•ฉ ๊ด€๋ฆฌ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ** - ํ”„๋กœ์ ํŠธ ์ œ๋ชฉ, ์„ค๋ช…, ์ƒํƒœ ์„ค์ • - ์‹œ์ž‘์ผ/์ข…๋ฃŒ์ผ ์ผ์ • ๊ด€๋ฆฌ - ํ”„๋กœ์ ํŠธ๋ณ„ ์ง„ํ–‰๋ฅ  ์ถ”์  - **ํ”„๋กœ์ ํŠธ ์ƒ์„ธ ํŽ˜์ด์ง€** (`/projects/[id]`) - ์—ฐ๊ฒฐ๋œ PRD, ์ž‘์—…, ์„ค๊ณ„ ๋ชฉ๋ก ํ‘œ์‹œ - ํ”„๋กœ์ ํŠธ ํƒ€์ž„๋ผ์ธ ๋ฐ ๋งˆ์ผ์Šคํ†ค - ํŒ€ ๋ฉค๋ฒ„ ํ• ๋‹น ๋ฐ ์—ญํ•  ๊ด€๋ฆฌ - **ํ”„๋กœ์ ํŠธ ํŽธ์ง‘** (`/projects/[id]/edit`) - ํ”„๋กœ์ ํŠธ ์ •๋ณด ์ˆ˜์ • - ์ƒํƒœ ๋ณ€๊ฒฝ (๊ณ„ํš์ค‘, ์ง„ํ–‰์ค‘, ์™„๋ฃŒ, ๋ณด๋ฅ˜) - ์šฐ์„ ์ˆœ์œ„ ์กฐ์ • #### ์‚ฌ์šฉ๋ฒ• 1. **์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ**: `/projects/new`์—์„œ ๊ธฐ๋ณธ ์ •๋ณด ์ž…๋ ฅ 2. **ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ**: ๋ชฉ๋ก์—์„œ ํ”„๋กœ์ ํŠธ ์„ ํƒํ•˜์—ฌ ์ƒ์„ธ๋ณด๊ธฐ 3. **์ง„ํ–‰ ์ถ”์ **: ํ”„๋กœ์ ํŠธ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹ค์‹œ๊ฐ„ ์ง„ํ–‰๋ฅ  ํ™•์ธ 4. **์—ฐ๊ฒฐ ๊ด€๋ฆฌ**: PRD, ์ž‘์—…, ์„ค๊ณ„๋ฅผ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐ --- ### ๐Ÿ“‹ 3. ์š”๊ตฌ์‚ฌํ•ญ (`/prds`) **PRD (Product Requirements Document) ๊ด€๋ฆฌ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **PRD ์นด๋“œ ๋ทฐ ๋ชฉ๋ก** - ์ œ๋ชฉ, ์ƒํƒœ, ์šฐ์„ ์ˆœ์œ„, ์ƒ์„ฑ์ผ ํ‘œ์‹œ - ์ƒํƒœ๋ณ„ ์ƒ‰์ƒ ์ฝ”๋”ฉ (์ดˆ์•ˆ/๊ฒ€ํ† ์ค‘/์Šน์ธ๋จ/์™„๋ฃŒ) - ๋น ๋ฅธ ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ - **PRD ์ƒ์„ธ๋ณด๊ธฐ** (`/prds/[id]`) - **๊ธฐ๋ณธ ์ •๋ณด**: ์ œ๋ชฉ, ์„ค๋ช…, ๋ฒ„์ „, ์ƒํƒœ, ์šฐ์„ ์ˆœ์œ„ - **์š”๊ตฌ์‚ฌํ•ญ ๋ชฉ๋ก**: ๊ธฐ๋Šฅ๋ณ„ ์ƒ์„ธ ์š”๊ตฌ์‚ฌํ•ญ - **์ธ์ˆ˜ ์กฐ๊ฑด**: ์™„๋ฃŒ ๊ธฐ์ค€ ๋ฐ ๊ฒ€์ฆ ๋ฐฉ๋ฒ• - **์ถ”๊ฐ€ ์ •๋ณด**: ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ, ๋Œ€์ƒ ์‚ฌ์šฉ์ž, ์„ฑ๊ณต ์ง€ํ‘œ - **์—ฐ๊ฒฐ๋œ ์ž‘์—…**: ์ด PRD์™€ ์—ฐ๊ด€๋œ ์ž‘์—… ๋ชฉ๋ก - **์ฒจ๋ถ€ ํŒŒ์ผ**: ๊ด€๋ จ ๋ฌธ์„œ ๋ฐ ์ด๋ฏธ์ง€ - **PRD ํŽธ์ง‘** (`/prds/[id]/edit`) - ๋ชจ๋“  PRD ์ •๋ณด ์ˆ˜์ • ๊ฐ€๋Šฅ - ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€/์‚ญ์ œ/์ˆ˜์ • - ์ธ์ˆ˜ ์กฐ๊ฑด ๊ด€๋ฆฌ - ๋ฒ„์ „ ๊ด€๋ฆฌ (์ž๋™ ๋ฒ„์ „ ์ฆ๊ฐ€) - **์ƒˆ PRD ์ž‘์„ฑ** (`/prds/new`) - **1๋‹จ๊ณ„**: ๊ธฐ๋ณธ ์ •๋ณด ์ž…๋ ฅ (์ œ๋ชฉ, ์„ค๋ช…, ์šฐ์„ ์ˆœ์œ„) - **2๋‹จ๊ณ„**: ์ƒ์„ธ ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ - **3๋‹จ๊ณ„**: ์ธ์ˆ˜ ์กฐ๊ฑด ์ •์˜ - **4๋‹จ๊ณ„**: ๊ฒ€ํ†  ๋ฐ ์ €์žฅ #### ์‚ฌ์šฉ๋ฒ• 1. **PRD ์ƒ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ**: ``` `/prds/new` โ†’ ๊ธฐ๋ณธ์ •๋ณด โ†’ ์š”๊ตฌ์‚ฌํ•ญ โ†’ ์ธ์ˆ˜์กฐ๊ฑด โ†’ ์ €์žฅ ``` 2. **PRD ๊ด€๋ฆฌ ์‚ฌ์ดํด**: ``` ์ดˆ์•ˆ โ†’ ๊ฒ€ํ† ์ค‘ โ†’ ์Šน์ธ๋จ โ†’ ๊ตฌํ˜„์ค‘ โ†’ ์™„๋ฃŒ ``` 3. **์‹ค๋ฌด ํŒ**: - ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ตฌ์ฒด์ ์ด๊ณ  ์ธก์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ž‘์„ฑ - ์ธ์ˆ˜ ์กฐ๊ฑด์€ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ •์˜ - ์šฐ์„ ์ˆœ์œ„๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ ๊ธฐ์ค€์œผ๋กœ ์„ค์ • --- ### ๐Ÿ—๏ธ 4. ์„ค๊ณ„ (`/designs`) **์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ด€๋ฆฌ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **์„ค๊ณ„ ๋ฌธ์„œ ๊ด€๋ฆฌ** - ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜, UI/UX ์„ค๊ณ„, API ์„ค๊ณ„ ๋“ฑ - ์„ค๊ณ„ ํƒ€์ž…๋ณ„ ๋ถ„๋ฅ˜ ๋ฐ ํ•„ํ„ฐ๋ง - PRD์™€์˜ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ - **์„ค๊ณ„ ์ƒ์„ธ๋ณด๊ธฐ** (`/designs/[id]`) - ์„ค๊ณ„ ์ œ๋ชฉ, ํƒ€์ž…, ์ƒํƒœ, ์šฐ์„ ์ˆœ์œ„ - ์ƒ์„ธ ์„ค๊ณ„ ๋‚ด์šฉ (๋งˆํฌ๋‹ค์šด ์ง€์›) - ์—ฐ๊ฒฐ๋œ PRD ์ •๋ณด - ๊ด€๋ จ ์ž‘์—… ๋ชฉ๋ก - **์„ค๊ณ„ ํŽธ์ง‘** (`/designs/[id]/edit`) - ์„ค๊ณ„ ์ •๋ณด ์ „์ฒด ์ˆ˜์ • - ์„ค๊ณ„ ํƒ€์ž… ๋ณ€๊ฒฝ - PRD ์—ฐ๊ฒฐ ์ˆ˜์ • #### ์„ค๊ณ„ ํƒ€์ž… - **system**: ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ - **ui_ux**: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ - **database**: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ - **api**: API ์„ค๊ณ„ - **architecture**: ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ #### ์‚ฌ์šฉ๋ฒ• 1. **์„ค๊ณ„ ์ƒ์„ฑ**: ์—ฐ๊ฒฐํ•  PRD ์„ ํƒ โ†’ ์„ค๊ณ„ ํƒ€์ž… ์„ ํƒ โ†’ ๋‚ด์šฉ ์ž‘์„ฑ 2. **์„ค๊ณ„ ๊ด€๋ฆฌ**: ์ƒํƒœ๋ณ„ ํ•„ํ„ฐ๋ง์œผ๋กœ ์ง„ํ–‰ ์ค‘์ธ ์„ค๊ณ„ ์ถ”์  3. **PRD ์—ฐ๋™**: ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ์„ค๊ณ„๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ๋ฆ„ --- ### โœ… 5. ์ž‘์—… (`/tasks`) **ํƒœ์Šคํฌ ๊ด€๋ฆฌ ๋ฐ ์‹คํ–‰ ์ถ”์ ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **์ž‘์—… ๋ชฉ๋ก ๋ทฐ** - ์นด๋“œ ํ˜•ํƒœ์˜ ์ž‘์—… ํ‘œ์‹œ - ์ƒํƒœ๋ณ„ ํ•„ํ„ฐ๋ง (๋Œ€๊ธฐ์ค‘/์ง„ํ–‰์ค‘/์™„๋ฃŒ/์ฐจ๋‹จ๋จ) - ์šฐ์„ ์ˆœ์œ„๋ณ„ ์ •๋ ฌ - ๋‹ด๋‹น์ž๋ณ„ ํ•„ํ„ฐ๋ง - **์ž‘์—… ์ƒ์„ธ๋ณด๊ธฐ** (`/tasks/[id]`) - **๊ธฐ๋ณธ ์ •๋ณด**: ์ œ๋ชฉ, ์„ค๋ช…, ์ƒํƒœ, ์šฐ์„ ์ˆœ์œ„, ๋งˆ๊ฐ์ผ - **์—ฐ๊ฒฐ ์ •๋ณด**: ์—ฐ๊ฒฐ๋œ ํ”„๋กœ์ ํŠธ, ์„ค๊ณ„ - **์ง„ํ–‰ ์ƒํ™ฉ**: ์ง„ํ–‰๋ฅ  ๋ฐ ์‹œ๊ฐ„ ์ถ”์  - **์˜์กด์„ฑ**: ์„ ํ–‰ ์ž‘์—… ๋ฐ ํ›„์† ์ž‘์—… - **๋Œ“๊ธ€**: ์ž‘์—… ๊ด€๋ จ ์†Œํ†ต ๊ธฐ๋ก - **์ž‘์—… ํŽธ์ง‘** (`/tasks/[id]/edit`) - ๋ชจ๋“  ์ž‘์—… ์ •๋ณด ์ˆ˜์ • - ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฐ ์ง„ํ–‰๋ฅ  ์—…๋ฐ์ดํŠธ - ๋‹ด๋‹น์ž ๋ณ€๊ฒฝ - ๋งˆ๊ฐ์ผ ์กฐ์ • - **์ƒˆ ์ž‘์—… ์ƒ์„ฑ** (`/tasks/new`) - ์ œ๋ชฉ, ์„ค๋ช…, ์šฐ์„ ์ˆœ์œ„ ์„ค์ • - ํ”„๋กœ์ ํŠธ/์„ค๊ณ„ ์—ฐ๊ฒฐ - ๋งˆ๊ฐ์ผ ๋ฐ ๋‹ด๋‹น์ž ์ง€์ • - ์˜์กด์„ฑ ์„ค์ • #### ์ž‘์—… ์ƒํƒœ - **pending**: ๋Œ€๊ธฐ์ค‘ (์ž‘์—… ์ค€๋น„ ์™„๋ฃŒ, ์‹œ์ž‘ ๋Œ€๊ธฐ) - **in_progress**: ์ง„ํ–‰์ค‘ (ํ˜„์žฌ ์ž‘์—… ์ค‘) - **completed**: ์™„๋ฃŒ (์ž‘์—… ์™„๋ฃŒ ๋ฐ ๊ฒ€์ฆ๋จ) - **blocked**: ์ฐจ๋‹จ๋จ (์™ธ๋ถ€ ์š”์ธ์œผ๋กœ ์ง„ํ–‰ ๋ถˆ๊ฐ€) - **deferred**: ์—ฐ๊ธฐ๋จ (์šฐ์„ ์ˆœ์œ„ ๋ณ€๊ฒฝ์œผ๋กœ ์—ฐ๊ธฐ) #### ์‚ฌ์šฉ๋ฒ• 1. **์ผ์ผ ์ž‘์—… ๊ด€๋ฆฌ**: ``` ๋Œ€๊ธฐ์ค‘ ์ž‘์—… ์„ ํƒ โ†’ ์ง„ํ–‰์ค‘์œผ๋กœ ๋ณ€๊ฒฝ โ†’ ์ž‘์—… ์ˆ˜ํ–‰ โ†’ ์™„๋ฃŒ๋กœ ๋ณ€๊ฒฝ ``` 2. **์˜์กด์„ฑ ๊ด€๋ฆฌ**: - ์„ ํ–‰ ์ž‘์—… ์™„๋ฃŒ ํ›„ ์ž๋™์œผ๋กœ ํ›„์† ์ž‘์—… ํ™œ์„ฑํ™” - ์ˆœํ™˜ ์˜์กด์„ฑ ์ž๋™ ํƒ์ง€ ๋ฐ ๊ฒฝ๊ณ  3. **ํŒ€ ํ˜‘์—…**: - ๋‹ด๋‹น์ž๋ณ„ ์ž‘์—… ํ• ๋‹น - ๋Œ“๊ธ€์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์†Œํ†ต --- ### ๐Ÿงช 6. ํ…Œ์ŠคํŠธ (`/tests`) **ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ด€๋ฆฌ ๋ฐ ์‹คํ–‰ ์ถ”์ ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ชฉ๋ก** - ํ…Œ์ŠคํŠธ ํƒ€์ž…๋ณ„ ๋ถ„๋ฅ˜ (๋‹จ์œ„/ํ†ตํ•ฉ/์‹œ์Šคํ…œ/์ธ์ˆ˜) - ์‹คํ–‰ ์ƒํƒœ ์ถ”์  (๋Œ€๊ธฐ/์‹คํ–‰์ค‘/ํ†ต๊ณผ/์‹คํŒจ) - ์ž๋™ํ™” ์ƒํƒœ ํ‘œ์‹œ - **ํ…Œ์ŠคํŠธ ์ƒ์„ธ๋ณด๊ธฐ** (`/tests/[id]`) - **ํ…Œ์ŠคํŠธ ์ •๋ณด**: ์ œ๋ชฉ, ํƒ€์ž…, ๋ณต์žก๋„, ์˜ˆ์ƒ ์†Œ์š”์‹œ๊ฐ„ - **์‹คํ–‰ ๋‹จ๊ณ„**: ์ƒ์„ธํ•œ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๋ณ„ ์ ˆ์ฐจ - **์˜ˆ์ƒ ๊ฒฐ๊ณผ**: ์˜ˆ์ƒ๋˜๋Š” ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ - **์‹คํ–‰ ๊ธฐ๋ก**: ๊ณผ๊ฑฐ ์‹คํ–‰ ๊ฒฐ๊ณผ ํžˆ์Šคํ† ๋ฆฌ - **์—ฐ๊ฒฐ ์ •๋ณด**: ๊ด€๋ จ ์ž‘์—… ๋ฐ ์„ค๊ณ„ - **ํ…Œ์ŠคํŠธ ํŽธ์ง‘** (`/tests/[id]/edit`) - ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ „์ฒด ์ˆ˜์ • - ์‹คํ–‰ ๋‹จ๊ณ„ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ - ์ž๋™ํ™” ์„ค์ • ๋ณ€๊ฒฝ #### ํ…Œ์ŠคํŠธ ํƒ€์ž… - **unit**: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ - **integration**: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ - **system**: ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ - **acceptance**: ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ - **regression**: ํšŒ๊ท€ ํ…Œ์ŠคํŠธ #### ์ž๋™ํ™” ์ƒํƒœ - **manual**: ์ˆ˜๋™ ํ…Œ์ŠคํŠธ - **automated**: ์ž๋™ํ™” ์™„๋ฃŒ - **semi_automated**: ๋ถ€๋ถ„ ์ž๋™ํ™” #### ์‚ฌ์šฉ๋ฒ• 1. **ํ…Œ์ŠคํŠธ ์ƒ์„ฑ**: ๊ด€๋ จ ์ž‘์—… โ†’ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ƒ์„ฑ โ†’ ์‹คํ–‰ ๋‹จ๊ณ„ ์ •์˜ 2. **ํ…Œ์ŠคํŠธ ์‹คํ–‰**: ํ…Œ์ŠคํŠธ ์„ ํƒ โ†’ ์‹คํ–‰ โ†’ ๊ฒฐ๊ณผ ๊ธฐ๋ก 3. **์ž๋™ํ™”**: ์ˆ˜๋™ ํ…Œ์ŠคํŠธ โ†’ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์—ฐ๊ฒฐ โ†’ ์ž๋™ ์‹คํ–‰ --- ### ๐Ÿ“„ 7. ๋ฌธ์„œ (`/documents`) **์ค‘์•™ํ™”๋œ ๋ฌธ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **๋ฌธ์„œ ๋ชฉ๋ก** - ๋ฌธ์„œ ํƒ€์ž…๋ณ„ ํ•„ํ„ฐ๋ง - ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ถ„๋ฅ˜ - ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ - ์ƒ์„ฑ์ผ/์ˆ˜์ •์ผ ์ •๋ ฌ - **์ „๋ฌธ ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ** - **Full-Text Search**: ๋ฌธ์„œ ๋‚ด์šฉ ์ „์ฒด ๊ฒ€์ƒ‰ - **ํƒœ๊ทธ ๊ฒ€์ƒ‰**: ๊ด€๋ จ ํƒœ๊ทธ๋กœ ๋น ๋ฅธ ํ•„ํ„ฐ๋ง - **์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰**: ํ”„๋กœ์ ํŠธ๋ณ„, ๋‹จ๊ณ„๋ณ„ ๋ถ„๋ฅ˜ - **๋ณตํ•ฉ ๊ฒ€์ƒ‰**: ์—ฌ๋Ÿฌ ์กฐ๊ฑด ๋™์‹œ ์ ์šฉ - **๋ฌธ์„œ ์ƒ์„ธ๋ณด๊ธฐ** (`/documents/[id]`) - **๋ฌธ์„œ ๋‚ด์šฉ**: ๋งˆํฌ๋‹ค์šด ๋ Œ๋”๋ง ์ง€์› - **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ**: ํƒ€์ž…, ์นดํ…Œ๊ณ ๋ฆฌ, ํƒœ๊ทธ, ๋ฒ„์ „ - **์—ฐ๊ฒฐ ์ •๋ณด**: ๊ด€๋ จ PRD, ์ž‘์—…, ์„ค๊ณ„ - **๋ณ€๊ฒฝ ๊ธฐ๋ก**: ๋ฌธ์„œ ์ˆ˜์ • ํžˆ์Šคํ† ๋ฆฌ - **๋ฌธ์„œ ํŽธ์ง‘** (`/documents/[id]/edit`) - ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ - ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ - ํƒœ๊ทธ ๊ด€๋ฆฌ - ๋ฒ„์ „ ๊ด€๋ฆฌ (์ž๋™ ์ฆ๊ฐ€) #### ๋ฌธ์„œ ํƒ€์ž… - **test_guide**: ํ…Œ์ŠคํŠธ ๊ฐ€์ด๋“œ ๋ฐ ๋งค๋‰ด์–ผ - **test_results**: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ - **analysis**: ๋ถ„์„ ๋ฆฌํฌํŠธ ๋ฐ ์—ฐ๊ตฌ ๋ฌธ์„œ - **report**: ์ผ๋ฐ˜ ๋ณด๊ณ ์„œ ๋ฐ ์š”์•ฝ - **checklist**: ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ ๋ชฉ๋ก - **specification**: ๊ธฐ์ˆ  ์‚ฌ์–‘์„œ - **meeting_notes**: ํšŒ์˜๋ก ๋ฐ ๋…ผ์˜์‚ฌํ•ญ - **decision_log**: ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ๋ก ๋ฐ ๊ทผ๊ฑฐ #### ์‚ฌ์šฉ๋ฒ• 1. **๋ฌธ์„œ ์ƒ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ**: ``` ๋ฌธ์„œ ํƒ€์ž… ์„ ํƒ โ†’ ์ œ๋ชฉ/๋‚ด์šฉ ์ž‘์„ฑ โ†’ ํƒœ๊ทธ ์ถ”๊ฐ€ โ†’ ์—ฐ๊ฒฐ ์„ค์ • โ†’ ์ €์žฅ ``` 2. **๊ฒ€์ƒ‰ ํ™œ์šฉ๋ฒ•**: - **ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰**: ์ œ๋ชฉ, ๋‚ด์šฉ์—์„œ ํ‚ค์›Œ๋“œ ์ฐพ๊ธฐ - **ํƒœ๊ทธ ๊ฒ€์ƒ‰**: ํ”„๋กœ์ ํŠธ๋ช…, ๊ธฐ์ˆ  ์Šคํƒ ๋“ฑ์œผ๋กœ ํ•„ํ„ฐ๋ง - **๋ณตํ•ฉ ๊ฒ€์ƒ‰**: "ํ…Œ์ŠคํŠธ AND ๊ฒฐ๊ณผ AND phase_2.6" 3. **๋ฒ„์ „ ๊ด€๋ฆฌ**: - ๋ฌธ์„œ ์ˆ˜์ • ์‹œ ์ž๋™์œผ๋กœ ๋ฒ„์ „ ์ฆ๊ฐ€ - ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์  --- ### ๐Ÿ“‹ 8. ์นธ๋ฐ˜ ๋ณด๋“œ (`/kanban`) **์‹œ๊ฐ์  ์ž‘์—… ํ๋ฆ„ ๊ด€๋ฆฌ** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ** - ์ž‘์—… ์นด๋“œ๋ฅผ ์ƒํƒœ ๊ฐ„ ์ž์œ ๋กญ๊ฒŒ ์ด๋™ - ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ - ์‹œ๊ฐ์  ์ž‘์—… ํ๋ฆ„ ๊ด€๋ฆฌ - **3๋‹จ๊ณ„ ์›Œํฌํ”Œ๋กœ์šฐ** - **๐Ÿ“‹ ๋Œ€๊ธฐ์ค‘ (To Do)**: ๊ณ„ํš๋œ ์ž‘์—…๋“ค - **๐Ÿ”„ ์ง„ํ–‰์ค‘ (In Progress)**: ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—… - **โœ… ์™„๋ฃŒ (Done)**: ์™„๋ฃŒ๋œ ์ž‘์—…๋“ค - **์ž‘์—… ์นด๋“œ ์ •๋ณด** - ์ž‘์—… ์ œ๋ชฉ ๋ฐ ์„ค๋ช… - ์šฐ์„ ์ˆœ์œ„ ์ƒ‰์ƒ ํ‘œ์‹œ - ๋‹ด๋‹น์ž ์•„๋ฐ”ํƒ€ - ๋งˆ๊ฐ์ผ ํ‘œ์‹œ - ํƒœ๊ทธ ๋ฐ ๋ผ๋ฒจ #### ์‚ฌ์šฉ๋ฒ• 1. **์ผ์ผ ์Šคํƒ ๋“œ์—…**: ์นธ๋ฐ˜ ๋ณด๋“œ๋กœ ํŒ€ ํ˜„ํ™ฉ ๊ณต์œ  2. **์ž‘์—… ์ด๋™**: ๋“œ๋ž˜๊ทธ๋กœ ์ž‘์—… ์ƒํƒœ ๋ณ€๊ฒฝ 3. **๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…**: ํŠน์ • ๋‹จ๊ณ„์— ์ž‘์—…์ด ๋ชฐ๋ฆฌ๋Š” ํ˜„์ƒ ๋ชจ๋‹ˆํ„ฐ๋ง 4. **ํŒ€ ๊ท ํ˜•**: ๋‹ด๋‹น์ž๋ณ„ ์ž‘์—… ๋ถ„๋ฐฐ ํ˜„ํ™ฉ ํ™•์ธ --- ### ๐Ÿ“Š 9. ๊ฐ„ํŠธ ์ฐจํŠธ (`/gantt`) **ํ”„๋กœ์ ํŠธ ํƒ€์ž„๋ผ์ธ ์‹œ๊ฐํ™”** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **D3.js ๊ธฐ๋ฐ˜ ๊ฐ„ํŠธ ์ฐจํŠธ** - ์ž‘์—…๋ณ„ ์‹œ์ž‘/์ข…๋ฃŒ์ผ ์‹œ๊ฐํ™” - ์˜์กด์„ฑ ๊ด€๊ณ„ ํ™”์‚ดํ‘œ ํ‘œ์‹œ - ๋งˆ์ผ์Šคํ†ค ํ‘œ์‹œ - ์ง„ํ–‰๋ฅ  ๋ฐ” ํ‘œ์‹œ - **์ƒํ˜ธ์ž‘์šฉ ๊ธฐ๋Šฅ** - ์คŒ ์ธ/์•„์›ƒ์œผ๋กœ ๊ธฐ๊ฐ„ ์กฐ์ ˆ - ์ž‘์—… ํด๋ฆญ ์‹œ ์ƒ์„ธ ์ •๋ณด ํ‘œ์‹œ - ๋“œ๋ž˜๊ทธ๋กœ ์ผ์ • ์กฐ์ • - ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ - **ํƒ€์ž„๋ผ์ธ ๊ด€๋ฆฌ** - ์ฃผ/์›”/๋ถ„๊ธฐ๋ณ„ ๋ทฐ ์ „ํ™˜ - ์˜ค๋Š˜ ๋‚ ์งœ ํ•˜์ด๋ผ์ดํŠธ - ์ง€์—ฐ ์ž‘์—… ์ƒ‰์ƒ ๊ฒฝ๊ณ  - ํฌ๋ฆฌํ‹ฐ์ปฌ ํŒจ์Šค ํ‘œ์‹œ #### ์‚ฌ์šฉ๋ฒ• 1. **ํ”„๋กœ์ ํŠธ ๊ณ„ํš**: ์ „์ฒด ํ”„๋กœ์ ํŠธ ํƒ€์ž„๋ผ์ธ ์ˆ˜๋ฆฝ 2. **์ผ์ • ๊ด€๋ฆฌ**: ์ž‘์—… ๊ฐ„ ์˜์กด์„ฑ ๋ฐ ์ˆœ์„œ ์กฐ์ • 3. **์ง„ํ–‰ ๋ชจ๋‹ˆํ„ฐ๋ง**: ์‹ค์‹œ๊ฐ„ ์ง„ํ–‰๋ฅ  ์ถ”์  4. **๋ฆฌ์†Œ์Šค ๊ณ„ํš**: ๋‹ด๋‹น์ž๋ณ„ ์ž‘์—… ๋ถ„๋ฐฐ ๊ณ„ํš --- ### ๐Ÿ”— 10. ๊ด€๊ณ„๋„ (`/network`) **ํ”„๋กœ์ ํŠธ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ด€๊ณ„ ์‹œ๊ฐํ™”** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **Vis.js ๊ธฐ๋ฐ˜ ๋„คํŠธ์›Œํฌ ๊ทธ๋ž˜ํ”„** - PRD, ์„ค๊ณ„, ์ž‘์—…, ํ…Œ์ŠคํŠธ ๊ฐ„์˜ ๊ด€๊ณ„ ์‹œ๊ฐํ™” - ๋…ธ๋“œ ํƒ€์ž…๋ณ„ ์ƒ‰์ƒ ๊ตฌ๋ถ„ - ์—ฃ์ง€๋ฅผ ํ†ตํ•œ ๊ด€๊ณ„ ํ‘œํ˜„ - ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„ - **ํ•„ํ„ฐ๋ง ๋ฐ ๊ฒ€์ƒ‰** - **ํƒ€์ž… ํ•„ํ„ฐ**: ํŠน์ • ์—”ํ‹ฐํ‹ฐ ํƒ€์ž…๋งŒ ํ‘œ์‹œ - **ํ”„๋กœ์ ํŠธ ํ•„ํ„ฐ**: ํŠน์ • ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„ ๋‚ด ๊ด€๊ณ„ - **๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ**: ๋…ธ๋“œ๋ช…์œผ๋กœ ๋น ๋ฅธ ์ฐพ๊ธฐ - **๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ**: ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ vs ๊ณ„์ธตํ˜• - **ํ†ต๊ณ„ ์ •๋ณด** - ์ „์ฒด ๋…ธ๋“œ/์—ฃ์ง€ ์ˆ˜ - ์—ฐ๊ฒฐ๋œ ์—”ํ‹ฐํ‹ฐ ๋น„์œจ - ๊ณ ๋ฆฝ๋œ ๋…ธ๋“œ ํƒ์ง€ #### ๋ ˆ์ด์•„์›ƒ ์˜ต์…˜ - **๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜**: ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐฐ์น˜, ์—ฐ๊ด€์„ฑ ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง - **๊ณ„์ธตํ˜•**: ์—”ํ‹ฐํ‹ฐ ํƒ€์ž…๋ณ„ ๋ ˆ์ด์–ด ๊ตฌ์กฐ #### ์‚ฌ์šฉ๋ฒ• 1. **๊ด€๊ณ„ ๋ถ„์„**: ํ”„๋กœ์ ํŠธ ๋‚ด ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ์—ฐ๊ฒฐ ์ƒํƒœ ํŒŒ์•… 2. **์˜์กด์„ฑ ์ถ”์ **: ์ž‘์—… ๊ฐ„ ์˜์กด์„ฑ ์‹œ๊ฐ์  ํ™•์ธ 3. **์˜ํ–ฅ๋„ ๋ถ„์„**: ํŠน์ • ๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ์˜ํ–ฅ ๋ฒ”์œ„ ๋ถ„์„ 4. **๊ณ ๋ฆฝ ์—”ํ‹ฐํ‹ฐ ๋ฐœ๊ฒฌ**: ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ž‘์—…/๋ฌธ์„œ ํƒ์ง€ --- ### ๐Ÿ—„๏ธ 11. DB ๊ด€๋ฆฌ (`/database`) **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง์ ‘ ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค** #### ์ฃผ์š” ๊ธฐ๋Šฅ - **ํ…Œ์ด๋ธ” ๋ชฉ๋ก** - ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ํ‘œ์‹œ - ํ…Œ์ด๋ธ”๋ณ„ ๋ ˆ์ฝ”๋“œ ์ˆ˜ ํ‘œ์‹œ - ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ ์ •๋ณด - **๋ฐ์ดํ„ฐ ์กฐํšŒ** - ํ…Œ์ด๋ธ”๋ณ„ ๋ฐ์ดํ„ฐ ๋ธŒ๋ผ์šฐ์ง• - ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ง€์› - ์ •๋ ฌ ๋ฐ ํ•„ํ„ฐ๋ง - SQL ์ฟผ๋ฆฌ ์‹คํ–‰ - **๋ฐ์ดํ„ฐ ํŽธ์ง‘** - ๋ ˆ์ฝ”๋“œ ์ง์ ‘ ํŽธ์ง‘ - ์ƒˆ ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€ - ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ - ์ผ๊ด„ ์ž‘์—… - **์‹œ์Šคํ…œ ๊ด€๋ฆฌ** - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… - ์Šคํ‚ค๋งˆ ์ •๋ณด ํ™•์ธ - ์ธ๋ฑ์Šค ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง #### ์ฃผ์š” ํ…Œ์ด๋ธ” - **prds**: ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ - **designs**: ์„ค๊ณ„ ๋ฌธ์„œ - **tasks**: ์ž‘์—… ํ•ญ๋ชฉ - **test_cases**: ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค - **documents**: ๋ฌธ์„œ ์ €์žฅ์†Œ - **projects**: ํ”„๋กœ์ ํŠธ ์ •๋ณด #### ์‚ฌ์šฉ๋ฒ• 1. **๋ฐ์ดํ„ฐ ์ •๋ฆฌ**: ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ ์ •๋ฆฌ 2. **๋ฐฑ์—… ๊ด€๋ฆฌ**: ์ค‘์š” ๋ฐ์ดํ„ฐ ์ •๊ธฐ ๋ฐฑ์—… 3. **์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง**: ํ…Œ์ด๋ธ” ํฌ๊ธฐ ๋ฐ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ํ™•์ธ 4. **๋ฐ์ดํ„ฐ ๋ถ„์„**: SQL ์ฟผ๋ฆฌ๋กœ ์‹ฌํ™” ๋ถ„์„ --- ## ๐Ÿค– MCP ์„œ๋ฒ„ ์‚ฌ์šฉ๋ฒ• WorkflowMCP๋Š” Claude Code์™€ ์™„์ „ํžˆ ํ†ตํ•ฉ๋œ 35๊ฐœ์˜ MCP ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ### MCP ์„œ๋ฒ„ ์‹œ์ž‘ ```bash # MCP ์„œ๋ฒ„ ์‹คํ–‰ npm start # ๋˜๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ npm run dev ``` ### Claude Code ์—ฐ๋™ ์„ค์ • `.mcp.json` ํŒŒ์ผ์— ๋‹ค์Œ ์„ค์ • ์ถ”๊ฐ€: ```json { "mcpServers": { "workflow-mcp": { "command": "node", "args": ["src/index.js"], "type": "stdio", "env": {} } } } ``` ### 35๊ฐœ MCP ๋„๊ตฌ ์ „์ฒด ๋ชฉ๋ก #### ๐Ÿ“‹ PRD ๊ด€๋ฆฌ (8๊ฐœ ๋„๊ตฌ) ```javascript // 1. PRD ์ƒ์„ฑ create_prd({ title: "์‚ฌ์šฉ์ž ์ธ์ฆ ์‹œ์Šคํ…œ", description: "JWT ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์‹œ์Šคํ…œ", requirements: ["ํšŒ์›๊ฐ€์ž…", "๋กœ๊ทธ์ธ", "๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •"], acceptance_criteria: ["๋ณด์•ˆ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ", "์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ"], priority: "high" }) // 2. PRD ๋ชฉ๋ก ์กฐํšŒ list_prds() // 3. PRD ์ƒ์„ธ ์กฐํšŒ get_prd({ prd_id: "prd_123" }) // 4. PRD ์—…๋ฐ์ดํŠธ update_prd({ prd_id: "prd_123", updates: { status: "approved" } }) // 5. PRD ์‚ญ์ œ delete_prd({ prd_id: "prd_123" }) // 6. PRD ๊ฒ€์ฆ validate_prd({ prd_id: "prd_123" }) // 7. PRD-๊ณ„ํš ์—ฐ๊ฒฐ link_prd_to_plan({ prd_id: "prd_123", plan_id: "plan_456" }) // 8. ์—ฐ๊ฒฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ get_linked_data({ entity_type: "prd", entity_id: "prd_123" }) ``` #### โœ… ์ž‘์—… ๊ด€๋ฆฌ (10๊ฐœ ๋„๊ตฌ) ```javascript // 1. ์ž‘์—… ์ƒ์„ฑ create_task({ title: "๋กœ๊ทธ์ธ API ๊ฐœ๋ฐœ", description: "JWT ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ API", priority: "high", status: "pending", due_date: "2025-01-15", assignee: "๊ฐœ๋ฐœ์žA" }) // 2. ์ž‘์—… ๋ชฉ๋ก ์กฐํšŒ list_tasks({ status: "pending", priority: "high" }) // 3. ์ž‘์—… ์ƒ์„ธ ์กฐํšŒ get_task({ task_id: "task_123" }) // 4. ์ž‘์—… ์—…๋ฐ์ดํŠธ update_task({ task_id: "task_123", updates: { status: "in_progress", progress: 50 } }) // 5. ์ž‘์—… ์‚ญ์ œ delete_task({ task_id: "task_123" }) // 6. ์ž‘์—… ์˜์กด์„ฑ ์ถ”๊ฐ€ add_task_dependency({ dependent_task_id: "task_456", prerequisite_task_id: "task_123" }) // 7. ์˜์กด์„ฑ ์ œ๊ฑฐ remove_task_dependency({ dependent_task_id: "task_456", prerequisite_task_id: "task_123" }) // 8. ์˜์กด์„ฑ ์กฐํšŒ get_task_dependencies({ task_id: "task_123" }) // 9. ์ž๋™ ์ƒํƒœ ์—…๋ฐ์ดํŠธ auto_update_task_status() // 10. ์›Œํฌํ”Œ๋กœ์šฐ ๊ฒ€์ฆ validate_workflow() ``` #### ๐Ÿ“… ๊ณ„ํš ๊ด€๋ฆฌ (8๊ฐœ ๋„๊ตฌ) ```javascript // 1. ๊ณ„ํš ์ƒ์„ฑ create_plan({ title: "Q1 ๊ฐœ๋ฐœ ๊ณ„ํš", description: "1๋ถ„๊ธฐ ์ฃผ์š” ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ", start_date: "2025-01-01", end_date: "2025-03-31", status: "active" }) // 2. ๊ณ„ํš ๋ชฉ๋ก ์กฐํšŒ list_plans({ status: "active" }) // 3. ๊ณ„ํš ์ƒ์„ธ ์กฐํšŒ get_plan({ plan_id: "plan_123" }) // 4. ๊ณ„ํš ์—…๋ฐ์ดํŠธ update_plan({ plan_id: "plan_123", updates: { status: "completed", completion_percentage: 100 } }) // 5. ๊ณ„ํš ์‚ญ์ œ delete_plan({ plan_id: "plan_123" }) // 6. ๊ณ„ํš-์ž‘์—… ์—ฐ๊ฒฐ link_plan_to_tasks({ plan_id: "plan_123", task_ids: ["task_456", "task_789"] }) // 7. ์ง„ํ–‰๋ฅ  ๋™๊ธฐํ™” sync_plan_progress({ plan_id: "plan_123" }) // 8. ์ง„ํ–‰ ํƒ€์ž„๋ผ์ธ ์กฐํšŒ get_progress_timeline({ plan_id: "plan_123" }) ``` #### ๐Ÿ“„ ๋ฌธ์„œ ๊ด€๋ฆฌ (9๊ฐœ ๋„๊ตฌ) ```javascript // 1. ๋ฌธ์„œ ์ƒ์„ฑ create_document({ title: "API ์„ค๊ณ„ ๋ช…์„ธ์„œ", content: "# API ์„ค๊ณ„\n\n## ์ธ์ฆ API\n...", doc_type: "specification", category: "backend", tags: ["api", "authentication", "backend"] }) // 2. ๋ฌธ์„œ ๋ชฉ๋ก ์กฐํšŒ list_documents({ doc_type: "specification", limit: 10 }) // 3. ๋ฌธ์„œ ์ƒ์„ธ ์กฐํšŒ get_document({ document_id: 123 }) // 4. ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ update_document({ document_id: 123, title: "์—…๋ฐ์ดํŠธ๋œ API ๋ช…์„ธ์„œ", content: "์ˆ˜์ •๋œ ๋‚ด์šฉ...", status: "approved" }) // 5. ๋ฌธ์„œ ์‚ญ์ œ delete_document({ document_id: 123 }) // 6. ๋ฌธ์„œ ๊ฒ€์ƒ‰ (Full-Text Search) search_documents({ query: "authentication API", doc_type: "specification", limit: 5 }) // 7. ๋ฌธ์„œ ์—ฐ๊ฒฐ link_documents({ source_doc_id: 123, target_doc_id: 456, relationship_type: "references" }) // 8. ๋ฌธ์„œ ๊ด€๊ณ„ ์กฐํšŒ get_document_relations({ document_id: 123 }) // 9. ๋ฌธ์„œ ์š”์•ฝ get_document_summary({ document_id: 123 }) ``` --- ## ๐Ÿ”„ ์‹ค๋ฌด ์›Œํฌํ”Œ๋กœ์šฐ ### ์™„์ „ํ•œ ํ”„๋กœ์ ํŠธ ์ƒ๋ช…์ฃผ๊ธฐ #### 1๏ธโƒฃ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ ```javascript // Step 1: ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ create_project({ name: "์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ", description: "B2C ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ", start_date: "2025-01-01", end_date: "2025-06-30" }) // Step 2: PRD ์ž‘์„ฑ create_prd({ title: "์ด์ปค๋จธ์Šค ํ•ต์‹ฌ ๊ธฐ๋Šฅ", description: "์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ ํ•„์ˆ˜ ๊ธฐ๋Šฅ ์ •์˜", requirements: [ "์‚ฌ์šฉ์ž ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ", "์ƒํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๊ด€๋ฆฌ", "์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ", "์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ œ ์ฒ˜๋ฆฌ" ], acceptance_criteria: [ "๋™์‹œ ์‚ฌ์šฉ์ž 1000๋ช… ์ฒ˜๋ฆฌ", "ํŽ˜์ด์ง€ ๋กœ๋”ฉ 3์ดˆ ์ด๋‚ด", "99.9% ์—…ํƒ€์ž„" ] }) // Step 3: ๊ธฐ๋ณธ ๊ณ„ํš ์ˆ˜๋ฆฝ create_plan({ title: "Phase 1: ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ๊ตฌ์ถ•", description: "์ธ์ฆ ๋ฐ ๊ธฐ๋ณธ CRUD", start_date: "2025-01-01", end_date: "2025-02-28" }) ``` #### 2๏ธโƒฃ ์„ค๊ณ„ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋‹จ๊ณ„ ```javascript // ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ create_design({ title: "๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜", design_type: "system", requirement_id: "prd_123", details: ` # ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ## ์„œ๋น„์Šค ๊ตฌ์„ฑ - Auth Service: ์‚ฌ์šฉ์ž ์ธ์ฆ - Product Service: ์ƒํ’ˆ ๊ด€๋ฆฌ - Order Service: ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ - Payment Service: ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ## ๊ธฐ์ˆ  ์Šคํƒ - Backend: Node.js + Express - Database: PostgreSQL - Cache: Redis - Message Queue: RabbitMQ ` }) // API ์„ค๊ณ„ create_design({ title: "REST API ์„ค๊ณ„", design_type: "api", requirement_id: "prd_123", details: "API ์—”๋“œํฌ์ธํŠธ ๋ฐ ์Šคํ‚ค๋งˆ ์ •์˜" }) // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ create_design({ title: "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ERD", design_type: "database", requirement_id: "prd_123", details: "ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ฐ ๊ด€๊ณ„ ์ •์˜" }) ``` #### 3๏ธโƒฃ ์ž‘์—… ๋ถ„ํ•ด ๋ฐ ํ• ๋‹น ๋‹จ๊ณ„ ```javascript // ์ธ์ฆ ์„œ๋น„์Šค ์ž‘์—…๋“ค create_task({ title: "์‚ฌ์šฉ์ž ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ", description: "User ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ Sequelize ๋ชจ๋ธ ์ •์˜", priority: "high", design_id: "design_auth", estimated_hours: 8 }) create_task({ title: "JWT ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด ๊ตฌํ˜„", description: "ํ† ํฐ ์ƒ์„ฑ, ๊ฒ€์ฆ, ๊ฐฑ์‹  ๋กœ์ง", priority: "high", design_id: "design_auth", estimated_hours: 16 }) // ์ž‘์—… ์˜์กด์„ฑ ์„ค์ • add_task_dependency({ dependent_task_id: "task_jwt", prerequisite_task_id: "task_user_model" }) // ํ”„๋ก ํŠธ์—”๋“œ ์ž‘์—… create_task({ title: "๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„", description: "React ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ํผ", priority: "medium", design_id: "design_ui" }) ``` #### 4๏ธโƒฃ ํ…Œ์ŠคํŠธ ๊ณ„ํš ์ˆ˜๋ฆฝ ```javascript // ๋‹จ์œ„ ํ…Œ์ŠคํŠธ create_test_case({ title: "JWT ํ† ํฐ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ", type: "unit", task_id: "task_jwt", test_steps: [ "์œ ํšจํ•œ ํ† ํฐ์œผ๋กœ ๊ฒ€์ฆ ํ˜ธ์ถœ", "๋งŒ๋ฃŒ๋œ ํ† ํฐ์œผ๋กœ ๊ฒ€์ฆ ํ˜ธ์ถœ", "์ž˜๋ชป๋œ ํ˜•์‹ ํ† ํฐ์œผ๋กœ ๊ฒ€์ฆ ํ˜ธ์ถœ" ], expected_result: "๊ฐ ๊ฒฝ์šฐ์— ๋งž๋Š” ์ ์ ˆํ•œ ์‘๋‹ต ๋ฐ˜ํ™˜" }) // ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ create_test_case({ title: "๋กœ๊ทธ์ธ ํ”Œ๋กœ์šฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ", type: "integration", complexity: "Medium", estimated_duration: 30 }) ``` #### 5๏ธโƒฃ ๋ฌธ์„œํ™” ```javascript // ๊ธฐ์ˆ  ๋ฌธ์„œ create_document({ title: "์ธ์ฆ ์„œ๋น„์Šค ๊ธฐ์ˆ  ๋ฌธ์„œ", content: ` # ์ธ์ฆ ์„œ๋น„์Šค ๋ฌธ์„œ ## ๊ฐœ์š” JWT ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์‹œ์Šคํ…œ ## API ๋ช…์„ธ - POST /auth/login - POST /auth/register - POST /auth/refresh ## ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ - ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„: 1์‹œ๊ฐ„ - ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ: 7์ผ `, doc_type: "specification", category: "authentication", tags: ["jwt", "auth", "security"] }) // ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ create_document({ title: "์ธ์ฆ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ", content: "ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ ์ด์Šˆ", doc_type: "test_results", category: "authentication" }) ``` #### 6๏ธโƒฃ ์ง„ํ–‰ ๋ชจ๋‹ˆํ„ฐ๋ง ```javascript // ์ง„ํ–‰๋ฅ  ์ถ”์  sync_plan_progress({ plan_id: "plan_123" }) get_progress_timeline({ plan_id: "plan_123" }) // ์ž๋™ ์ƒํƒœ ์—…๋ฐ์ดํŠธ (์˜์กด์„ฑ ๊ธฐ๋ฐ˜) auto_update_task_status() // ์ „์ฒด ํ”„๋กœ์ ํŠธ ๋Œ€์‹œ๋ณด๋“œ ํ™•์ธ get_project_dashboard() ``` --- ### ์ผ์ผ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ #### ๐ŸŒ… ์•„์นจ ๋ฃจํ‹ด 1. **๋Œ€์‹œ๋ณด๋“œ ํ™•์ธ** ```javascript get_project_dashboard() // ์ „์ฒด ํ˜„ํ™ฉ ํŒŒ์•… list_tasks({ status: "in_progress", assignee: "๋‚˜" }) // ์ง„ํ–‰์ค‘ ์ž‘์—… ``` 2. **์˜ค๋Š˜์˜ ์ž‘์—… ์„ ํƒ** - ์นธ๋ฐ˜ ๋ณด๋“œ(`/kanban`)์—์„œ ๋Œ€๊ธฐ์ค‘ ์ž‘์—… ํ™•์ธ - ์šฐ์„ ์ˆœ์œ„์™€ ์˜์กด์„ฑ ๊ณ ๋ คํ•˜์—ฌ ์ž‘์—… ์„ ํƒ - ์ž‘์—… ์ƒํƒœ๋ฅผ '์ง„ํ–‰์ค‘'์œผ๋กœ ๋ณ€๊ฒฝ #### ๐Ÿ”ง ๊ฐœ๋ฐœ ์ค‘ 3. **์ž‘์—… ์ง„ํ–‰ ์—…๋ฐ์ดํŠธ** ```javascript update_task({ task_id: "task_current", updates: { status: "in_progress", progress: 30, notes: "API ๊ธฐ๋ณธ ๊ตฌ์กฐ ์™„์„ฑ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ค‘" } }) ``` 4. **๋ฌธ์„œ ์ž‘์„ฑ** ```javascript create_document({ title: "๊ฐœ๋ฐœ ์ผ์ง€ - 2025-01-10", content: "์˜ค๋Š˜ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋ฐœ๊ฒฌํ•œ ์ด์Šˆ๋“ค", doc_type: "meeting_notes", category: "daily" }) ``` #### ๐ŸŒ† ๋งˆ๋ฌด๋ฆฌ 5. **์ž‘์—… ์™„๋ฃŒ ์ฒ˜๋ฆฌ** ```javascript update_task({ task_id: "task_current", updates: { status: "completed", progress: 100 } }) // ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ž‘์—… ํ™œ์„ฑํ™” auto_update_task_status() ``` 6. **๋‚ด์ผ ๊ณ„ํš** - ๊ฐ„ํŠธ ์ฐจํŠธ(`/gantt`)์—์„œ ๋‹ค์Œ ์ž‘์—… ํ™•์ธ - ์˜์กด์„ฑ ํ•ด๊ฒฐ ์—ฌ๋ถ€ ์ ๊ฒ€ --- ### ํŒ€ ํ˜‘์—… ์›Œํฌํ”Œ๋กœ์šฐ #### ๐Ÿ“… ์ฃผ๊ฐ„ ํšŒ์˜ ```javascript // ์ฃผ๊ฐ„ ์ง„ํ–‰๋ฅ  ๋ฆฌํฌํŠธ get_progress_timeline({ plan_id: "current_plan", period: "week" }) // ํŒ€๋ณ„ ์ž‘์—… ํ˜„ํ™ฉ list_tasks({ assignee: "ํŒ€์›A", status: ["in_progress", "blocked"] }) ``` #### ๐Ÿ”„ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ```javascript // ๋ฆฌ๋ทฐ ์š”์ฒญ ์ž‘์—… ์ƒ์„ฑ create_task({ title: "์ธ์ฆ API ์ฝ”๋“œ ๋ฆฌ๋ทฐ", description: "JWT ๊ตฌํ˜„ ๋กœ์ง ๊ฒ€ํ†  ํ•„์š”", priority: "high", assignee: "์‹œ๋‹ˆ์–ด๊ฐœ๋ฐœ์ž", task_type: "review" }) // ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ ๋ฌธ์„œํ™” create_document({ title: "์ธ์ฆ API ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ", content: "๊ฐœ์„ ์‚ฌํ•ญ ๋ฐ ์Šน์ธ ์—ฌ๋ถ€", doc_type: "decision_log", linked_entity_type: "task", linked_entity_id: "task_review" }) ``` --- ## ๐Ÿš€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ### 1. ๋ณต์žกํ•œ ์˜์กด์„ฑ ๊ด€๋ฆฌ #### ์ˆœํ™˜ ์˜์กด์„ฑ ํƒ์ง€ ```javascript // ์˜์กด์„ฑ ์ถ”๊ฐ€ ์‹œ ์ž๋™์œผ๋กœ ์ˆœํ™˜ ์˜์กด์„ฑ ๊ฒ€์‚ฌ add_task_dependency({ dependent_task_id: "task_A", prerequisite_task_id: "task_B" }) // โ†’ ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ์ˆœํ™˜ ๊ตฌ์กฐ ํƒ์ง€ ๋ฐ ๊ฒฝ๊ณ  ``` #### ํฌ๋ฆฌํ‹ฐ์ปฌ ํŒจ์Šค ๋ถ„์„ - ๊ฐ„ํŠธ ์ฐจํŠธ์—์„œ ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ์— ํ•„์ˆ˜์ ์ธ ์ž‘์—… ๊ฒฝ๋กœ ํ•˜์ด๋ผ์ดํŠธ - ์ง€์—ฐ ์‹œ ์ „์ฒด ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ž‘์—… ์‹๋ณ„ ### 2. ๊ณ ๊ธ‰ ๊ฒ€์ƒ‰ ๋ฐ ๋ถ„์„ #### Full-Text Search ํ™œ์šฉ ```javascript // ๋ณตํ•ฉ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ search_documents({ query: "authentication AND (JWT OR OAuth) AND security", doc_type: ["specification", "analysis"], category: "backend" }) // ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์—ฐ๊ด€ ๋ฌธ์„œ ์ฐพ๊ธฐ search_documents({ query: "project:ecommerce phase:development", limit: 20 }) ``` #### ๊ด€๊ณ„ ๋ถ„์„ - ๋„คํŠธ์›Œํฌ ๊ทธ๋ž˜ํ”„(`/network`)๋กœ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ์ˆจ๊ฒจ์ง„ ์—ฐ๊ฒฐ ๋ฐœ๊ฒฌ - ๊ณ ๋ฆฝ๋œ ์š”๊ตฌ์‚ฌํ•ญ์ด๋‚˜ ์ž‘์—… ํƒ์ง€ - ๊ณผ๋„ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ์ค‘์‹ฌ ๋…ธ๋“œ ์‹๋ณ„ ### 3. ์ž๋™ํ™” ๋ฐ ํšจ์œจ์„ฑ #### ์ž๋™ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ```javascript // ์„ ํ–‰ ์ž‘์—… ์™„๋ฃŒ ์‹œ ์ž๋™์œผ๋กœ ํ›„์† ์ž‘์—… ํ™œ์„ฑํ™” auto_update_task_status() // ๊ณ„ํš ์ง„ํ–‰๋ฅ  ์ž๋™ ๊ณ„์‚ฐ sync_plan_progress({ plan_id: "all" }) ``` #### ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ - ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” PRD ๊ตฌ์กฐ๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ €์žฅ - ์œ ์‚ฌํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์žฌ์‚ฌ์šฉ - ํ‘œ์ค€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ํ…œํ”Œ๋ฆฟ ### 4. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ #### ๋ฐฐ์น˜ ์ž‘์—… ```javascript // ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ์ƒ์„ฑ create_multiple_tasks([ { title: "์ž‘์—…1", priority: "high" }, { title: "์ž‘์—…2", priority: "medium" }, // ... ๋” ๋งŽ์€ ์ž‘์—… ]) // ๋Œ€๋Ÿ‰ ์—…๋ฐ์ดํŠธ update_multiple_tasks({ filter: { status: "pending", priority: "low" }, updates: { priority: "medium" } }) ``` #### ์„ฑ๋Šฅ ์ตœ์ ํ™” - SQLite WAL ๋ชจ๋“œ๋กœ ๋™์‹œ ์ ‘๊ทผ ์ตœ์ ํ™” - ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ๋น ๋ฅธ ๊ฒ€์ƒ‰ - ํŽ˜์ด์ง€๋„ค์ด์…˜์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ --- ## ๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ ### ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค #### 1. MCP ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์•ˆ ๋จ ```bash # ๋ฌธ์ œ ํ™•์ธ claude --debug /mcp # ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• cd workflow-mcp npm start # MCP ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ # .mcp.json ์„ค์ • ํ™•์ธ { "mcpServers": { "workflow-mcp": { "command": "node", "args": ["src/index.js"], "type": "stdio" } } } ``` #### 2. ์›น ๋Œ€์‹œ๋ณด๋“œ ์ ‘์† ์•ˆ ๋จ ```bash # ํฌํŠธ ์ถฉ๋Œ ํ™•์ธ netstat -ano | findstr :3301 # ๋Œ€์‹œ๋ณด๋“œ ์žฌ์‹œ์ž‘ cd dashboard npm run dev # ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ํด๋ฆฌ์–ด Ctrl+Shift+R (Chrome/Firefox) ``` #### 3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ค๋ฅ˜ ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฌ์ดˆ๊ธฐํ™” cd src/database node simple-migrate.js # ๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ chmod 755 data/ chmod 644 data/workflow.db ``` #### 4. ๊ฒ€์ƒ‰์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Œ ```sql -- FTS ํ…Œ์ด๋ธ” ์žฌ๊ตฌ์„ฑ DROP TABLE IF EXISTS documents_fts; CREATE VIRTUAL TABLE documents_fts USING fts5( title, content, tags ); -- ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋‹ค์‹œ ์ธ๋ฑ์‹ฑ INSERT INTO documents_fts(title, content, tags) SELECT title, content, tags FROM documents; ``` ### ์„ฑ๋Šฅ ์ตœ์ ํ™” #### 1. SQLite ์ตœ์ ํ™” ```sql -- WAL ๋ชจ๋“œ ํ™œ์„ฑํ™” PRAGMA journal_mode = WAL; -- ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ํ™œ์„ฑํ™” PRAGMA foreign_keys = ON; -- ์บ์‹œ ํฌ๊ธฐ ์ฆ๊ฐ€ PRAGMA cache_size = 10000; ``` #### 2. ์›น ๋Œ€์‹œ๋ณด๋“œ ์ตœ์ ํ™” - ์ด๋ฏธ์ง€ ์ตœ์ ํ™”: WebP ํ˜•์‹ ์‚ฌ์šฉ - ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์ง€ ๋กœ๋”ฉ - API ์‘๋‹ต ์บ์‹ฑ - ํŽ˜์ด์ง€๋„ค์ด์…˜์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ### ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ #### ์ •๊ธฐ ๋ฐฑ์—… ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… cp data/workflow.db backup/workflow_$(date +%Y%m%d).db # JSON ํŒŒ์ผ ๋ฐฑ์—… tar -czf backup/json_files_$(date +%Y%m%d).tar.gz data/prds/ data/tasks/ data/plans/ ``` #### ๋ณต๊ตฌ ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต๊ตฌ cp backup/workflow_20250110.db data/workflow.db # ์„œ๋น„์Šค ์žฌ์‹œ์ž‘ npm start cd dashboard && npm run dev ``` --- ## ๐Ÿ“ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ถ„์„ ### ํ•ต์‹ฌ ์„ฑ๊ณผ ์ง€ํ‘œ (KPI) #### ํ”„๋กœ์ ํŠธ ๊ฑด๊ฐ•๋„ - **์ง„ํ–‰๋ฅ **: ๊ณ„ํš ๋Œ€๋น„ ์‹ค์ œ ์ง„ํ–‰ ์ƒํ™ฉ - **์†๋„**: ์ฃผ๋‹น ์™„๋ฃŒ ์ž‘์—… ์ˆ˜ - **ํ’ˆ์งˆ**: ํ…Œ์ŠคํŠธ ํ†ต๊ณผ์œจ, ๋ฒ„๊ทธ ๋ฐœ์ƒ๋ฅ  - **์˜ˆ์ธก ์ •ํ™•๋„**: ์˜ˆ์ƒ vs ์‹ค์ œ ์†Œ์š” ์‹œ๊ฐ„ #### ํŒ€ ์ƒ์‚ฐ์„ฑ - **๊ฐœ์ธ๋ณ„ ์ž‘์—… ์™„๋ฃŒ๋Ÿ‰** - **ํ‰๊ท  ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„** - **๋ณ‘๋ชฉ ์ง€์  ๋ถ„์„** - **ํ˜‘์—… ํšจ์œจ์„ฑ**: ์˜์กด์„ฑ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ### ๋ฆฌํฌํŠธ ์ƒ์„ฑ #### ์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ ```javascript // ์ฃผ๊ฐ„ ์ง„ํ–‰ ํ˜„ํ™ฉ get_progress_timeline({ start_date: "2025-01-06", end_date: "2025-01-12" }) // ์™„๋ฃŒ๋œ ์ž‘์—… ๋ชฉ๋ก list_tasks({ status: "completed", updated_after: "2025-01-06" }) ``` #### ์›”๊ฐ„ ์š”์•ฝ ```javascript // ์›”๊ฐ„ ํ†ต๊ณ„ get_project_dashboard({ period: "month", include_trends: true }) // ๋ฌธ์„œํ™” ํ˜„ํ™ฉ list_documents({ created_after: "2025-01-01", doc_type: "all" }) ``` --- ## ๐ŸŽฏ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ### PRD ์ž‘์„ฑ ๊ฐ€์ด๋“œ๋ผ์ธ 1. **๋ช…ํ™•ํ•œ ๋ชฉํ‘œ**: ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ ์„ค์ • 2. **๊ตฌ์ฒด์  ์š”๊ตฌ์‚ฌํ•ญ**: ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ถ„ํ•ด 3. **๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์ธ์ˆ˜์กฐ๊ฑด**: ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ •์˜ 4. **์šฐ์„ ์ˆœ์œ„ ๋ช…ํ™•ํ™”**: ๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ ๊ธฐ์ค€ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ### ์ž‘์—… ๊ด€๋ฆฌ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค 1. **์ž‘์€ ๋‹จ์œ„**: 1-3์ผ ๋‚ด ์™„๋ฃŒ ๊ฐ€๋Šฅํ•œ ํฌ๊ธฐ๋กœ ๋ถ„ํ•  2. **๋ช…ํ™•ํ•œ ์„ค๋ช…**: ๋ˆ„๊ตฌ๋‚˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ์„ค๋ช… 3. **์ ์ ˆํ•œ ์˜์กด์„ฑ**: ๊ผญ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์„ค์ • 4. **์ •๊ธฐ์  ์—…๋ฐ์ดํŠธ**: ์ง„ํ–‰์ƒํ™ฉ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ ### ๋ฌธ์„œํ™” ์ „๋žต 1. **ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ**: ์ผ๊ด€๋œ ๋ฌธ์„œ ๊ตฌ์กฐ ์œ ์ง€ 2. **์‚ด์•„์žˆ๋Š” ๋ฌธ์„œ**: ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ๋ฌธ์„œ๋„ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ 3. **๊ฒ€์ƒ‰ ์ตœ์ ํ™”**: ์ ์ ˆํ•œ ํƒœ๊ทธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ ์‚ฌ์šฉ 4. **๋ฒ„์ „ ๊ด€๋ฆฌ**: ์ค‘์š” ๋ฌธ์„œ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ ์ถ”์  --- ## ๐Ÿ”ฎ ๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ• ### Claude Code์™€์˜ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ```javascript // Claude Code์—์„œ ์ง์ ‘ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ "์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ PRD๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๊ด€๋ จ ์ž‘์—…๋“ค์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊นŒ์ง€ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”." // โ†’ Claude๊ฐ€ ์ž๋™์œผ๋กœ: // 1. create_prd() ํ˜ธ์ถœ // 2. create_task() ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ // 3. create_test_case() ํ˜ธ์ถœ // 4. add_task_dependency() ํ˜ธ์ถœ ``` ### ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ - ์„ฑ๊ณตํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ €์žฅ - ์ƒˆ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ ํ…œํ”Œ๋ฆฟ ์ ์šฉ - ํ‘œ์ค€ํ™”๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ• ### ์™ธ๋ถ€ ๋„๊ตฌ ์—ฐ๋™ ์ค€๋น„ - GitHub Issues ์—ฐ๋™ API ์ค€๋น„ - Jira ํ‹ฐ์ผ“ ๋™๊ธฐํ™” ๊ธฐ๋Šฅ - Slack ์•Œ๋ฆผ ์—ฐ๋™ - ์ด๋ฉ”์ผ ๋ฆฌํฌํŠธ ์ž๋™ ๋ฐœ์†ก --- **์ด์ œ WorkflowMCP์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!** ์ด ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํšจ์œจ์ ์ธ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์™€ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด์„ธ์š”. ๐Ÿš€ --- **๋ฌธ์˜์‚ฌํ•ญ์ด๋‚˜ ์ถ”๊ฐ€ ๋„์›€์ด ํ•„์š”ํ•˜์‹œ๋ฉด GitHub Issues๋ฅผ ํ†ตํ•ด ์—ฐ๋ฝ์ฃผ์„ธ์š”.** **Made with โค๏ธ and Claude Code - The Future of AI-Integrated Development**

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/foswmine/workflow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server