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>
178 lines
8.1 KiB
Markdown
178 lines
8.1 KiB
Markdown
# [Specification] 사이트·사용자 등록관리
|
|
|
|
> 대상 기관(사이트) 및 담당자 연락처 정보를 등록·조회·수정하는 기능 명세.
|
|
> 기관 단위 SLA, 계약 정보, 담당자 이메일·전화번호를 통합 관리한다.
|
|
|
|
---
|
|
|
|
## 1. 기관(사이트) 관리
|
|
|
|
### 1.1. 데이터 모델
|
|
|
|
| 필드 | 타입 | 설명 |
|
|
|------|------|------|
|
|
| `inst_id` | VARCHAR(20) | 기관 코드 (PK, 예: MOF, MOIS) |
|
|
| `inst_name` | VARCHAR(100) | 기관명 |
|
|
| `address` | VARCHAR(300) | 기관 주소 |
|
|
| `region` | VARCHAR(50) | 지역 (서울/세종/부산 등) |
|
|
| `contract_start` | DATE | 유지보수 계약 시작일 |
|
|
| `contract_end` | DATE | 유지보수 계약 종료일 |
|
|
| `sla_hours` | INT | SLA 응답 시간 (기본 4시간) |
|
|
| `pm_contact` | VARCHAR(50) | 담당 PM 사번 |
|
|
| `phone` | VARCHAR(20) | 기관 대표 연락처 |
|
|
| `note` | TEXT | 특이사항·메모 |
|
|
| `is_active` | CHAR(1) | Y: 활성 / N: 비활성 |
|
|
|
|
### 1.2. API 엔드포인트
|
|
|
|
| 메서드 | URL | 권한 | 설명 |
|
|
|--------|-----|------|------|
|
|
| `GET` | `/api/institutions` | ADMIN, PM | 전체 기관 목록 조회 |
|
|
| `GET` | `/api/institutions/{inst_code}` | ADMIN, PM, ENGINEER | 기관 상세 조회 |
|
|
| `POST` | `/api/institutions` | ADMIN | 기관 신규 등록 |
|
|
| `PATCH` | `/api/institutions/{inst_code}` | ADMIN, PM | 기관 정보 수정 |
|
|
| `DELETE` | `/api/institutions/{inst_code}` | ADMIN | 기관 비활성화 |
|
|
|
|
### 1.3. 응답 스키마 (InstitutionOut)
|
|
|
|
```python
|
|
class InstitutionOut(BaseModel):
|
|
inst_code: str
|
|
inst_name: str
|
|
address: str | None
|
|
region: str | None
|
|
contract_start: date | None
|
|
contract_end: date | None
|
|
sla_hours: int
|
|
pm_contact: str | None
|
|
phone: str | None
|
|
note: str | None
|
|
is_active: str
|
|
server_count: int # 연결된 서버 수 (조인)
|
|
contact_count: int # 등록된 담당자 수 (조인)
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
```
|
|
|
|
---
|
|
|
|
## 2. 기관 담당자 관리
|
|
|
|
### 2.1. 데이터 모델
|
|
|
|
| 필드 | 타입 | 설명 |
|
|
|------|------|------|
|
|
| `contact_id` | BIGINT | PK |
|
|
| `inst_id` | VARCHAR(20) | FK → TB_INST_META |
|
|
| `contact_name` | VARCHAR(50) | 담당자 이름 |
|
|
| `dept` | VARCHAR(100) | 부서명 |
|
|
| `position` | VARCHAR(50) | 직책/직급 |
|
|
| `role` | VARCHAR(30) | MANAGER / ENGINEER / PM / SECURITY / HELPDESK |
|
|
| `email` | VARCHAR(100) | 이메일 주소 |
|
|
| `phone` | VARCHAR(20) | 직통 전화 |
|
|
| `mobile` | VARCHAR(20) | 휴대폰 번호 |
|
|
| `is_primary` | CHAR(1) | Y: 주 담당자 |
|
|
| `is_active` | CHAR(1) | Y: 재직중 |
|
|
|
|
### 2.2. API 엔드포인트
|
|
|
|
| 메서드 | URL | 권한 | 설명 |
|
|
|--------|-----|------|------|
|
|
| `GET` | `/api/institutions/{inst_code}/contacts` | ADMIN, PM, ENGINEER | 기관 담당자 목록 |
|
|
| `POST` | `/api/institutions/{inst_code}/contacts` | ADMIN, PM | 담당자 추가 |
|
|
| `PATCH` | `/api/institutions/{inst_code}/contacts/{id}` | ADMIN, PM | 담당자 수정 |
|
|
| `DELETE` | `/api/institutions/{inst_code}/contacts/{id}` | ADMIN | 담당자 삭제(비활성) |
|
|
|
|
### 2.3. 담당자 역할 정의
|
|
|
|
| role | 설명 |
|
|
|------|------|
|
|
| `MANAGER` | 기관 총괄 담당자 (SLA 관련 주 연락처) |
|
|
| `ENGINEER` | 현장 엔지니어 (기술 담당) |
|
|
| `PM` | 프로젝트 매니저 |
|
|
| `SECURITY` | 정보보안 담당자 |
|
|
| `HELPDESK` | 헬프데스크 / 1차 접수 담당자 |
|
|
|
|
---
|
|
|
|
## 3. ITSM 사용자 (내부 운영자) 관리
|
|
|
|
> GUARDiA ITSM 로그인 계정 관리. 기관 담당자와 별도 관리.
|
|
|
|
### 3.1. 사용자 역할 (RBAC)
|
|
|
|
| 역할 | 설명 | 주요 기능 |
|
|
|------|------|-----------|
|
|
| `ADMIN` | 시스템 관리자 | 전체 설정, 사용자 관리, 모든 기관 접근 |
|
|
| `PM` | PM / 팀장 | SR 승인, 전체 현황 조회, 타임테이블 관리 |
|
|
| `ENGINEER` | SM 엔지니어 | 담당 SR 처리, 쉘 스크립트 실행, 타임테이블 입력 |
|
|
| `CUSTOMER` | 기관 담당자 | 자기 기관 SR 등록 및 현황 조회만 허용 |
|
|
|
|
### 3.2. API 엔드포인트
|
|
|
|
| 메서드 | URL | 권한 | 설명 |
|
|
|--------|-----|------|------|
|
|
| `GET` | `/api/users` | ADMIN | 전체 사용자 목록 |
|
|
| `GET` | `/api/users/me` | 전체 | 내 프로필 조회 |
|
|
| `POST` | `/api/users/register` | ADMIN | 신규 계정 생성 |
|
|
| `PATCH` | `/api/users/{id}` | ADMIN | 사용자 정보 수정 |
|
|
| `POST` | `/api/users/{id}/deactivate` | ADMIN | 계정 비활성화 |
|
|
| `POST` | `/api/auth/login` | - | 로그인 (JWT 발급) |
|
|
| `POST` | `/api/auth/logout` | 전체 | 로그아웃 |
|
|
|
|
### 3.3. 사용자 추가 필드
|
|
|
|
```python
|
|
class User(Base):
|
|
# 기존 필드 외 추가
|
|
email: str # 이메일 (알림 발송용)
|
|
phone: str | None # 휴대폰 (SMS 알림용)
|
|
dept: str | None # 부서명
|
|
position: str | None # 직책
|
|
inst_code: str | None # 소속 기관 코드 (CUSTOMER 역할용)
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 프론트엔드 화면 구성
|
|
|
|
### 4.1. 기관 관리 화면 (`view-institutions`)
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ 🏢 기관(사이트) 관리 [+ 기관 등록] │
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ [검색: 기관명] [지역 필터▼] [계약만료 임박▼] │
|
|
├──────┬───────────┬──────┬───────────┬──────┬────────────┤
|
|
│ 코드 │ 기관명 │ 지역 │ 계약 만료 │ 서버 │ SLA │
|
|
├──────┼───────────┼──────┼───────────┼──────┼────────────┤
|
|
│ MOF │ 기획재정부 │ 세종 │ 2025-12-31│ 8대 │ 4h │
|
|
│ MOIS │ 행정안전부 │ 서울 │ 2026-03-31│ 12대 │ 2h ⚠ │ ← SLA 단시간 경고
|
|
│ MSS │ 중소벤처부 │ 세종 │ 2025-11-30│ 5대 │ 4h 🔴 │ ← 만료 임박
|
|
└──────┴───────────┴──────┴───────────┴──────┴────────────┘
|
|
```
|
|
|
|
### 4.2. 기관 상세 / 담당자 탭
|
|
|
|
```
|
|
┌─ 기관 상세: 기획재정부 (MOF) ──────────────────────────┐
|
|
│ [기본정보] [담당자] [서버] [SR이력] [타임테이블] │
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ 담당자 탭 [+ 담당자 추가] │
|
|
│ ┌──────────┬────┬────────────┬──────────────────┬──────┐ │
|
|
│ │ 이름 │역할│ 이메일 │ 연락처 │ 주담 │ │
|
|
│ ├──────────┼────┼────────────┼──────────────────┼──────┤ │
|
|
│ │ 김○○ │PM │ k@mof.go.kr│ 010-xxxx-xxxx │ ★ │ │
|
|
│ │ 이○○ │ENG │ l@mof.go.kr│ 02-xxxx-xxxx │ │ │
|
|
│ └──────────┴────┴────────────┴──────────────────┴──────┘ │
|
|
└─────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 5. 알림 연동
|
|
|
|
- 계약 만료 **30일/7일/1일 전** → 담당 PM 이메일 발송 (Celery Beat 스케줄)
|
|
- SSL 인증서 만료 **60일/30일/7일 전** → ITSM 알림 + 메신저 채널 경고
|
|
- SLA 초과 위험 SR → 기관 담당자 이메일/SMS 통보 (연락처 DB 기반)
|