G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현 G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건) G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST) G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직 G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트 G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트 G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트 G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트 G-10: core/push_notify.py + routers/push.py + PushSubscription 모델 G-11: approvals 다중승인 (위임/서명/기한초과/마감연장) G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh 하네스: guardia-orchestrator 확장기능 Phase 반영 봇명령어: /sr /status /license /bulk 슬래시 명령어 추가 설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
433 lines
14 KiB
Markdown
433 lines
14 KiB
Markdown
# GUARDiA ITSM — SI 프로젝트 관리 모듈 분석·설계서
|
||
|
||
**문서 버전**: 1.0
|
||
**작성일**: 2026-05-25
|
||
**대상 독자**: 개발자, PM, 이해관계자
|
||
|
||
---
|
||
|
||
## 목차
|
||
|
||
1. [개요 및 목적](#1-개요-및-목적)
|
||
2. [기능 범위](#2-기능-범위)
|
||
3. [도메인 모델 설계](#3-도메인-모델-설계)
|
||
4. [API 엔드포인트 설계](#4-api-엔드포인트-설계)
|
||
5. [프로세스 흐름](#5-프로세스-흐름)
|
||
6. [추가 고려사항 및 확장 방향](#6-추가-고려사항-및-확장-방향)
|
||
7. [SM ↔ SI 통합 연계](#7-sm--si-통합-연계)
|
||
|
||
---
|
||
|
||
## 1. 개요 및 목적
|
||
|
||
### 1.1 현재 vs 확장 범위
|
||
|
||
```
|
||
현재 (SM 모드) 확장 (SI 모드)
|
||
──────────────── ────────────────────────────
|
||
SR 접수·처리 RFP 요구사항 등록·관리
|
||
SSL 인증서 점검 WBS 작성·진척 관리
|
||
정기 PM 점검 프로젝트 이슈·리스크 관리
|
||
장애 관리 (Incident) 마일스톤·산출물 관리
|
||
온콜·당직 관리 변경 요청(CR) 관리
|
||
배치 작업 관리 테스트 관리 (계획→실행→결함)
|
||
요구사항 추적성 매트릭스(RTM)
|
||
Gantt 차트 데이터 제공
|
||
안정화 체크리스트
|
||
```
|
||
|
||
### 1.2 SI 프로젝트 생명주기
|
||
|
||
```
|
||
착수 → 분석 → 설계 → 개발 → 테스트 → 구축 → 안정화 → 종료
|
||
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
|
||
RFP 요구사 설계 WBS 테스트 시스템 헬스체크 최종
|
||
등록 항분류 산출 진척 실행 이관 SR자동 보고서
|
||
물 관리 결함 체크 생성
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 기능 범위
|
||
|
||
### 2.1 핵심 기능 8개
|
||
|
||
| # | 기능 | 설명 |
|
||
|---|------|------|
|
||
| F1 | **SI 프로젝트 관리** | 프로젝트 CRUD, 단계(Phase) 전환, 진행률 집계 |
|
||
| F2 | **RFP 요구사항 관리** | 요구사항 등록·분류·추적, RTM 생성, Excel 일괄 업로드 |
|
||
| F3 | **WBS 관리** | 계층형 WBS 작성, Gantt 데이터, 진척률·지연 감지 |
|
||
| F4 | **이슈 관리** | 기술/일정/자원/품질 이슈, 이슈→SR 연동 |
|
||
| F5 | **리스크 관리** | 확률×영향 점수, 대응 계획, 리스크→이슈 전환 |
|
||
| F6 | **마일스톤·산출물 관리** | 마일스톤 달성 여부, 산출물 제출·승인 워크플로우 |
|
||
| F7 | **변경 요청(CR) 관리** | 범위·일정·예산 변경, 결재 연동 |
|
||
| F8 | **테스트 관리** | 테스트 계획, 케이스, 실행, 결함, 결과 보고서 |
|
||
|
||
### 2.2 고려사항 (구현 시 주의)
|
||
|
||
```
|
||
① 요구사항 추적성 (Traceability)
|
||
RFP 요구사항 → WBS 항목 → 테스트 케이스 → 결함 → 검증
|
||
req_id FK 체인으로 연결, RTM Excel 자동 생성
|
||
|
||
② WBS 계층 구조
|
||
재귀 Self-Join (parent_id → id)
|
||
최대 4레벨: 1 프로젝트 > 1.1 단계 > 1.1.1 업무 > 1.1.1.1 작업
|
||
진척률 = 자식 노드 평균 (Leaf 노드만 수동 입력)
|
||
|
||
③ Gantt 데이터 포맷
|
||
WBS 항목의 planned_start/end, actual_start/end를 JSON 배열로 반환
|
||
프론트엔드에서 D3.js 또는 다른 Gantt 라이브러리로 렌더링
|
||
|
||
④ 지연 감지 자동화
|
||
스케줄러: 매일 07:00 — planned_end < today AND completion_pct < 100 → 이슈 자동 생성 + 알림
|
||
|
||
⑤ SM 통합
|
||
SI 안정화 단계 종료 후 → SM 모드로 자동 전환
|
||
SM 서버(CMDB), SR, PM 스케줄에 연동
|
||
|
||
⑥ 대용량 파일
|
||
산출물 파일 업로드는 기존 attachments 모듈 재사용 (uploads/si_deliverables/)
|
||
|
||
⑦ 보안
|
||
프로젝트별 접근 권한: ADMIN > PM(해당 프로젝트) > ENGINEER(참여자) > 조회 불가
|
||
계약금액 등 민감 필드는 ADMIN/PM만 조회
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 도메인 모델 설계
|
||
|
||
### 3.1 ER 다이어그램 (핵심 테이블)
|
||
|
||
```
|
||
tb_si_project (SI 프로젝트)
|
||
├── tb_si_requirement (요구사항) ─── req_id FK ──► tb_wbs_item
|
||
├── tb_wbs_item (WBS 항목) ←── parent_id (self-join)
|
||
│ └── tb_wbs_item ←── predecessor FK
|
||
├── tb_project_issue (이슈)
|
||
│ └── tb_sr_request (SR 연동, nullable FK)
|
||
├── tb_project_risk (리스크)
|
||
│ └── tb_project_issue (실현 시 이슈 생성)
|
||
├── tb_project_milestone (마일스톤)
|
||
│ └── tb_project_deliverable (산출물)
|
||
├── tb_change_request (변경 요청)
|
||
│ └── tb_approval_flow (결재 연동)
|
||
└── tb_si_test_plan (테스트 계획)
|
||
├── tb_si_test_case (테스트 케이스)
|
||
│ └── tb_si_requirement (요구사항 FK)
|
||
└── tb_si_test_execution (실행 결과)
|
||
└── tb_si_defect (결함)
|
||
```
|
||
|
||
### 3.2 Enum 정의
|
||
|
||
```python
|
||
class ProjectPhase(str, Enum):
|
||
INITIATION = "INITIATION" # 착수
|
||
ANALYSIS = "ANALYSIS" # 분석
|
||
DESIGN = "DESIGN" # 설계
|
||
DEVELOPMENT = "DEVELOPMENT" # 개발
|
||
TESTING = "TESTING" # 테스트
|
||
DEPLOYMENT = "DEPLOYMENT" # 구축/이관
|
||
STABILIZATION = "STABILIZATION" # 안정화
|
||
CLOSED = "CLOSED" # 종료
|
||
|
||
class ReqType(str, Enum):
|
||
FUNCTIONAL = "FUNCTIONAL" # 기능 요구사항
|
||
NON_FUNCTIONAL = "NON_FUNCTIONAL" # 비기능 요구사항
|
||
CONSTRAINT = "CONSTRAINT" # 제약 사항
|
||
INTERFACE = "INTERFACE" # 인터페이스 요구사항
|
||
|
||
class ReqStatus(str, Enum):
|
||
DRAFT = "DRAFT" # 초안
|
||
REVIEWED = "REVIEWED" # 검토 완료
|
||
APPROVED = "APPROVED" # 승인
|
||
IMPLEMENTED = "IMPLEMENTED" # 구현 완료
|
||
VERIFIED = "VERIFIED" # 검증 완료
|
||
DEFERRED = "DEFERRED" # 보류
|
||
DELETED = "DELETED" # 삭제
|
||
|
||
class WbsStatus(str, Enum):
|
||
NOT_STARTED = "NOT_STARTED"
|
||
IN_PROGRESS = "IN_PROGRESS"
|
||
COMPLETED = "COMPLETED"
|
||
DELAYED = "DELAYED"
|
||
ON_HOLD = "ON_HOLD"
|
||
|
||
class RiskLevel(str, Enum):
|
||
HIGH = "HIGH" # 3
|
||
MEDIUM = "MEDIUM" # 2
|
||
LOW = "LOW" # 1
|
||
|
||
class IssueType(str, Enum):
|
||
TECHNICAL = "TECHNICAL" # 기술
|
||
SCHEDULE = "SCHEDULE" # 일정
|
||
RESOURCE = "RESOURCE" # 자원
|
||
QUALITY = "QUALITY" # 품질
|
||
SCOPE = "SCOPE" # 범위
|
||
EXTERNAL = "EXTERNAL" # 외부
|
||
|
||
class CrType(str, Enum):
|
||
SCOPE = "SCOPE" # 범위 변경
|
||
SCHEDULE = "SCHEDULE" # 일정 변경
|
||
BUDGET = "BUDGET" # 예산 변경
|
||
QUALITY = "QUALITY" # 품질 기준 변경
|
||
|
||
class TestResult(str, Enum):
|
||
PASS = "PASS"
|
||
FAIL = "FAIL"
|
||
BLOCKED = "BLOCKED"
|
||
SKIP = "SKIP"
|
||
|
||
class DefectSeverity(str, Enum):
|
||
CRITICAL = "CRITICAL"
|
||
MAJOR = "MAJOR"
|
||
MINOR = "MINOR"
|
||
TRIVIAL = "TRIVIAL"
|
||
```
|
||
|
||
---
|
||
|
||
## 4. API 엔드포인트 설계
|
||
|
||
### 4.1 SI 프로젝트 (`/api/si/projects`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/` | 프로젝트 목록 |
|
||
| POST | `/` | 프로젝트 생성 |
|
||
| GET | `/{id}` | 프로젝트 상세 (진행률 포함) |
|
||
| PATCH | `/{id}` | 프로젝트 수정 |
|
||
| PATCH | `/{id}/phase` | 단계 전환 |
|
||
| GET | `/{id}/dashboard` | 프로젝트 대시보드 (이슈수, 리스크수, WBS 진척률) |
|
||
| GET | `/{id}/gantt` | Gantt 차트 데이터 (WBS 전체) |
|
||
| POST | `/{id}/members` | 프로젝트 멤버 추가 |
|
||
|
||
### 4.2 요구사항 (`/api/si/projects/{pid}/requirements`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/` | 요구사항 목록 (타입/상태 필터) |
|
||
| POST | `/` | 요구사항 단건 등록 |
|
||
| POST | `/bulk` | Excel 일괄 업로드 (openpyxl 파싱) |
|
||
| GET | `/{id}` | 요구사항 상세 |
|
||
| PATCH | `/{id}` | 요구사항 수정 |
|
||
| PATCH | `/{id}/status` | 상태 변경 |
|
||
| GET | `/rtm` | 추적성 매트릭스(RTM) JSON |
|
||
| GET | `/rtm/excel` | RTM Excel 다운로드 |
|
||
|
||
### 4.3 WBS (`/api/si/projects/{pid}/wbs`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/` | WBS 트리 구조 조회 |
|
||
| POST | `/` | WBS 항목 추가 |
|
||
| POST | `/bulk` | Excel WBS 일괄 업로드 |
|
||
| PATCH | `/{id}` | WBS 항목 수정 |
|
||
| PATCH | `/{id}/progress` | 진척률 업데이트 |
|
||
| DELETE | `/{id}` | WBS 항목 삭제 (자식 있으면 거부) |
|
||
| GET | `/gantt` | Gantt 렌더링용 JSON |
|
||
| GET | `/delayed` | 지연 항목 목록 |
|
||
|
||
### 4.4 이슈 (`/api/si/projects/{pid}/issues`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/` | 이슈 목록 (타입/상태 필터) |
|
||
| POST | `/` | 이슈 등록 |
|
||
| GET | `/{id}` | 이슈 상세 |
|
||
| PATCH | `/{id}` | 이슈 수정 |
|
||
| PATCH | `/{id}/resolve` | 이슈 해결 처리 |
|
||
| POST | `/{id}/convert-sr` | ITSM SR로 변환 등록 |
|
||
|
||
### 4.5 리스크 (`/api/si/projects/{pid}/risks`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/` | 리스크 목록 (점수 정렬) |
|
||
| POST | `/` | 리스크 등록 |
|
||
| PATCH | `/{id}` | 리스크 수정 |
|
||
| PATCH | `/{id}/occur` | 리스크 실현 → 이슈 자동 생성 |
|
||
| GET | `/matrix` | 리스크 매트릭스 데이터 (3×3 격자) |
|
||
|
||
### 4.6 마일스톤·산출물
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/api/si/projects/{pid}/milestones` | 마일스톤 목록 |
|
||
| POST | `/api/si/projects/{pid}/milestones` | 마일스톤 등록 |
|
||
| PATCH | `/api/si/projects/{pid}/milestones/{id}/achieve` | 달성 처리 |
|
||
| GET | `/api/si/projects/{pid}/deliverables` | 산출물 목록 |
|
||
| POST | `/api/si/projects/{pid}/deliverables` | 산출물 등록 |
|
||
| POST | `/api/si/projects/{pid}/deliverables/{id}/submit` | 제출 처리 |
|
||
| PATCH | `/api/si/projects/{pid}/deliverables/{id}/approve` | 승인 처리 |
|
||
|
||
### 4.7 변경 요청 (`/api/si/projects/{pid}/change-requests`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| GET | `/` | CR 목록 |
|
||
| POST | `/` | CR 등록 |
|
||
| PATCH | `/{id}/approve` | CR 승인 |
|
||
| PATCH | `/{id}/reject` | CR 거부 |
|
||
| PATCH | `/{id}/implement` | CR 구현 완료 |
|
||
|
||
### 4.8 테스트 관리 (`/api/si/projects/{pid}/tests`)
|
||
|
||
| Method | Path | 설명 |
|
||
|--------|------|------|
|
||
| POST | `/plans` | 테스트 계획 생성 |
|
||
| POST | `/plans/{plan_id}/cases` | 테스트 케이스 등록 |
|
||
| POST | `/plans/{plan_id}/cases/bulk` | 케이스 일괄 업로드 |
|
||
| POST | `/plans/{plan_id}/execute` | 테스트 실행 결과 저장 |
|
||
| POST | `/defects` | 결함 등록 |
|
||
| PATCH | `/defects/{id}/fix` | 결함 수정 완료 |
|
||
| GET | `/plans/{plan_id}/report` | 테스트 결과 보고서 |
|
||
|
||
---
|
||
|
||
## 5. 프로세스 흐름
|
||
|
||
### 5.1 RFP 입력 → WBS 자동 생성 흐름
|
||
|
||
```
|
||
1. RFP 문서 업로드 (PDF/Word/Excel)
|
||
2. 요구사항 수동 입력 또는 Excel 일괄 업로드
|
||
→ req_id 자동 채번: REQ-F-001 (기능), REQ-NF-001 (비기능)
|
||
3. 요구사항 검토 → APPROVED 상태 전환
|
||
4. WBS 자동 생성 트리거:
|
||
APPROVED 요구사항 카테고리 기준으로 WBS 골격 생성
|
||
(분석→설계→개발→테스트 단계별 노드 자동 생성)
|
||
5. PM이 WBS 상세 조정 (기간, 담당자 배정)
|
||
6. Gantt 차트 확인 → 일정 확정
|
||
```
|
||
|
||
### 5.2 WBS 진척 관리 흐름
|
||
|
||
```
|
||
매일 07:00 스케줄러 실행:
|
||
└── planned_end < today AND completion_pct < 100
|
||
└── status = DELAYED 자동 변경
|
||
└── ProjectIssue 자동 생성 (issue_type=SCHEDULE)
|
||
└── Messenger 알림 → PM/담당자
|
||
|
||
엔지니어: completion_pct 업데이트
|
||
└── PATCH /wbs/{id}/progress {"completion_pct": 75}
|
||
└── 부모 노드 진척률 자동 재계산 (평균)
|
||
└── 프로젝트 전체 진척률 갱신
|
||
```
|
||
|
||
### 5.3 리스크 → 이슈 전환 흐름
|
||
|
||
```
|
||
리스크 생성 (확률×영향 점수 HIGH×HIGH = 9)
|
||
└── 점수 6 이상: 관리 필요 알림
|
||
└── 점수 9: 즉시 PM 알림
|
||
|
||
리스크 실현 (PATCH /risks/{id}/occur):
|
||
└── risk.status = OCCURRED
|
||
└── ProjectIssue 자동 생성
|
||
- title: f"[리스크 실현] {risk.title}"
|
||
- issue_type: 리스크 타입 매핑
|
||
- priority: HIGH
|
||
└── Messenger P2 알림
|
||
```
|
||
|
||
### 5.4 테스트 → SM 전환 흐름
|
||
|
||
```
|
||
테스트 완료 조건:
|
||
- 전체 TC Pass율 ≥ 95%
|
||
- Critical/Major 결함 0건
|
||
- 마일스톤 "테스트 완료" 달성
|
||
|
||
구축(DEPLOYMENT) 단계:
|
||
- 서버 정보 → CMDB 자동 등록 (Server 테이블)
|
||
- SSL 도메인 → SslDomain 자동 등록
|
||
- PM 스케줄 → PmSchedule 자동 생성
|
||
|
||
안정화(STABILIZATION) 단계:
|
||
- 안정화 SR 자동 생성 (sr_type=INCIDENT, priority=HIGH)
|
||
- 온콜 당직 스케줄 생성
|
||
|
||
종료(CLOSED):
|
||
- 프로젝트 최종 보고서 Excel 생성
|
||
- SM 모드로 전환 완료 플래그
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 추가 고려사항 및 확장 방향
|
||
|
||
### 6.1 즉시 구현 필요 (Must)
|
||
|
||
```
|
||
① RTM(Requirements Traceability Matrix) Excel 자동 생성
|
||
요구사항 ID → WBS 코드 → 테스트 케이스 ID → 결함 수 → 검증 상태
|
||
|
||
② WBS Excel 업로드/다운로드
|
||
표준 WBS 양식(xlsx) 업로드 → 자동 파싱 → DB 저장
|
||
|
||
③ 지연 자동 감지 스케줄러
|
||
scheduler.py에 _scan_wbs_delay() 추가
|
||
|
||
④ 안정화→SM 전환 트리거
|
||
DEPLOYMENT 완료 시 CMDB/SSL/PM 자동 생성
|
||
```
|
||
|
||
### 6.2 중기 확장 (Should)
|
||
|
||
```
|
||
① Gantt 차트 프론트엔드
|
||
WBS Gantt API → static/si_gantt.html 구현
|
||
|
||
② 공수 관리 (Man-day)
|
||
WbsItem에 planned_md, actual_md 추가
|
||
|
||
③ 예산 관리
|
||
SiProject에 budget_total, budget_used 연동
|
||
|
||
④ 외부 협력사 포털
|
||
CUSTOMER Role 확장: 협력사 계정에 특정 WBS만 접근
|
||
|
||
⑤ sLLM 연동
|
||
RFP 텍스트 → 요구사항 자동 추출 (내부 sLLM API)
|
||
```
|
||
|
||
### 6.3 장기 확장 (Nice)
|
||
|
||
```
|
||
① 프로젝트 템플릿
|
||
표준 SI 프로젝트 WBS 템플릿 (전자정부, ERP 등)
|
||
|
||
② 시뮬레이션
|
||
일정 변경 시 종료일 영향 시뮬레이션 (Critical Path)
|
||
|
||
③ 유사 프로젝트 비교
|
||
과거 SI 프로젝트 실적 기반 일정/공수 추정 보조
|
||
```
|
||
|
||
---
|
||
|
||
## 7. SM ↔ SI 통합 연계
|
||
|
||
```
|
||
SI 프로젝트 종료 후 SM 자산 자동 등록:
|
||
|
||
SiProject.phase = CLOSED
|
||
└── 각 서버 → Server(CMDB) 자동 등록
|
||
└── 각 도메인 → SslDomain 자동 등록
|
||
└── PM 스케줄 → PmSchedule 자동 생성 (MONTHLY)
|
||
└── 배치 작업 → BatchJob 이관 (있는 경우)
|
||
└── SM SRType.INQUIRY → 안정화 SR 자동 생성
|
||
|
||
연계 API: POST /api/si/projects/{id}/convert-to-sm
|
||
→ 위 자동 등록 트리거
|
||
→ 결과 요약 반환 (등록된 서버 수, SSL 수, PM 수)
|
||
```
|
||
|
||
---
|
||
|
||
*본 설계서는 구현 진행에 따라 갱신됩니다.*
|