feat(guardia-page): update to v2.0 features + manuals + Jenkins exclude

GuardiaDetail.jsx:
- FEATURES: 8 -> 12 (RPA봇, 스크랩핑, DR, CSAP, 자연어명령 추가)
- BOT_COMMANDS: 19 -> 44 (스크랩봇, CI/CD, PMS, 보안, 디자인 명령어 추가)
- TECH_STACK: Vector DB(pgvector/ChromaDB/LangChain), 자동화봇 추가

Jenkinsfile:
- sparse checkout: manual/ 폴더 체크아웃 제외 (배포 대상 아님)
- workspace/zioinfo-web/Jenkinsfile 동일 적용

Manuals:
- manual/41_zio서버_DB_연결정보.md: PostgreSQL/Gitea/Ollama/ChromaDB/SMTP/SSH
- manual/42_zio서버_소프트웨어_구성도.md: 전체 SW 구성도 + 아키텍처

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DESKTOP-TKLFCPRython 2026-05-31 21:10:36 +09:00
parent 23b44d2e95
commit 97bb50128e
2 changed files with 82 additions and 27 deletions

13
Jenkinsfile vendored
View File

@ -18,7 +18,18 @@ pipeline {
stage('Checkout') {
steps {
echo "브랜치: ${env.GIT_BRANCH ?: 'main'} | 커밋: ${env.GIT_COMMIT?.take(7) ?: '-'}"
checkout scm
checkout([
$class: 'GitSCM',
branches: scm.branches,
userRemoteConfigs: scm.userRemoteConfigs,
extensions: [
// manual/ 폴더 체크아웃 제외 (배포 대상 아님)
[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [
[path: 'frontend'],
[path: 'backend'],
]]
]
])
}
}

View File

@ -8,14 +8,22 @@ const FEATURES = [
desc:'Ollama 온프레미스 sLLM 기반. 메신저 한 줄 명령 → 자연어 파싱 → 자동 배포·운영. 외부 API 완전 차단으로 폐쇄망 환경 최적화.' },
{ icon:'🔧', title:'에이전트리스 아키텍처',
desc:'대상 서버에 어떤 소프트웨어도 설치하지 않습니다. 표준 SSH/SFTP 프로토콜만으로 레거시 WAS(Tomcat/JBoss/WebLogic)를 원격 관리.' },
{ icon:'💬', title:'ChatOps 메신저 통합',
desc:'카카오워크, 네이버웍스, 슬랙 등 익숙한 메신저에서 /deploy, /status, /incident 명령으로 인프라를 즉시 제어.' },
{ icon:'💬', title:'ChatOps + 자연어 명령',
desc:'카카오워크·네이버웍스·슬랙에서 자연어로 인프라 제어. "서버1 헬스체크 해줘", "SR-XXXX 배포해줘" 등 자연어를 자동으로 봇 명령어로 변환.' },
{ icon:'📊', title:'통합 ITSM 대시보드',
desc:'SR·인시던트·변경관리·SLA·CMDB·예측 유지보수를 단일 플랫폼에서 관리. 7일 추이 차트와 AI 인사이트 실시간 제공.' },
{ icon:'🤖', title:'RPA 봇 자동화',
desc:'소스코드 기반 Validation 학습 → 반복 업무(SR 자동 접수·승인·상태 변경) 자동화. dry_run 검증 후 실제 API 호출. APScheduler 크론 연동.' },
{ icon:'🕷️', title:'웹 스크랩핑 봇',
desc:'URL 스크랩 → DB 저장 → 상태 관리(DRAFT/PUBLISHED/DELETED). 게시 시 메신저 자동 알림. Manager UI에서 삭제·원복·게시 직접 관리.' },
{ icon:'🔒', title:'엔터프라이즈 보안',
desc:'AES-256-GCM 암호화, MFA/OTP, PAM 특권접근관리, SHA-256 해시체인 불변 감사로그, Zero Trust 지속 인증.' },
{ icon:'🏗️', title:'PMS 프로젝트 관리',
desc:'WBS·산출물·일간/주간/월간 자동 보고서(Excel·PDF·PPT). 이슈·위험 관리, Gitea 연동, Jenkins CI/CD 파이프라인.' },
{ icon:'🛡️', title:'DR 재해복구 자동화',
desc:'DR 시나리오 관리, Failover 실행, 백업 무결성 검증, 복구 테스트, RTO/RPO 실적 추적. 네트워크 장비(스위치·방화벽) SSH 설정 백업·변경 감지.' },
{ icon:'✅', title:'CSAP 보안 자동 점검',
desc:'행안부 공공기관 보안 체크리스트 100개 항목 자동 점검. 증적 수집·Excel/HTML 보고서 자동 생성. ISMS-P 준수율 대시보드 실시간 제공.' },
{ icon:'🌐', title:'공공기관 필수 준수',
desc:'행안부 SW 보안약점 자동 점검, KWCAG 2.1 웹접근성, 개인정보보호법 준수 스캔. 19개 공공기관 체크리스트 내장.' },
{ icon:'📡', title:'Scouter APM 모니터링',
@ -52,25 +60,59 @@ const EDITIONS = [
/* ── 메신저 봇 명령어 목록 ──────────────────────────────── */
const BOT_COMMANDS = [
{ cmd: '/sr <제목>', desc: 'SR(서비스요청) 즉시 접수', cat: 'SR 관리' },
{ cmd: '/status', desc: '시스템 전체 현황 요약', cat: 'SR 관리' },
{ cmd: '/assign <SR-ID> <담당자>', desc: 'SR 담당자 즉시 배정', cat: 'SR 관리' },
{ cmd: '/approve <SR-ID>', desc: 'SR 즉시 승인', cat: 'SR 관리' },
{ cmd: '/sla', desc: 'SLA 위반 현황 목록', cat: 'SR 관리' },
{ cmd: '/incident <제목> [P1~P4]', desc: '인시던트 빠른 등록', cat: '인시던트' },
{ cmd: '/oncall', desc: '현재 당직자 즉시 조회', cat: '인시던트' },
{ cmd: '/rca <INC-ID>', desc: 'AI 자동 RCA 근본원인 분석', cat: '인시던트' },
{ cmd: '/escalate <SR-ID>', desc: '당직자에게 에스컬레이션', cat: '인시던트' },
{ cmd: '!deploy <세션ID>', desc: 'WAS 배포 실행 (SSH)', cat: '배포 제어' },
{ cmd: '/rollback <세션ID>', desc: '긴급 롤백', cat: '배포 제어' },
{ cmd: '!health <서버명>', desc: '서버 헬스체크', cat: '배포 제어' },
{ cmd: '/pms <프로젝트코드>', desc: '프로젝트 진척 현황', cat: 'PMS' },
{ cmd: '/report <코드> weekly', desc: '주간 보고서 메신저 발송', cat: 'PMS' },
{ cmd: '/wbs <코드>', desc: 'WBS 지연 현황', cat: 'PMS' },
{ cmd: '/scouter <서버명>', desc: 'Scouter APM 실시간 메트릭', cat: '모니터링' },
{ cmd: '/scan', desc: '시큐어코딩·보안 자동 점검', cat: '보안' },
{ cmd: '/vuln <서버|IP>', desc: '취약점 스캔', cat: '보안' },
{ cmd: '/notify <메시지>', desc: '운영팀 전체 공지 발송', cat: '공지' },
/* SR 관리 */
{ cmd: '/sr <제목>', desc: 'SR(서비스요청) 즉시 접수', cat: 'SR 관리' },
{ cmd: '/status', desc: '시스템 전체 현황 요약', cat: 'SR 관리' },
{ cmd: '/assign <SR-ID> <담당자>', desc: 'SR 담당자 즉시 배정', cat: 'SR 관리' },
{ cmd: '/approve <SR-ID>', desc: 'SR 또는 자율운영 작업 즉시 승인', cat: 'SR 관리' },
{ cmd: '/reject <SR-ID> [사유]', desc: 'SR 반려', cat: 'SR 관리' },
{ cmd: '/bulk <action> <SR-ID...>', desc: 'SR 대량 처리 (close/assign/status)', cat: 'SR 관리' },
{ cmd: '/sla', desc: 'SLA 위반 현황 목록', cat: 'SR 관리' },
{ cmd: '/escalate <SR-ID>', desc: '당직자에게 에스컬레이션', cat: 'SR 관리' },
/* 인시던트 */
{ cmd: '/incident <제목> [P1~P4]', desc: '인시던트 빠른 등록', cat: '인시던트' },
{ cmd: '/oncall', desc: '현재 당직자 즉시 조회', cat: '인시던트' },
{ cmd: '/rca <INC-ID>', desc: 'AI 자동 RCA 근본원인 분석', cat: '인시던트' },
/* 배포/CI-CD */
{ cmd: '!vibe <SR-ID>', desc: '바이브 코딩 세션 시작', cat: '배포 CI-CD' },
{ cmd: '!build <세션ID>', desc: '빌드 실행', cat: '배포 CI-CD' },
{ cmd: '!deploy <세션ID>', desc: 'WAS 배포 실행 (SSH)', cat: '배포 CI-CD' },
{ cmd: '/rollback <세션ID>', desc: '긴급 롤백', cat: '배포 CI-CD' },
{ cmd: '/cicd [project]', desc: 'Jenkins+Gitea CI/CD 전체 현황', cat: '배포 CI-CD' },
{ cmd: '/jenkins <job> [build|log]', desc: 'Jenkins 빌드 트리거·로그', cat: '배포 CI-CD' },
{ cmd: '/git <repo> [log|pr|branch]', desc: 'Gitea 저장소 정보', cat: '배포 CI-CD' },
{ cmd: '/release <project> [버전]', desc: '릴리즈 배포 파이프라인', cat: '배포 CI-CD' },
/* 인프라 제어 */
{ cmd: '!health <서버명>', desc: '서버 헬스체크', cat: '인프라' },
{ cmd: '!log <서버명>', desc: '서버 로그 분석', cat: '인프라' },
{ cmd: '!sm <서버> <스크립트>', desc: 'SM 원격 스크립트 실행', cat: '인프라' },
{ cmd: '/topology <서버명>', desc: 'CI 의존관계 토폴로지 조회', cat: '인프라' },
{ cmd: '/scouter <서버명>', desc: 'Scouter APM 실시간 메트릭', cat: '인프라' },
/* PMS 프로젝트 */
{ cmd: '/pms <프로젝트코드>', desc: '프로젝트 진척 현황', cat: 'PMS' },
{ cmd: '/report <코드> [daily|weekly|monthly]', desc: '보고서 발송', cat: 'PMS' },
{ cmd: '/wbs <코드>', desc: 'WBS 지연 현황', cat: 'PMS' },
{ cmd: '/deliverables <코드>', desc: '산출물 제출 현황', cat: 'PMS' },
{ cmd: '/issues <코드>', desc: '미결 이슈 목록', cat: 'PMS' },
/* 보안 */
{ cmd: '/scan', desc: '시큐어코딩·보안 자동 점검', cat: '보안' },
{ cmd: '/vuln <서버|IP>', desc: '취약점 스캔', cat: '보안' },
{ cmd: '/checklist', desc: '공공기관 보안 이행 현황', cat: '보안' },
{ cmd: '/perf [url]', desc: '성능·부하 테스트', cat: '보안' },
{ cmd: '/autoq', desc: '자율 운영 승인 대기 목록', cat: '자율 운영' },
/* 스크랩핑 봇 */
{ cmd: '!scrap <url>', desc: 'URL 즉시 스크랩', cat: '스크랩' },
{ cmd: '!scrap list [n]', desc: '최근 스크랩 결과 목록', cat: '스크랩' },
{ cmd: '!scrap publish <id>', desc: '스크랩 게시 + 메신저 알림', cat: '스크랩' },
{ cmd: '!scrap del <id>', desc: '스크랩 삭제', cat: '스크랩' },
{ cmd: '!scrap restore <id>', desc: '스크랩 원복', cat: '스크랩' },
/* 디자인 */
{ cmd: '/design capture', desc: 'UI 현재 화면 스크린샷 (Playwright)', cat: '디자인' },
{ cmd: '/design variant <키워드>', desc: 'Variant 디자인 레퍼런스 탐색', cat: '디자인' },
{ cmd: '/design <시스템>', desc: '시스템별 UI 개편 실행', cat: '디자인' },
/* 공지 */
{ cmd: '/notify <메시지>', desc: '운영팀 전체 공지 발송', cat: '공지' },
{ cmd: '/license', desc: '라이선스 상태 조회', cat: '공지' },
];
const MESSENGER_PLATFORMS = [
@ -81,12 +123,14 @@ const MESSENGER_PLATFORMS = [
];
const TECH_STACK = [
{ category: 'Backend', items: ['Python 3.11 / FastAPI', 'SQLAlchemy Async', 'PostgreSQL / SQLite'] },
{ category: 'AI·LLM', items: ['Ollama (온프레미스)', 'llama3.1:8b / codellama', '외부 API 완전 차단'] },
{ category: 'Backend', items: ['Python 3.11 / FastAPI', 'SQLAlchemy Async', 'PostgreSQL 16 / SQLite'] },
{ category: 'AI·LLM', items: ['Ollama (온프레미스)', 'llama3:8b / codellama', '외부 API 완전 차단'] },
{ category: 'Vector DB', items: ['pgvector 0.6.0 (PostgreSQL 확장)', 'ChromaDB 1.5.9', 'LangChain 1.3.2 RAG'] },
{ category: '자동화 봇', items: ['RPA Engine (소스 기반 Validation 학습)', '스크랩핑 봇 (BeautifulSoup)', '자연어 명령 파서 (Ollama)'] },
{ category: 'Infra', items: ['paramiko SSH/SFTP', '에이전트리스', 'AES-256-GCM 암호화'] },
{ category: 'Frontend', items: ['React.js / PWA', 'Chart.js 대시보드', 'D3.js 토폴로지'] },
{ category: 'DevOps', items: ['Jenkins CI/CD', 'Gitea 형상관리', 'Docker / K8s'] },
{ category: '모니터링', items: ['Scouter APM', 'Prometheus/Grafana', 'ELK/Splunk SIEM'] },
{ category: 'DevOps', items: ['Jenkins CI/CD', 'Gitea 형상관리', 'APScheduler 크론 스케줄러'] },
{ category: '모니터링', items: ['Scouter APM', 'Prometheus/Grafana', 'DR 자동화·CSAP 점검'] },
];
export default function GuardiaDetail() {
@ -169,7 +213,7 @@ export default function GuardiaDetail() {
<div className="container">
<div className="section-header">
<span className="section-label">Core Features</span>
<h2 className="section-title">GUARDiA가 제공하는<br/><em>8가지 핵심 기능</em></h2>
<h2 className="section-title">GUARDiA가 제공하는<br/><em>12가지 핵심 기능</em></h2>
<div className="divider" />
</div>
{/* 실행 화면 스크린샷 */}