# π PRD: WorkflowMCP λμ보λ API ꡬν
## π― νλ‘μ νΈ κ°μ
### νλ‘μ νΈ λͺ©μ
**WorkflowMCP λμ보λμ API νμ₯ λ° ν΅ν©**μ ν΅ν΄ MCP λꡬμ λμ보λ κΈ°λ₯μ APIλ‘ μ κ·Όν μ μλ ν΅ν© μΈν°νμ΄μ€ ꡬμΆ
### λ°°κ²½
- WorkflowMCP μμ€ν
μ΄ κ΅¬μΆλμ΄ μκ³ μΉ λμ보λκ° μ΄μ μ€
- λμ보λμμ API μ¬μ© μ λ§€μ° μ μ°ν λμ νμΈ
- MCP λꡬλ€κ³Ό λμ보λ CRUD κΈ°λ₯μ APIλ‘ ν΅ν© μ 곡 νμ
- κΈ°μ‘΄ ꡬνλ APIλ μ μ§νκ³ , λλ½λ APIλ μΆκ° ꡬν
## π― λΉμ¦λμ€ λͺ©ν
### μ£Όμ λͺ©ν
1. **API ν΅ν©μ±**: λͺ¨λ MCP λꡬλ₯Ό REST APIλ‘ μ κ·Ό κ°λ₯
2. **λμ보λ μ°λ**: μΉ λμ보λ λͺ¨λ κΈ°λ₯μ APIλ‘ μ 곡
3. **νμ₯μ±**: μλ‘μ΄ MCP λꡬ μΆκ° μ μλ API λ§€ν
4. **μΌκ΄μ±**: ν΅μΌλ API μΈν°νμ΄μ€ λ° μλ΅ νμ
### μ±κ³Ό μ§ν
- **API 컀λ²λ¦¬μ§**: MCP λꡬ λλΉ API μ 곡 λΉμ¨ 95% μ΄μ
- **μλ΅ μκ°**: νκ· API μλ΅μκ° 500ms μ΄ν
- **μλ¬μ¨**: API νΈμΆ μ€ν¨μ¨ 1% μ΄ν
- **μ¬μ©μ±**: λμ보λ λͺ¨λ κΈ°λ₯μ APIλ‘ μν κ°λ₯
## π₯ λμ μ¬μ©μ
### Primary Users
- **Claude Code μ¬μ©μ**: MCP λꡬλ₯Ό HTTP APIλ‘ μ κ·Όνλ €λ κ°λ°μ
- **λμ보λ μ¬μ©μ**: μΉ μΈν°νμ΄μ€μ APIλ₯Ό νΌμ©νλ νλ‘μ νΈ κ΄λ¦¬μ
- **ν΅ν© κ°λ°μ**: WorkflowMCPλ₯Ό λ€λ₯Έ μμ€ν
κ³Ό μ°λνλ €λ κ°λ°μ
### Secondary Users
- **μλν μ€ν¬λ¦½νΈ**: CI/CDλ μλν λꡬμμ API νΈμΆ
- **λͺ¨λ°μΌ/λ°μ€ν¬ν± μ±**: λμ보λ λμ λ€μ΄ν°λΈ μ± κ°λ°μ
- **μ¨λνν° λꡬ**: WorkflowMCP λ°μ΄ν°λ₯Ό νμ©νλ €λ μΈλΆ λꡬ
## π§ ν΅μ¬ κΈ°λ₯ μꡬμ¬ν
### 1. MCP λꡬ API λ§€ν
#### 1.1 PRD κ΄λ¦¬ API
- `GET /api/prds` - PRD λͺ©λ‘ μ‘°ν
- `POST /api/prds` - μ PRD μμ±
- `GET /api/prds/{id}` - PRD μμΈ μ‘°ν
- `PUT /api/prds/{id}` - PRD μ
λ°μ΄νΈ
- `DELETE /api/prds/{id}` - PRD μμ
#### 1.2 Task κ΄λ¦¬ API
- `GET /api/tasks` - μμ
λͺ©λ‘ μ‘°ν
- `POST /api/tasks` - μ μμ
μμ±
- `GET /api/tasks/{id}` - μμ
μμΈ μ‘°ν
- `PUT /api/tasks/{id}` - μμ
μ
λ°μ΄νΈ
- `DELETE /api/tasks/{id}` - μμ
μμ
- `POST /api/tasks/{id}/dependencies` - μμ
μμ‘΄μ± μΆκ°
#### 1.3 Document κ΄λ¦¬ API
- `GET /api/documents` - λ¬Έμ λͺ©λ‘ μ‘°ν
- `POST /api/documents` - μ λ¬Έμ μμ±
- `GET /api/documents/{id}` - λ¬Έμ μμΈ μ‘°ν
- `PUT /api/documents/{id}` - λ¬Έμ μ
λ°μ΄νΈ
- `DELETE /api/documents/{id}` - λ¬Έμ μμ
- `GET /api/documents/search?q={query}` - λ¬Έμ κ²μ
#### 1.4 νλ‘μ νΈ λΆμ API
- `GET /api/projects/{id}/dashboard` - νλ‘μ νΈ λμ보λ λ°μ΄ν°
- `GET /api/projects/{id}/analytics` - νλ‘μ νΈ λΆμ λ°μ΄ν°
- `GET /api/progress/timeline` - μ§νλ₯ νμλΌμΈ
### 2. λμ보λ κΈ°λ₯ API
#### 2.1 λμ보λ νμ΄μ§ λ°μ΄ν°
- `GET /api/dashboard/overview` - μ 체 κ°μ λ°μ΄ν°
- `GET /api/dashboard/prds` - PRD κ΄λ¦¬ νμ΄μ§ λ°μ΄ν°
- `GET /api/dashboard/tasks` - μμ
κ΄λ¦¬ νμ΄μ§ λ°μ΄ν°
- `GET /api/dashboard/documents` - λ¬Έμ κ΄λ¦¬ νμ΄μ§ λ°μ΄ν°
#### 2.2 μ€μκ° μ
λ°μ΄νΈ
- `GET /api/events/stream` - Server-Sent Eventsλ‘ μ€μκ° μ
λ°μ΄νΈ
- `POST /api/events/trigger` - μλ μ΄λ²€νΈ νΈλ¦¬κ±°
### 3. ν΅ν© API κΈ°λ₯
#### 3.1 λ°°μΉ μμ
- `POST /api/batch/prds` - μ¬λ¬ PRD μΌκ΄ μμ±/μ
λ°μ΄νΈ
- `POST /api/batch/tasks` - μ¬λ¬ μμ
μΌκ΄ μμ±/μ
λ°μ΄νΈ
- `POST /api/batch/documents` - μ¬λ¬ λ¬Έμ μΌκ΄ μμ±/μ
λ°μ΄νΈ
#### 3.2 μ°κ²° κ΄λ¦¬
- `GET /api/connections` - μν°ν° κ° μ°κ²° κ΄κ³ μ‘°ν
- `POST /api/connections` - μν°ν° κ° μ°κ²° μμ±
- `DELETE /api/connections/{id}` - μ°κ²° μμ
## π§ κΈ°μ μ μꡬμ¬ν
### API νμ€
- **REST API**: HTTP/1.1 κΈ°λ° RESTful μΈν°νμ΄μ€
- **JSON ν¬λ§·**: λͺ¨λ μμ²/μλ΅μ JSON νμ
- **HTTP μν μ½λ**: νμ€ HTTP μν μ½λ μ¬μ©
- **API λ²μ **: URL κ²½λ‘μ λ²μ ν¬ν¨ (`/api/v1/`)
### μλ΅ νμ νμ€ν
```json
{
"success": true,
"data": { /* μ€μ λ°μ΄ν° */ },
"message": "μμ
μλ£",
"timestamp": "2025-09-11T10:30:00Z",
"version": "1.0"
}
```
### μλ¬ μ²λ¦¬
```json
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "νμ νλκ° λλ½λμμ΅λλ€",
"details": ["title νλλ νμμ
λλ€"]
},
"timestamp": "2025-09-11T10:30:00Z"
}
```
## π‘οΈ λ³΄μ μꡬμ¬ν
### μΈμ¦/μΈκ°
- **νμ¬ λ¨κ³**: μΈμ¦ μμ (λ‘컬 κ°λ° νκ²½)
- **μΆν νμ₯**: API ν€ κΈ°λ° μΈμ¦ μ€λΉ
### λ°μ΄ν° 보νΈ
- **μ
λ ₯ κ²μ¦**: λͺ¨λ API μ
λ ₯μ λν μ ν¨μ± κ²μ¬
- **SQL μΈμ μ
λ°©μ§**: Prepared Statement μ¬μ©
- **XSS λ°©μ§**: μΆλ ₯ λ°μ΄ν° μ΄μ€μΌμ΄ν μ²λ¦¬
## π μ±λ₯ μꡬμ¬ν
### μλ΅ μκ°
- **λ¨μΌ μ‘°ν**: 100ms μ΄ν
- **λͺ©λ‘ μ‘°ν**: 300ms μ΄ν
- **λ³΅ν© μμ
**: 500ms μ΄ν
- **λ°°μΉ μμ
**: 2μ΄ μ΄ν
### λμμ±
- **λμ API νΈμΆ**: 50κ° μ΄μ μ²λ¦¬ κ°λ₯
- **λ°μ΄ν°λ² μ΄μ€ μ°κ²°**: Connection pooling μ μ©
- **λ©λͺ¨λ¦¬ μ¬μ©**: ν λ©λͺ¨λ¦¬ 500MB μ΄ν
## π ν΅ν© μꡬμ¬ν
### κΈ°μ‘΄ μμ€ν
μ°λ
- **MCP μλ²**: κΈ°μ‘΄ MCP λꡬμ μμ νΈν
- **SQLite λ°μ΄ν°λ² μ΄μ€**: κΈ°μ‘΄ μ€ν€λ§ μ μ§
- **μΉ λμ보λ**: κΈ°μ‘΄ λμ보λμ λμΌν λ°μ΄ν° μ κ·Ό
### νμ₯μ±
- **μ MCP λꡬ**: μλ API μλν¬μΈνΈ μμ±
- **νλ¬κ·ΈμΈ μν€ν
μ²**: μ κΈ°λ₯ λͺ¨λ μ½κ² μΆκ°
- **API λ¬Έμ**: Swagger/OpenAPI μλ μμ±
## β οΈ μ μ½μ¬ν λ° κ³ λ €μ¬ν
### κΈ°μ μ μ μ½
- **κΈ°μ‘΄ μ½λ μμ κΈμ§**: κΈ°μ‘΄ ꡬνμ μ μ§, μΆκ° ꡬνλ§ μ§ν
- **SQLite λ°μ΄ν°λ² μ΄μ€**: νμ¬ μ€ν λ¦¬μ§ μμ€ν
μ μ§
- **Node.js νκ²½**: κΈ°μ‘΄ λ°νμ νκ²½ μ μ§
### λΉμ¦λμ€ μ μ½
- **νμ νΈνμ±**: κΈ°μ‘΄ MCP λꡬ λμμ μν₯ μμ
- **μ±λ₯ μν₯**: λμ보λ μ±λ₯ μ ν μμ
- **λ°μ΄ν° μΌκ΄μ±**: κΈ°μ‘΄ λ°μ΄ν° λ¬΄κ²°μ± μ μ§
## π― μ°μ μμ
### Phase 1 (High Priority)
1. **κΈ°μ‘΄ API λΆμ**: νμ¬ κ΅¬νλ API μλν¬μΈνΈ νμ
2. **ν΅μ¬ CRUD API**: PRD, Task, Document κΈ°λ³Έ CRUD μμ±
3. **API νμ€ν**: μλ΅ νμ λ° μλ¬ μ²λ¦¬ ν΅μΌ
### Phase 2 (Medium Priority)
1. **κ³ κΈ κΈ°λ₯ API**: κ²μ, λΆμ, λμ보λ λ°μ΄ν°
2. **λ°°μΉ μμ
API**: μΌκ΄ μ²λ¦¬ κΈ°λ₯
3. **μ€μκ° μ
λ°μ΄νΈ**: SSE λλ WebSocket
### Phase 3 (Low Priority)
1. **API λ¬Έμν**: Swagger λ¬Έμ μλ μμ±
2. **μ±λ₯ μ΅μ ν**: μΊμ± λ° μ΅μ ν
3. **νμ₯ κΈ°λ₯**: νλ¬κ·ΈμΈ μν€ν
μ²
## π μ±κ³΅ κΈ°μ€
### κΈ°λ₯μ μ±κ³΅ κΈ°μ€
- [ ] λͺ¨λ λμ보λ κΈ°λ₯μ APIλ‘ μν κ°λ₯
- [ ] κΈ°μ‘΄ MCP λꡬμ 100% νΈνμ± μ μ§
- [ ] API μλ΅ νμ μΌκ΄μ± 100%
### κΈ°μ μ μ±κ³΅ κΈ°μ€
- [ ] API μλ΅μκ° λͺ©ν λ¬μ± (500ms μ΄ν)
- [ ] μλ¬μ¨ 1% μ΄ν μ μ§
- [ ] κΈ°μ‘΄ μμ€ν
μ±λ₯ μν₯ μμ
### μ¬μ©μ κ²½ν μ±κ³΅ κΈ°μ€
- [ ] λμ보λμ API κ° κΈ°λ₯ λλ±μ±
- [ ] μ§κ΄μ μΈ API μΈν°νμ΄μ€
- [ ] λͺ
νν μλ¬ λ©μμ§ λ° κ°μ΄λ
---
**μμ±μΌ**: 2025-09-11
**μμ±μ**: μꡬμ¬ν λΆμκ° (Claude Code)
**μΉμΈμ**: νλ‘μ νΈ κ΄λ¦¬μ
**λ²μ **: 1.0
**μν**: μ΄μ μλ£