Compare commits

..

No commits in common. "7c3a071e64b1ef75a93095fe6342c3c1c1bb7ee6" and "23b44d2e95d62d12e63abefb7034d18c944cf303" have entirely different histories.

8 changed files with 33 additions and 88 deletions

13
Jenkinsfile vendored
View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

View File

@ -105,8 +105,8 @@ export default function Header() {
<div className="header-inner container">
{/* 로고 */}
<Link to="/" className="logo" aria-label="(주)지오정보기술 홈으로">
<img src="/zioinfo-logo-dark.png" alt="(주)지오정보기술 로고" height="40"
onError={e => { e.target.src='/zioinfo-logo.png'; e.target.onerror = () => { e.target.style.display='none'; e.target.nextSibling.style.display='flex'; }; }} />
<img src="/zioinfo-logo.png" alt="(주)지오정보기술 로고" height="40"
onError={e => { e.target.src='/ziologo.png'; e.target.onerror = () => { e.target.style.display='none'; e.target.nextSibling.style.display='flex'; }; }} />
<span className="logo-text" style={{display:'none'}}>
<strong>Zio</strong>Info
</span>

View File

@ -8,22 +8,14 @@ const FEATURES = [
desc:'Ollama 온프레미스 sLLM 기반. 메신저 한 줄 명령 → 자연어 파싱 → 자동 배포·운영. 외부 API 완전 차단으로 폐쇄망 환경 최적화.' },
{ icon:'🔧', title:'에이전트리스 아키텍처',
desc:'대상 서버에 어떤 소프트웨어도 설치하지 않습니다. 표준 SSH/SFTP 프로토콜만으로 레거시 WAS(Tomcat/JBoss/WebLogic)를 원격 관리.' },
{ icon:'💬', title:'ChatOps + 자연어 명령',
desc:'카카오워크·네이버웍스·슬랙에서 자연어로 인프라 제어. "서버1 헬스체크 해줘", "SR-XXXX 배포해줘" 등 자연어를 자동으로 봇 명령어로 변환.' },
{ icon:'💬', title:'ChatOps 메신저 통합',
desc:'카카오워크, 네이버웍스, 슬랙 등 익숙한 메신저에서 /deploy, /status, /incident 명령으로 인프라를 즉시 제어.' },
{ 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 모니터링',
@ -60,59 +52,25 @@ const EDITIONS = [
/* ── 메신저 봇 명령어 목록 ──────────────────────────────── */
const BOT_COMMANDS = [
/* 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: '공지' },
{ 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: '공지' },
];
const MESSENGER_PLATFORMS = [
@ -123,14 +81,12 @@ const MESSENGER_PLATFORMS = [
];
const TECH_STACK = [
{ 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: 'Backend', items: ['Python 3.11 / FastAPI', 'SQLAlchemy Async', 'PostgreSQL / SQLite'] },
{ category: 'AI·LLM', items: ['Ollama (온프레미스)', 'llama3.1:8b / codellama', '외부 API 완전 차단'] },
{ 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 형상관리', 'APScheduler 크론 스케줄러'] },
{ category: '모니터링', items: ['Scouter APM', 'Prometheus/Grafana', 'DR 자동화·CSAP 점검'] },
{ category: 'DevOps', items: ['Jenkins CI/CD', 'Gitea 형상관리', 'Docker / K8s'] },
{ category: '모니터링', items: ['Scouter APM', 'Prometheus/Grafana', 'ELK/Splunk SIEM'] },
];
export default function GuardiaDetail() {
@ -213,7 +169,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>12가지 핵심 기능</em></h2>
<h2 className="section-title">GUARDiA가 제공하는<br/><em>8가지 핵심 기능</em></h2>
<div className="divider" />
</div>
{/* 실행 화면 스크린샷 */}
@ -253,10 +209,10 @@ export default function GuardiaDetail() {
</div>
<div className="gd-screenshots">
{[
{file:'manager_02_dashboard', caption:'Manager 대시보드 — SR 추이·우선순위 분포 (실제 화면)'},
{file:'manager_03_servers', caption:'서버 목록 — 인프라 자산 통합 관리'},
{file:'manager_04_scraping', caption:'스크랩핑 봇 — URL 수집·게시·삭제·원복 관리'},
{file:'manager_05_deployments', caption:'배포 이력 — CI/CD 파이프라인 현황'},
{file:'07_manager_dashboard', caption:'Manager 대시보드 — 서버·배포·SLA 통합 관제'},
{file:'08_manager_dr', caption:'DR 재해복구 관제 — RTO/RPO 실적 추적'},
{file:'09_manager_network', caption:'네트워크 장비 관제 — 스위치·방화벽 설정 백업'},
{file:'10_manager_csap', caption:'CSAP 보안 점검 — 준수율 자동 대시보드'},
].map((s,i) => (
<div key={i} className="screenshot-card">
<img src={`/screenshots/${s.file}.png`} alt={s.caption}