# ๐ 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**