- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스) - Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포 - 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
297 lines
11 KiB
Markdown
297 lines
11 KiB
Markdown
# GUARDiA Manager — 라이선스 키 등록 및 관리 가이드
|
|
|
|
> **버전**: 2.0.0 | **작성일**: 2026-05-30
|
|
> **접속 URL**: http://zioinfo.co.kr:8090/licenses
|
|
> **대상**: 시스템 관리자 (admin 역할)
|
|
|
|
---
|
|
|
|
## 1. 개요
|
|
|
|
GUARDiA Manager의 **라이선스 관리** 페이지는 GUARDiA ITSM 플랫폼의 라이선스를
|
|
통합 관제하는 화면입니다.
|
|
|
|
### 주요 기능
|
|
|
|
| 기능 | 설명 |
|
|
|------|------|
|
|
| **현재 상태 확인** | 에디션, 만료일, 남은 기간, 허용 한도 실시간 표시 |
|
|
| **라이선스 키 등록** | 발급받은 라이선스 키를 붙여 넣고 즉시 활성화 |
|
|
| **무료 체험 시작** | 7/14/30일 체험 라이선스 즉시 발급 (설치당 1회) |
|
|
| **키 검증** | 등록 없이 키 유효성만 검증 (발급 전 사전 확인) |
|
|
| **라이선스 비활성화** | 현재 라이선스 비활성화 (서비스 제한 발생) |
|
|
| **이력 조회** | 과거 등록된 모든 라이선스 이력 테이블 |
|
|
| **에디션 비교** | TRIAL/COMMUNITY/STANDARD/ENTERPRISE 기능 비교 |
|
|
|
|
---
|
|
|
|
## 2. 라이선스 에디션
|
|
|
|
### 2-1. 에디션 비교표
|
|
|
|
| 구분 | TRIAL | COMMUNITY | STANDARD | ENTERPRISE |
|
|
|------|-------|-----------|----------|------------|
|
|
| 가격 | 무료 (7일) | 무료 | 협의 | 협의 |
|
|
| 기관 수 | 1 | 1 | 50 | 무제한 |
|
|
| 사용자 수 | 10명 | 10명 | 200명 | 무제한 |
|
|
| 서버 수 | 20대 | 50대 | 500대 | 무제한 |
|
|
| AI 에이전트 | ❌ | ❌ | ✅ | ✅ |
|
|
| LDAP/MFA | ❌ | ❌ | ✅ | ✅ |
|
|
| SLA 관리 | ✅ 기본 | ✅ 기본 | ✅ 고급 | ✅ 고급 |
|
|
| 취약점 스캔 | ❌ | ❌ | ❌ | ✅ |
|
|
| FinOps | ❌ | ❌ | ❌ | ✅ |
|
|
| Scouter APM | ❌ | ❌ | ❌ | ✅ |
|
|
| 기술 지원 | ❌ | 커뮤니티 | 이메일 | 전담 지원 |
|
|
|
|
### 2-2. 라이선스 키 형식
|
|
|
|
```
|
|
TRIAL: GRD-{Base64URL 인코딩 페이로드} (자동 생성)
|
|
COMMUNITY/ grd_lic_{발급기관코드}_{서명}
|
|
STANDARD/
|
|
ENTERPRISE:
|
|
```
|
|
|
|
---
|
|
|
|
## 3. 화면 구성 (NCloud 콘솔 스타일)
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ 업그레이드 배너 (만료 3일 전 표시) │
|
|
│ ⚠️ 체험판이 X일 후 만료됩니다. [라이선스 등록] 버튼 │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ 현재 라이선스 상태 카드 │
|
|
│ [에디션 배지] [체험판/만료 배지] │
|
|
│ 고객명: 지오정보기술 체험판 │
|
|
│ 메시지: TRIAL 라이선스 활성 (6일 남음) │
|
|
│ [🔑 등록] [🎁 체험] [🔍 검증] [비활성화] │
|
|
│ ───────────────────────────────────────────────────────────── │
|
|
│ [만료 게이지 바] [라이선스 ID] [허용 한도] │
|
|
│ ████████░░ 6일 남음 TRL-290EA0FB 기관:1/사용자:10/서버:20 │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ 액션 패널 (선택한 액션에 따라 표시) │
|
|
│ 예) 라이선스 키 등록: [textarea] [활성화 버튼] │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ 에디션 비교 (4개 카드 — 현재 에디션 강조) │
|
|
│ [TRIAL] [COMMUNITY] [STANDARD ★] [ENTERPRISE] │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ 라이선스 이력 테이블 │
|
|
│ ID | 라이선스ID | 에디션 | 고객명 | 체험판 | 만료일 | 상태 | 등록자│
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 기능별 사용 방법
|
|
|
|
### 4-1. 라이선스 키 등록
|
|
|
|
> **사전 조건**: admin 역할로 로그인, GUARDiA ITSM 서버에 `GUARDIA_LICENSE_KEY` 환경변수 설정
|
|
|
|
1. [🔑 라이선스 등록] 버튼 클릭
|
|
2. 발급받은 라이선스 키를 텍스트 영역에 붙여 넣기
|
|
3. [활성화] 버튼 클릭
|
|
4. 성공 시 현재 상태 카드가 즉시 갱신됨
|
|
|
|
```bash
|
|
# 라이선스 키 발급 (서버 관리자용 — Python 직접 실행)
|
|
ssh root@zioinfo.co.kr
|
|
|
|
source /opt/guardia/venv/bin/activate
|
|
cd /opt/guardia/app
|
|
python -m core.license \
|
|
--customer "서울특별시 정보화부" \
|
|
--edition STANDARD \
|
|
--days 365 \
|
|
--key $GUARDIA_LICENSE_KEY
|
|
```
|
|
|
|
### 4-2. 무료 체험 시작
|
|
|
|
> **제한**: 설치당 1회만 가능
|
|
|
|
1. [🎁 무료 체험] 버튼 클릭
|
|
2. 고객/기관명 입력 (기본값: "GUARDiA 체험판")
|
|
3. 체험 기간 선택: 7일 / 14일 / 30일
|
|
4. [🎁 체험 시작] 버튼 클릭
|
|
5. **발급된 체험 키가 팝업으로 1회만 표시** → 반드시 복사 보관
|
|
6. 즉시 TRIAL 에디션으로 활성화
|
|
|
|
> ⚠️ 체험 라이선스 키는 발급 시 화면에 1회만 표시됩니다. 화면을 닫으면 다시 확인할 수 없습니다.
|
|
|
|
### 4-3. 라이선스 키 검증
|
|
|
|
등록 전 키가 유효한지 먼저 확인할 때 사용합니다.
|
|
|
|
1. [🔍 키 검증] 버튼 클릭
|
|
2. 확인할 키 입력
|
|
3. [검증] 버튼 클릭
|
|
4. 결과 확인: 에디션, 고객명, 발급일, 만료일 표시
|
|
5. 유효한 경우 [이 키로 활성화] 버튼으로 즉시 등록 가능
|
|
|
|
### 4-4. 라이선스 비활성화
|
|
|
|
> **주의**: 비활성화 시 서비스 제한이 발생합니다.
|
|
|
|
1. [비활성화] 버튼 클릭 (빨간 버튼)
|
|
2. 확인 다이얼로그에서 [확인]
|
|
3. 상태가 "활성 라이선스가 없습니다."로 변경됨
|
|
|
|
---
|
|
|
|
## 5. API 명세
|
|
|
|
GUARDiA ITSM API를 직접 호출하는 엔드포인트입니다.
|
|
|
|
### 기본 정보
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| Base URL | `http://zioinfo.co.kr:8001` |
|
|
| 인증 | `Authorization: Bearer {JWT Token}` |
|
|
| 로그인 | `POST /api/auth/login` (JSON, admin 역할 필요) |
|
|
|
|
### 엔드포인트 목록
|
|
|
|
| 메서드 | 경로 | 인증 | 설명 |
|
|
|--------|------|------|------|
|
|
| `GET` | `/api/license/status` | 로그인 | 현재 라이선스 상태 |
|
|
| `POST` | `/api/license/trial` | admin | 체험 라이선스 발급 |
|
|
| `POST` | `/api/license/activate` | admin | 라이선스 키 활성화 |
|
|
| `POST` | `/api/license/verify` | admin | 라이선스 키 검증만 |
|
|
| `DELETE` | `/api/license` | admin | 라이선스 비활성화 |
|
|
| `GET` | `/api/license/history` | admin | 등록 이력 조회 |
|
|
|
|
### 요청/응답 예시
|
|
|
|
**체험 라이선스 발급**
|
|
```bash
|
|
curl -X POST http://zioinfo.co.kr:8001/api/license/trial \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"customer":"지오정보기술","days":7}'
|
|
```
|
|
```json
|
|
{
|
|
"message": "🎁 7일 무료 체험이 시작되었습니다!",
|
|
"license_id": "TRL-XXXXXXXXXX",
|
|
"edition": "TRIAL",
|
|
"customer": "지오정보기술",
|
|
"expires_at": "2026-06-06T11:37:25",
|
|
"days_remaining": 7,
|
|
"is_trial": true,
|
|
"license_key": "GRD-..."
|
|
}
|
|
```
|
|
|
|
**라이선스 상태 조회**
|
|
```bash
|
|
curl http://zioinfo.co.kr:8001/api/license/status \
|
|
-H "Authorization: Bearer $TOKEN"
|
|
```
|
|
```json
|
|
{
|
|
"activated": true,
|
|
"valid": true,
|
|
"expired": false,
|
|
"is_trial": true,
|
|
"edition": "TRIAL",
|
|
"customer": "지오정보기술",
|
|
"days_remaining": 6,
|
|
"limits": {
|
|
"max_institutions": 1,
|
|
"max_users": 10,
|
|
"max_servers": 20
|
|
},
|
|
"message": "TRIAL [체험판] 라이선스 활성 (6일 남음)"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. 테스트 결과
|
|
|
|
### 6-1. 테스트 환경
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 서버 | Ubuntu 24.04 (zioinfo.co.kr) |
|
|
| GUARDiA ITSM | v2.0.0 |
|
|
| GUARDiA Manager | v1.0.0 |
|
|
| 테스트 일자 | 2026-05-30 |
|
|
|
|
### 6-2. 테스트 결과 (7/7 PASS)
|
|
|
|
| 테스트 | 항목 | 결과 |
|
|
|--------|------|------|
|
|
| T1 | admin 로그인 (JSON) | ✅ PASS |
|
|
| T2 | 라이선스 현재 상태 조회 | ✅ PASS |
|
|
| T3 | 체험 라이선스 발급 (7일) | ✅ PASS |
|
|
| T4 | 활성화 후 상태 확인 (TRIAL, 6일) | ✅ PASS |
|
|
| T5 | 라이선스 이력 조회 (1건) | ✅ PASS |
|
|
| T6 | 잘못된 키 검증 (에러 처리) | ✅ PASS |
|
|
| T7 | Manager UI 접속 | ✅ PASS |
|
|
| T8 | Manager Backend API | ✅ PASS |
|
|
|
|
### 6-3. 버그 수정 이력
|
|
|
|
| 날짜 | 파일 | 버그 | 수정 내용 |
|
|
|------|------|------|---------|
|
|
| 2026-05-30 | `routers/license.py` | `datetime` timezone-aware/naive 충돌 | `datetime.fromisoformat(...).replace(tzinfo=None)` 적용 |
|
|
|
|
---
|
|
|
|
## 7. 운영 절차
|
|
|
|
### 7-1. 정기 만료일 모니터링
|
|
|
|
```bash
|
|
# 라이선스 만료일 확인 (서버 직접 확인)
|
|
ssh root@zioinfo.co.kr
|
|
curl -s -X POST http://localhost:8001/api/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username":"admin","password":"1111"}' \
|
|
| python3 -c "import json,sys; print(json.load(sys.stdin).get('access_token')[:20])"
|
|
|
|
TOKEN=$(...)
|
|
curl -s http://localhost:8001/api/license/status \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
| python3 -m json.tool | grep -E "edition|days_remaining|expires_at"
|
|
```
|
|
|
|
### 7-2. 라이선스 갱신 절차
|
|
|
|
1. 새 라이선스 키 발급 (담당자에게 요청)
|
|
2. GUARDiA Manager → 라이선스 관리 → [🔍 키 검증]으로 사전 확인
|
|
3. [🔑 라이선스 등록] → 새 키 입력 → 활성화
|
|
4. 기존 라이선스는 자동 비활성화됨
|
|
|
|
### 7-3. 라이선스 환경변수 설정
|
|
|
|
STANDARD/ENTERPRISE 라이선스 사용 시 서버에 마스터 키 설정이 필요합니다:
|
|
|
|
```bash
|
|
# /opt/guardia/app/.env 에 추가
|
|
GUARDIA_LICENSE_KEY=<64자리 hex 마스터 키>
|
|
|
|
# 서비스 재시작
|
|
systemctl restart guardia
|
|
```
|
|
|
|
---
|
|
|
|
## 8. 트러블슈팅
|
|
|
|
| 증상 | 원인 | 해결 |
|
|
|------|------|------|
|
|
| 체험판 발급 실패 (409) | 이미 체험 이력 존재 | 체험은 1회 한정, 정식 키 필요 |
|
|
| 키 검증/등록 500 에러 | `GUARDIA_LICENSE_KEY` 미설정 | .env에 마스터 키 설정 |
|
|
| 이력 조회 403 | admin 역할 아님 | admin 계정으로 로그인 |
|
|
| 만료 배너 표시 | 만료 3일 이내 | 새 라이선스 등록 |
|
|
| `datetime` 오류 | timezone aware/naive 충돌 | `license.py` 패치 적용 (완료) |
|
|
|
|
---
|
|
|
|
*GUARDiA ITSM v2.0.0 | (주)지오정보기술 | 2026-05-30*
|