- 개발 단계별 문서 추가 (00_OVERVIEW ~ 06_PHASE) - 기술 표준 문서 추가 (99_TECHNICAL_STANDARDS) - 개발 프로세스 및 패턴 문서 추가 - API_FLOW_TESTER_DESIGN, DEV_PROCESS - HTMX_API_PATTERN, LAYOUT_PATTERN - SETUP_GUIDE, MNG_PROJECT_PLAN - 프로젝트 관리 문서 추가 (project-management/) - INDEX.md, MNG_CRITICAL_RULES.md 업데이트
299 lines
7.9 KiB
Markdown
299 lines
7.9 KiB
Markdown
# 프로젝트 진행 관리 시스템 (PM)
|
|
|
|
MNG 관리자 패널용 프로젝트/작업/이슈 관리 시스템
|
|
|
|
## 개요
|
|
|
|
Notion 수동 관리를 대체하는 웹 기반 프로젝트 진행 관리 도구로, 클릭 한 번으로 상태 변경이 가능하고 대시보드에서 전체 진행률을 한눈에 파악할 수 있습니다.
|
|
|
|
## 데이터 구조
|
|
|
|
```
|
|
Project (프로젝트)
|
|
└── Task (작업) - 1:N
|
|
└── Issue (이슈) - 1:N
|
|
```
|
|
|
|
### 테이블
|
|
|
|
| 테이블명 | 설명 |
|
|
|---------|------|
|
|
| `admin_pm_projects` | 프로젝트 |
|
|
| `admin_pm_tasks` | 작업 |
|
|
| `admin_pm_issues` | 이슈 |
|
|
|
|
> Migration은 `api/` 저장소에 위치
|
|
|
|
## 상태값
|
|
|
|
### 프로젝트 상태
|
|
| 값 | 라벨 | 색상 |
|
|
|----|------|------|
|
|
| `active` | 진행중 | green |
|
|
| `completed` | 완료 | blue |
|
|
| `on_hold` | 보류 | yellow |
|
|
|
|
### 작업 상태
|
|
| 값 | 라벨 | 색상 |
|
|
|----|------|------|
|
|
| `todo` | 예정 | gray |
|
|
| `in_progress` | 진행중 | blue |
|
|
| `done` | 완료 | green |
|
|
|
|
### 작업 우선순위
|
|
| 값 | 라벨 | 색상 |
|
|
|----|------|------|
|
|
| `low` | 낮음 | gray |
|
|
| `medium` | 보통 | yellow |
|
|
| `high` | 높음 | red |
|
|
|
|
### 이슈 타입
|
|
| 값 | 라벨 |
|
|
|----|------|
|
|
| `bug` | 버그 |
|
|
| `feature` | 기능 |
|
|
| `improvement` | 개선 |
|
|
|
|
### 이슈 상태
|
|
| 값 | 라벨 |
|
|
|----|------|
|
|
| `open` | 열림 |
|
|
| `in_progress` | 진행중 |
|
|
| `resolved` | 해결됨 |
|
|
| `closed` | 닫힘 |
|
|
|
|
## 파일 구조
|
|
|
|
```
|
|
app/
|
|
├── Http/
|
|
│ ├── Controllers/
|
|
│ │ ├── ProjectManagementController.php # Web Controller (뷰 렌더링)
|
|
│ │ └── Api/Admin/ProjectManagement/
|
|
│ │ ├── ProjectController.php # 프로젝트 API
|
|
│ │ ├── TaskController.php # 작업 API
|
|
│ │ ├── IssueController.php # 이슈 API
|
|
│ │ └── ImportController.php # JSON Import API
|
|
│ └── Requests/ProjectManagement/
|
|
│ ├── StoreProjectRequest.php
|
|
│ ├── UpdateProjectRequest.php
|
|
│ ├── StoreTaskRequest.php
|
|
│ ├── UpdateTaskRequest.php
|
|
│ ├── StoreIssueRequest.php
|
|
│ ├── UpdateIssueRequest.php
|
|
│ ├── BulkActionRequest.php
|
|
│ └── ImportProjectRequest.php
|
|
├── Models/Admin/
|
|
│ ├── AdminPmProject.php
|
|
│ ├── AdminPmTask.php
|
|
│ └── AdminPmIssue.php
|
|
└── Services/ProjectManagement/
|
|
├── ProjectService.php
|
|
├── TaskService.php
|
|
├── IssueService.php
|
|
└── ImportService.php
|
|
|
|
resources/views/project-management/
|
|
├── index.blade.php # 대시보드
|
|
├── import.blade.php # JSON Import
|
|
└── projects/
|
|
├── index.blade.php # 프로젝트 목록
|
|
├── create.blade.php # 프로젝트 생성
|
|
├── edit.blade.php # 프로젝트 수정
|
|
├── show.blade.php # 프로젝트 상세 (작업/이슈 포함)
|
|
└── partials/
|
|
└── table.blade.php # HTMX 테이블 파셜
|
|
```
|
|
|
|
## API 엔드포인트
|
|
|
|
### 프로젝트 API (`/api/admin/pm/projects`)
|
|
|
|
| Method | URI | Name | 설명 |
|
|
|--------|-----|------|------|
|
|
| GET | `/` | index | 목록 조회 |
|
|
| POST | `/` | store | 생성 |
|
|
| GET | `/{id}` | show | 상세 조회 |
|
|
| PUT | `/{id}` | update | 수정 |
|
|
| DELETE | `/{id}` | destroy | 삭제 (soft) |
|
|
| POST | `/{id}/restore` | restore | 복원 |
|
|
| DELETE | `/{id}/force` | forceDestroy | 영구 삭제 |
|
|
| POST | `/{id}/status` | changeStatus | 상태 변경 |
|
|
| POST | `/{id}/duplicate` | duplicate | 복제 |
|
|
| GET | `/stats` | stats | 통계 |
|
|
| GET | `/dashboard` | dashboard | 대시보드 요약 |
|
|
| GET | `/dropdown` | dropdown | 드롭다운용 목록 |
|
|
|
|
### 작업 API (`/api/admin/pm/tasks`)
|
|
|
|
| Method | URI | Name | 설명 |
|
|
|--------|-----|------|------|
|
|
| GET | `/` | index | 목록 조회 |
|
|
| POST | `/` | store | 생성 |
|
|
| GET | `/{id}` | show | 상세 조회 |
|
|
| PUT | `/{id}` | update | 수정 |
|
|
| DELETE | `/{id}` | destroy | 삭제 |
|
|
| POST | `/{id}/status` | changeStatus | 상태 변경 |
|
|
| GET | `/project/{projectId}` | byProject | 프로젝트별 조회 |
|
|
| POST | `/project/{projectId}/reorder` | reorder | 순서 변경 |
|
|
| GET | `/project/{projectId}/stats` | stats | 프로젝트별 통계 |
|
|
| GET | `/urgent` | urgent | 긴급 작업 목록 |
|
|
| POST | `/bulk` | bulk | 일괄 작업 |
|
|
|
|
### 이슈 API (`/api/admin/pm/issues`)
|
|
|
|
| Method | URI | Name | 설명 |
|
|
|--------|-----|------|------|
|
|
| GET | `/` | index | 목록 조회 |
|
|
| POST | `/` | store | 생성 |
|
|
| GET | `/{id}` | show | 상세 조회 |
|
|
| PUT | `/{id}` | update | 수정 |
|
|
| DELETE | `/{id}` | destroy | 삭제 |
|
|
| POST | `/{id}/status` | changeStatus | 상태 변경 |
|
|
| GET | `/project/{projectId}` | byProject | 프로젝트별 조회 |
|
|
| GET | `/task/{taskId}` | byTask | 작업별 조회 |
|
|
| GET | `/stats` | stats | 통계 |
|
|
| GET | `/open` | open | 열린 이슈 목록 |
|
|
| POST | `/bulk` | bulk | 일괄 작업 |
|
|
|
|
### Import API (`/api/admin/pm/import`)
|
|
|
|
| Method | URI | Name | 설명 |
|
|
|--------|-----|------|------|
|
|
| GET | `/template` | template | 샘플 JSON 템플릿 |
|
|
| POST | `/validate` | validate | JSON 구조 검증 |
|
|
| POST | `/` | import | 새 프로젝트 Import |
|
|
| POST | `/project/{id}/tasks` | importTasks | 기존 프로젝트에 작업 추가 |
|
|
|
|
## Web 라우트
|
|
|
|
| URI | Name | 설명 |
|
|
|-----|------|------|
|
|
| `/project-management` | pm.index | 대시보드 |
|
|
| `/project-management/projects` | pm.projects.index | 프로젝트 목록 |
|
|
| `/project-management/projects/create` | pm.projects.create | 프로젝트 생성 |
|
|
| `/project-management/projects/{id}` | pm.projects.show | 프로젝트 상세 |
|
|
| `/project-management/projects/{id}/edit` | pm.projects.edit | 프로젝트 수정 |
|
|
| `/project-management/import` | pm.import | JSON Import |
|
|
|
|
## JSON Import 기능
|
|
|
|
### JSON 포맷 (새 프로젝트)
|
|
|
|
```json
|
|
{
|
|
"project": {
|
|
"name": "프로젝트명 (필수)",
|
|
"description": "프로젝트 설명",
|
|
"status": "active",
|
|
"start_date": "2025-01-01",
|
|
"end_date": "2025-03-31"
|
|
},
|
|
"tasks": [
|
|
{
|
|
"title": "작업 제목 (필수)",
|
|
"description": "작업 설명",
|
|
"status": "todo",
|
|
"priority": "high",
|
|
"due_date": "2025-01-15",
|
|
"issues": [
|
|
{
|
|
"title": "이슈 제목 (필수)",
|
|
"description": "이슈 설명",
|
|
"type": "bug",
|
|
"status": "open"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### JSON 포맷 (기존 프로젝트에 작업 추가)
|
|
|
|
```json
|
|
{
|
|
"tasks": [
|
|
{
|
|
"title": "추가할 작업",
|
|
"priority": "medium",
|
|
"issues": [...]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 사용 예시
|
|
|
|
### 프로젝트 생성
|
|
|
|
```bash
|
|
curl -X POST /api/admin/pm/projects \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "SAM MES 개발",
|
|
"description": "MES 시스템 개발 프로젝트",
|
|
"status": "active",
|
|
"start_date": "2025-01-01"
|
|
}'
|
|
```
|
|
|
|
### 작업 상태 변경
|
|
|
|
```bash
|
|
curl -X POST /api/admin/pm/tasks/1/status \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"status": "in_progress"}'
|
|
```
|
|
|
|
### 작업 순서 변경
|
|
|
|
```bash
|
|
curl -X POST /api/admin/pm/tasks/project/1/reorder \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"task_ids": [3, 1, 2]}'
|
|
```
|
|
|
|
### JSON Import
|
|
|
|
```bash
|
|
curl -X POST /api/admin/pm/import \
|
|
-H "Content-Type: application/json" \
|
|
-d @project.json
|
|
```
|
|
|
|
## 대시보드 요약 API 응답
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"projects": {
|
|
"total": 5,
|
|
"active": 3,
|
|
"completed": 1,
|
|
"on_hold": 1
|
|
},
|
|
"tasks": {
|
|
"total": 25,
|
|
"todo": 10,
|
|
"in_progress": 8,
|
|
"done": 7,
|
|
"overdue": 2
|
|
},
|
|
"issues": {
|
|
"total": 15,
|
|
"open": 5,
|
|
"in_progress": 3,
|
|
"resolved": 4,
|
|
"closed": 3
|
|
},
|
|
"recent_projects": [...],
|
|
"urgent_tasks": [...]
|
|
}
|
|
}
|
|
```
|
|
|
|
## 관련 커밋
|
|
|
|
- `603062e` - feat(pm): 프로젝트 진행 관리 시스템 구현 |