GUARDiA ITSM — SI 프로젝트 관리 모듈 분석·설계서
문서 버전: 1.0
작성일: 2026-05-25
대상 독자: 개발자, PM, 이해관계자
목차
- 개요 및 목적
- 기능 범위
- 도메인 모델 설계
- API 엔드포인트 설계
- 프로세스 흐름
- 추가 고려사항 및 확장 방향
- 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 정의
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 수)
본 설계서는 구현 진행에 따라 갱신됩니다.