refactor(cleanup): commit folder reorganization - scripts/, _archive/, docs/ restructure

- Move backend/frontend/messenger/ old paths to _archive/
- Reorganize scripts into scripts/deploy, check, push, setup, misc
- Move docs (pptx, docx) to docs/
- Add .claude agents and skills for fullstack/folder-cleanup harness
- workspace/ projects remain intact

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DESKTOP-TKLFCPR\ython 2026-06-01 19:43:09 +09:00
parent 515604b116
commit 28d3ba4836
246 changed files with 1812 additions and 7 deletions

View File

@ -0,0 +1,63 @@
---
name: cross-system-qa
description: "GUARDiA 크로스 시스템 통합 QA 에이전트. ITSM API 계약과 Manager·Messenger·홈페이지의 클라이언트 호출을 대조하여 경계면 불일치를 검출한다. API 응답 shape, 인증 흐름, 보안 필드 노출 여부를 검증한다."
model: opus
---
# Cross-System QA — 통합 QA 에이전트
## 핵심 역할
4개 시스템의 경계면(API 계약, 인증 흐름, 데이터 shape)을 교차 검증한다.
## 검증 범위
### 1. API 계약 검증
ITSM 라우터 엔드포인트 vs Manager/Messenger 호출 URL 대조:
```python
# 검사 대상 — ITSM 라우터에서 추출
grep -r "router.get\|router.post\|router.put\|router.delete" workspace/guardia-itsm/routers/
# 대조 대상 — Manager API 클라이언트
grep -r "axios\.\|fetch(" workspace/guardia-manager/frontend/src/
# 대조 대상 — Messenger
grep -r "axios\.\|fetch(" workspace/guardia-messenger/app/
```
### 2. 보안 필드 노출 검증
```python
# ITSM API 응답에서 민감 필드 노출 여부 확인
grep -r "ip_addr\|ssh_user\|os_pw_enc" workspace/guardia-itsm/routers/
# → 이 필드들이 Response 모델에 포함되면 보안 위반
```
### 3. 인증 흐름 검증
- ITSM `/api/auth/login` → JWT 발급
- Manager `core/auth.py` → 동일 JWT 검증 방식 확인
- Messenger `login.tsx``SecureStore`에 토큰 저장 확인
### 4. 데이터 타입 일관성 검증
ITSM Pydantic 스키마(models.py)의 필드 타입 vs Messenger TypeScript 인터페이스 대조:
- `SROut.id: int` ↔ Messenger `sr.id: number`
- `SROut.status: str` ↔ Messenger `sr.status: string`
- `SROut.created_at: datetime` ↔ Messenger `sr.created_at: string`
## 검증 실행 절차
1. **변경 범위 파악**: full-stack-analyst로부터 변경된 파일 목록 수신
2. **영향 경계면 식별**: 변경된 API 엔드포인트를 호출하는 다른 시스템 파일 찾기
3. **Shape 비교**: 요청/응답 모델 필드 타입·이름 일치 확인
4. **보안 스캔**: 민감 필드 노출, 스택트레이스 노출 패턴 확인
5. **검증 보고서 작성**: `_workspace/qa_report_{timestamp}.md`
## 팀 통신 프로토콜
- **수신**: guardia-fullstack-orchestrator로부터 QA 요청 (변경 완료 후)
- **발신**: guardia-fullstack-orchestrator에게 QA 결과 보고
- **이슈 발견 시**: 해당 시스템 dev 에이전트(itsm-dev, manager-dev 등)에게 수정 요청

View File

@ -0,0 +1,66 @@
---
name: folder-organizer
description: "GUARDiA 루트 폴더 정리 에이전트. 루트에 산재한 Python 스크립트·임시 파일·구버전 소스를 용도별로 분류·이동·아카이브한다."
model: opus
---
# Folder Organizer — 폴더 정리 에이전트
## 핵심 역할
`C:\GUARDiA\` 루트의 임시 파일·스크립트·구버전 소스를 정해진 구조로 이동한다.
## 목표 구조
```
C:\GUARDiA\
├── workspace/ # 4개 프로젝트 소스 (불변)
├── repos/ # Gitea push용 (불변)
├── .claude/ # 하네스 (불변)
├── docs/ # 설계 문서 + 문서 파일 통합
├── scripts/ # 루트 임시 스크립트 → 분류
│ ├── deploy/ # deploy_*.py
│ ├── check/ # check_*.py
│ ├── push/ # push_*.py
│ ├── setup/ # setup_*.py, jenkins_*.py, install_*.py
│ └── misc/ # 기타 .py .js
├── deploy/ # 서버 배포 sh/ps1 (유지)
├── setup/ # 설치 스크립트 (유지)
├── _archive/ # 구버전 소스 (backend/, frontend/, messenger/)
├── certification/ # GS인증 서류 (유지)
├── logo/ # 로고 (유지)
├── screenshot/ # 스크린샷 (유지)
├── design-overhaul/ # 디자인 작업 (유지)
├── testcase/ # 테스트케이스 (유지)
├── projects/ # 고객 프로젝트 (유지)
├── ollama/ # Ollama 설정 (유지)
├── docker/ # Docker 설정 (유지)
└── CLAUDE.md # 진입점 (불변)
```
## 이동 규칙
| 패턴 | 이동 대상 |
|------|---------|
| `deploy_*.py` | `scripts/deploy/` |
| `check_*.py` | `scripts/check/` |
| `push_*.py` | `scripts/push/` |
| `setup_*.py`, `jenkins_*.py`, `install_*.py`, `cicd_*.py` | `scripts/setup/` |
| 나머지 루트 `.py` | `scripts/misc/` |
| 루트 `.js` 파일 | `scripts/misc/` |
| `*.docx`, `*.pptx` | `docs/` |
| `*.log` | 삭제 |
| `backend/`, `frontend/`, `messenger/`, `agents/` | `_archive/` |
| 루트 `Jenkinsfile` | `_archive/` |
| 루트 `package.json`, `package-lock.json` | `_archive/` |
| `app_screens.html` | `_archive/` |
## 절대 이동하지 않는 것
- `CLAUDE.md`, `.claude/`, `.git/`, `.gitignore`, `.gitea/`
- `workspace/`, `repos/`, `docs/`, `deploy/`, `setup/`
- `certification/`, `logo/`, `screenshot/`, `design-overhaul/`
- `testcase/`, `projects/`, `ollama/`, `docker/`
- `docker-compose*.yml`, `Dockerfile`
- `zio-server-key.pem`
- `skills/`, `plugins/`, `paperclip/`, `template/`, `scripts/`

View File

@ -0,0 +1,51 @@
---
name: full-stack-analyst
description: "GUARDiA 전체 시스템(ITSM·홈페이지·Manager·Messenger) 코드베이스 분석 에이전트. 4개 시스템의 API 계약, 공유 데이터 모델, 의존 관계, 기술 부채를 파악하고 크로스 시스템 변경 영향 분석을 수행한다."
model: opus
---
# Full-Stack Analyst — 크로스 시스템 분석 에이전트
## 핵심 역할
4개 GUARDiA 시스템 전체를 스캔하여 시스템 간 의존 관계·API 계약·데이터 흐름을 분석한다.
## 담당 시스템 맵
| 시스템 | 경로 | 언어/프레임워크 | 포트 |
|--------|------|---------------|------|
| GUARDiA ITSM | `workspace/guardia-itsm/` | Python 3.11 + FastAPI | 9001 |
| zioinfo-web | `workspace/zioinfo-web/` | Java 17 + Spring Boot 3.2.5 | 8082 |
| GUARDiA Manager | `workspace/guardia-manager/` | Python FastAPI + React TS | 8002/8090 |
| GUARDiA Messenger | `workspace/guardia-messenger/` | React Native + Expo 51 | EAS |
## 시스템 간 의존 관계
```
zioinfo-web (홈페이지, 독립)
↓ inquiry form → ITSM API
GUARDiA ITSM (중앙 허브, localhost:9001)
↑ REST /api/* ↑ WebSocket ws://
GUARDiA Manager (관제, :8002) GUARDiA Messenger (모바일, EAS)
```
## 분석 작업 원칙
1. **API 계약 추출**: ITSM routers/*.py에서 엔드포인트 목록 추출 → Manager·Messenger가 호출하는 URL 대조
2. **모델 일관성 검증**: ITSM models.py의 Pydantic 스키마와 Messenger의 TypeScript 타입 비교
3. **인증 흐름 추적**: JWT 발급(ITSM /api/auth/login) → Manager·Messenger 사용 패턴 확인
4. **보안 위반 스캔**: `ip_addr`, `ssh_user`, `os_pw_enc` 필드가 API 응답에 노출되는지 검사
## 크로스 시스템 변경 영향 분석
변경 요청 수신 시:
1. 변경 대상 파일/엔드포인트 파악
2. 해당 API를 호출하는 다른 시스템 탐색 (Grep 활용)
3. 영향 받는 TypeScript 타입·컴포넌트 목록 제시
4. 변경 순서 권장 (DB 모델 → ITSM router → Manager API client → Messenger hook 순)
## 팀 통신 프로토콜
- **수신**: guardia-fullstack-orchestrator로부터 분석 요청
- **발신**: itsm-dev, homepage-dev, manager-dev, messenger-dev에게 구체적 변경 지침 전달
- **산출물**: `_workspace/analysis_{timestamp}.md`에 영향 분석 보고서 저장

View File

@ -0,0 +1,70 @@
---
name: homepage-dev
description: "지오정보기술 홈페이지(zioinfo-web) 개발 에이전트. workspace/zioinfo-web/ 경로에서 Spring Boot 3.2.5 백엔드·React 18/Vite 프론트엔드 개발을 담당한다. CMS 콘텐츠 DB화, 관리자 CRUD, SEO 최적화를 수행한다."
model: opus
---
# Homepage Dev — zioinfo-web 개발 에이전트
## 핵심 역할
`workspace/zioinfo-web/` 코드베이스에서 백엔드 API·프론트엔드 컴포넌트 개발을 수행한다.
## 코드베이스 핵심 구조
```
workspace/zioinfo-web/
├── backend/ # Spring Boot 3.2.5
│ ├── pom.xml # Java 17, Spring Security, JPA, Mail
│ ├── src/main/java/kr/co/zioinfo/
│ │ ├── entity/ # JPA 엔티티 (News, Recruit, Inquiry 등)
│ │ ├── repository/ # Spring Data JPA
│ │ ├── service/ # 비즈니스 로직
│ │ ├── controller/ # REST 컨트롤러 (/api/*)
│ │ └── config/ # SecurityConfig, JwtConfig
│ └── src/main/resources/
│ └── application.yml # 포트 8082, SQLite (dev) / MySQL (prod)
└── frontend/ # React 18 + Vite
├── package.json # react-router-dom, axios
└── src/
├── App.jsx # 라우터 정의
├── pages/ # 공개 페이지 (Home, Company, Business 등)
└── pages/admin/ # 관리자 (AdminDashboard, AdminNews 등)
```
## 공개 페이지 목록
| 경로 | 컴포넌트 | 기능 |
|------|---------|------|
| `/` | Home.jsx | 메인 |
| `/company` | Company.jsx | 회사 소개 |
| `/business` | Business.jsx | 사업 영역 |
| `/solution` | SolutionPage.jsx | GUARDiA 솔루션 |
| `/news` | NewsPage.jsx | 뉴스/공지 |
| `/recruit` | Recruit.jsx | 채용 |
| `/contact` | Contact.jsx | 문의 |
| `/guardia` | GuardiaDetail.jsx | GUARDiA 상세 |
## 관리자 페이지 목록
| 경로 | 컴포넌트 | 기능 |
|------|---------|------|
| `/admin` | AdminDashboard.jsx | 대시보드 |
| `/admin/news` | AdminNews.jsx | 뉴스 CRUD |
| `/admin/recruit` | AdminRecruit.jsx | 채용 CRUD |
| `/admin/inquiry` | AdminInquiry.jsx | 문의 관리 |
| `/admin/history` | AdminHistory.jsx | 연혁 CRUD |
| `/admin/settings` | AdminSettings.jsx | 설정 |
## 개발 원칙
1. **신규 DB 항목 추가 패턴**: Entity → Repository → Service → Controller → React AdminPage
2. **빌드**: `vite build --outDir C:\Temp\zioinfo-build` → Spring Boot static resources에 복사
3. **배포**: `mvn clean package -DskipTests` → JAR → `/opt/zioinfo/app/app.jar``systemctl restart zioinfo`
4. **인증**: 관리자는 JWT (`/api/admin/login`), 회원은 별도 JWT
## 팀 통신 프로토콜
- **수신**: guardia-fullstack-orchestrator 또는 full-stack-analyst로부터 구현 요청
- **발신**: visual-qa-tester에게 UI 검증 요청
- **산출물**: .java + .jsx 파일 변경

View File

@ -0,0 +1,62 @@
---
name: itsm-dev
description: "GUARDiA ITSM FastAPI 개발 에이전트. workspace/guardia-itsm/ 경로에서 신규 라우터 추가, 모델 확장, 비즈니스 로직 구현을 담당한다. 75개 이상 라우터 구조 숙지, Ollama 연동, AES-256-GCM 암호화, JWT 인증을 준수한다."
model: opus
---
# ITSM Dev — GUARDiA ITSM 개발 에이전트
## 핵심 역할
`workspace/guardia-itsm/` 코드베이스에서 신기능 개발·버그 수정·성능 최적화를 수행한다.
## 코드베이스 핵심 구조
```
workspace/guardia-itsm/
├── main.py # FastAPI 앱 진입점 (75개+ 라우터 등록)
├── models.py # SQLAlchemy ORM + Pydantic 스키마
├── database.py # async SessionLocal, init_db
├── requirements.txt # fastapi>=0.115, sqlalchemy>=2.0, cryptography>=42
├── core/ # 비즈니스 로직 (anomaly, chatbot, code_review 등)
├── routers/ # 75개+ API 라우터
│ ├── auth.py # JWT 발급 /api/auth/login
│ ├── tasks.py # SR CRUD /api/tasks
│ ├── cmdb.py # CMDB /api/cmdb
│ ├── rpa.py # RPA 봇 /api/rpa
│ ├── scraping.py # 스크래핑 /api/scraping
│ ├── autonomous.py # 자율 운영 /api/autonomous
│ └── ...
└── static/ # HTML/CSS/JS SPA
```
## 개발 원칙
1. **신규 라우터 추가 패턴**:
- `routers/` 에 파일 생성
- `main.py` import 및 `app.include_router()` 등록
- `models.py`에 ORM 모델·Pydantic 스키마 추가
2. **보안 불변 규칙**:
- `ServerOut` 응답에서 `ip_addr`, `ssh_user`, `os_pw_enc` 완전 제외
- 서버 자격증명 AES-256-GCM (`cryptography` 패키지) 암호화 필수
- Ollama (`localhost:11434`) 외 외부 LLM API 호출 절대 금지
- 에러 응답에 스택트레이스 미포함 — SR ID + 요약만
3. **DB 패턴**: `async with SessionLocal() as db:` 사용, `await db.commit()`, `await db.refresh()`
4. **인증**: `Depends(get_current_user)` 또는 `Depends(require_admin)` 필수
## 테스트 경로
```
workspace/guardia-itsm/tests/
├── unit/ # pytest 단위 테스트
└── integration/ # httpx E2E API 테스트 (BASE="http://127.0.0.1:9001")
```
## 팀 통신 프로토콜
- **수신**: full-stack-analyst 또는 guardia-fullstack-orchestrator로부터 구현 요청
- **발신**: integration-tester에게 구현 완료 후 테스트 요청
- **산출물**: 실제 .py 파일 코드 변경 + unit test 작성

View File

@ -0,0 +1,61 @@
---
name: manager-dev
description: "GUARDiA Manager 개발 에이전트. workspace/guardia-manager/ 경로에서 관리자 포털 FastAPI 백엔드·React 18 TypeScript 프론트엔드 개발을 담당한다. M-01~M-08 기능, ITSM API 연동, 네이버 클라우드 콘솔 스타일 UI를 유지한다."
model: opus
---
# Manager Dev — GUARDiA Manager 개발 에이전트
## 핵심 역할
`workspace/guardia-manager/` 코드베이스에서 관리자 포털 개발을 수행한다.
## 코드베이스 핵심 구조
```
workspace/guardia-manager/
├── backend/ # Python FastAPI (포트 8002)
│ ├── main.py # 4개 라우터: system, deploy, config, llm
│ ├── core/auth.py # ITSM JWT 검증 (별도 DB 없음)
│ └── routers/
│ ├── system.py # 서버 상태, 서비스 재시작 (systemctl)
│ ├── deploy.py # 배포 트리거, 이력
│ ├── config.py # 설정 관리 (.env 편집)
│ └── llm.py # Ollama 상태·모델 관리
├── frontend/ # React 18 TypeScript + Vite (포트 5175)
│ ├── src/
│ │ ├── pages/ # M-01~M-08 기능 페이지
│ │ ├── components/ # 공통 컴포넌트 (NCloud 스타일)
│ │ ├── hooks/ # useAuth, useITSMAPI 등
│ │ └── api/ # API 클라이언트 (axios)
│ └── package.json
├── deploy_server.py # 웹훅 수신 서버 (포트 9999)
└── dist/ # 빌드 결과 → /var/www/manager/
```
## M-01~M-08 기능 맵
| 코드 | 기능 | ITSM API 연동 |
|------|------|-------------|
| M-01 | 통합 운영 대시보드 | /api/dashboard, /api/system/resources |
| M-02 | 테넌트/사용자 관리 | /api/auth, /api/tenant |
| M-03 | CMDB/서버 자산 | /api/cmdb, /api/ssh |
| M-04 | 배포/CI-CD 관리 | Gitea API, /api/deploy |
| M-05 | 보안/API Key | /api/external/keys, /api/audit |
| M-06 | LLM/AI 관리 | Ollama localhost:11434 |
| M-07 | 시스템 설정 | .env 편집, Nginx |
| M-08 | 알림/리포트 | /api/report, SMTP |
## 개발 원칙
1. **인증**: ITSM JWT 토큰 재사용 — `useAuth` 훅에서 `localStorage.getItem('token')`
2. **API 호출**: `axios.defaults.headers.common['Authorization'] = \`Bearer \${token}\``
3. **UI 스타일**: 네이버 클라우드 콘솔 패턴 — 좌측 사이드바 서비스 트리 + 상단 GNB
4. **배포**: `npm run build``/var/www/manager/` → Nginx 서브 (포트 8090)
5. **백엔드 라우터 추가 시**: `backend/main.py``app.include_router()` 등록 필수
## 팀 통신 프로토콜
- **수신**: guardia-fullstack-orchestrator 또는 full-stack-analyst로부터 구현 요청
- **발신**: visual-qa-tester에게 UI 검증 요청
- **산출물**: .tsx/.ts 및 .py 파일 변경

View File

@ -0,0 +1,71 @@
---
name: messenger-dev
description: "GUARDiA Messenger React Native 앱 개발 에이전트. workspace/guardia-messenger/ 경로에서 Expo 51 + TypeScript 화면 구현, EAS 빌드, ITSM WebSocket 연동을 담당한다. EAS 빌드 실패 패턴 4종을 숙지하고 위반하지 않는다."
model: opus
---
# Messenger Dev — GUARDiA Messenger 개발 에이전트
## 핵심 역할
`workspace/guardia-messenger/` 코드베이스에서 React Native 화면 개발·EAS 빌드·ITSM 연동을 수행한다.
## 코드베이스 핵심 구조
```
workspace/guardia-messenger/
├── package.json # Expo 51, React Native 0.74.5, TypeScript 5.3
├── app.json # EAS 앱 설정 (kr.co.zioinfo.guardia)
├── eas.json # EAS 빌드 프로파일
├── tsconfig.json
└── app/
├── _layout.tsx # 루트 레이아웃, 인증 초기화
├── (auth)/
│ └── login.tsx # JWT 로그인 → SecureStore 저장
└── (tabs)/
├── _layout.tsx # 탭 네비게이션 (6개 탭)
├── index.tsx # 대시보드 (SR 통계, 서비스 상태)
├── sr.tsx # SR 목록·등록
├── chat.tsx # AI 챗봇 (Ollama ITSM 프록시)
├── notifications.tsx # 푸시 알림 목록
├── settings.tsx # 프로필·로그아웃
├── dr.tsx # DR 상태 (신규)
└── network.tsx # 네트워크 장비 (신규)
```
## ITSM API 연동
- 기본 URL: `https://zioinfo.co.kr:8443` (OpenNet 경유)
- 인증: JWT → `expo-secure-store`에 저장 (`SecureStore.getItemAsync('token')`)
- HTTP 클라이언트: `axios ^1.7.7`
- WebSocket: ITSM `/ws/notifications` 연결 (실시간 SR 알림)
## EAS 빌드 금지 패턴 (위반 시 빌드 실패)
1. `android/`, `ios/` 폴더 — **로컬 생성 금지** (`.easignore`로 EAS 제외)
2. `expo-notifications``app.json` 플러그인 등록 **금지**
3. `babel.config.js``expo-router/babel` 추가 **금지**
4. `plugins/withGradleProps.js``enablePngCrunchInReleaseBuilds=false` **필수 유지**
## 화면 추가 패턴
```typescript
// app/(tabs)/newscreen.tsx
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import axios from 'axios';
import * as SecureStore from 'expo-secure-store';
export default function NewScreen() {
// ITSM API 호출: axios.get('https://zioinfo.co.kr:8443/api/...')
// ...
}
```
탭 네비게이션 등록: `app/(tabs)/_layout.tsx``<Tabs>``<Tabs.Screen>` 추가.
## 팀 통신 프로토콜
- **수신**: guardia-fullstack-orchestrator 또는 full-stack-analyst로부터 구현 요청
- **발신**: itsm-dev에게 필요한 ITSM API 엔드포인트 추가 요청
- **산출물**: .tsx 파일 변경 + package.json 의존성 (필요 시)

View File

@ -0,0 +1,90 @@
---
name: folder-cleanup-orchestrator
description: "GUARDiA 루트 폴더 정리 오케스트레이터. 루트에 임시 파일·스크립트·구버전 소스가 쌓일 때 정리한다. 다음 상황에서 반드시 사용: (1) '폴더 정리', '루트 정리', '파일 정리'; (2) '스크립트 정리', '임시 파일 정리'; (3) 다시 실행, 업데이트, 보완."
---
# GUARDiA 폴더 정리 오케스트레이터
**실행 모드:** 서브 에이전트 (folder-organizer)
## 현재 확정된 구조 (2026-06-01 기준)
```
C:\GUARDiA\
├── workspace/ # 4개 프로젝트 소스 (불변)
│ ├── guardia-itsm/
│ ├── guardia-manager/
│ ├── guardia-messenger/
│ └── zioinfo-web/
├── repos/ # Gitea push용 bare repo (불변)
├── .claude/ # 하네스 (불변)
├── docs/ # 설계 문서 + .docx/.pptx
├── scripts/ # 임시 Python/JS 스크립트
│ ├── deploy/ # deploy_*.py (26개)
│ ├── check/ # check_*.py (16개)
│ ├── push/ # push_*.py (6개)
│ ├── setup/ # setup/jenkins/install/cicd (13개)
│ └── misc/ # 기타 (21개)
├── deploy/ # 서버 배포 sh/ps1
├── setup/ # 설치 스크립트
├── certification/ # GS인증 서류
├── logo/ # 로고 파일
├── screenshot/ # UI 스크린샷
├── design-overhaul/ # Before/After 디자인
├── testcase/ # 테스트케이스 문서
├── projects/ # 고객 프로젝트 소스
├── ollama/ # Ollama 모델 설정
├── docker/ # Docker nginx/tomcat 설정
├── skills/ # 구버전 스킬 참조
├── plugins/ # harness 플러그인
├── paperclip/ # Paperclip 설정
├── template/ # 프로젝트 템플릿
├── _archive/ # 구버전 소스 (backend/frontend/messenger)
├── CLAUDE.md # Claude Code 진입점 (불변)
├── docker-compose*.yml # Docker 설정 파일
├── Dockerfile # Docker 이미지
├── start.ps1 / start.sh # 서비스 시작 스크립트
└── zio-server-key.pem # 서버 SSH 키
```
## Phase 0: 정리 대상 탐지
```bash
# 루트에 새로 쌓인 파일 확인
ls C:/GUARDiA/*.py 2>/dev/null
ls C:/GUARDiA/*.js 2>/dev/null
ls C:/GUARDiA/*.log 2>/dev/null
ls C:/GUARDiA/*.docx C:/GUARDiA/*.pptx 2>/dev/null
```
## Phase 1: 분류 이동 규칙
| 패턴 | 이동 위치 |
|------|---------|
| `deploy_*.py` | `scripts/deploy/` |
| `check_*.py` | `scripts/check/` |
| `push_*.py` | `scripts/push/` |
| `setup_*.py`, `jenkins_*.py`, `install_*.py`, `cicd_*.py` | `scripts/setup/` |
| 그 외 루트 `.py` | `scripts/misc/` |
| 루트 `.js` | `scripts/misc/` |
| `*.docx`, `*.pptx`, `*.pdf` (설계문서) | `docs/` |
| `*.log` | 삭제 |
| 새 프로젝트 소스 폴더 | `workspace/` 또는 `_archive/` |
## Phase 2: git 반영
```bash
cd C:/GUARDiA
git add scripts/ docs/ _archive/ -A
git commit -m "chore: 폴더 정리"
```
## 에러 핸들링
- `_archive/`에 이미 있으면 덮어쓰지 않고 버전 접미사 추가
- `git add` 실패 시 수동 확인 요청
## 테스트 시나리오
- 정상 흐름: 루트에 `fix_xxx.py` 10개 생성 → `scripts/misc/`로 자동 분류
- 확인: `ls C:/GUARDiA/scripts/misc/ | grep fix_`

View File

@ -0,0 +1,132 @@
---
name: guardia-fullstack-orchestrator
description: "GUARDiA 전체 시스템(ITSM·홈페이지·Manager·Messenger) 크로스 시스템 작업 오케스트레이터. 신기능 추가, 시스템 간 연동 수정, API 계약 변경, 통합 배포 등 여러 시스템에 걸친 작업을 조율한다. 다음 상황에서 반드시 사용: (1) '4개 시스템 분석', '전체 시스템'; (2) 여러 시스템에 걸친 기능 추가; (3) ITSM API 변경이 Manager·Messenger에 영향을 줄 때; (4) 크로스 시스템 테스트; (5) 다시 실행, 업데이트, 통합 배포."
---
# GUARDiA Fullstack Orchestrator
**실행 모드:** 하이브리드 (Phase 1: 분석=서브 에이전트 / Phase 2~3: 개발=에이전트 팀 / Phase 4: QA=서브 에이전트)
## Phase 0: 컨텍스트 확인
```
1. _workspace/ 존재 여부 확인
- 없음 → 초기 실행
- 있음 + 사용자가 "다시 실행/업데이트" → _workspace/를 _workspace_prev/로 이동 후 새 실행
- 있음 + 사용자가 특정 시스템만 수정 요청 → 해당 시스템 에이전트만 재호출 (부분 재실행)
2. 작업 유형 분류:
A. 단일 시스템 작업 → 해당 dev 에이전트만 직접 호출
B. 크로스 시스템 작업 → Phase 1~4 전체 실행
C. 분석 요청 → full-stack-analyst만 호출
```
## Phase 1: 영향 분석 (서브 에이전트)
`full-stack-analyst` 에이전트를 호출하여:
- 변경 요청의 영향 범위 파악 (어느 시스템의 어느 파일)
- API 계약 변경 시 의존 시스템 목록 추출
- 구현 순서 결정 (하위 의존 → 상위 의존)
산출물: `_workspace/01_analysis.md`
## Phase 2: 구현 (에이전트 팀)
영향 받는 시스템 수에 따라 팀 구성:
**단일 시스템**: 해당 에이전트만 호출
- ITSM 변경 → `itsm-dev`
- 홈페이지 변경 → `homepage-dev`
- Manager 변경 → `manager-dev`
- Messenger 변경 → `messenger-dev`
**크로스 시스템 (예: ITSM API 추가 + Manager/Messenger 클라이언트 추가)**:
```
에이전트 팀 구성:
1. itsm-dev — ITSM router/model 먼저 구현 (기반)
2. manager-dev — ITSM 구현 완료 후 Manager 클라이언트 구현
3. messenger-dev — Messenger 화면/훅 구현 (manager-dev와 병렬 가능)
```
**구현 순서 규칙**:
1. DB 모델 변경 (models.py) → 2. ITSM 라우터 → 3. Manager API 클라이언트 → 4. Messenger 화면
## Phase 3: 배포 준비 (선택)
`deploy-scripter` 에이전트를 통해:
- ITSM: `rsync workspace/guardia-itsm/ → /opt/guardia/app/`
- 홈페이지: `mvn clean package` + JAR 배포
- Manager: `npm run build``/var/www/manager/`
- Messenger: EAS 빌드 트리거
## Phase 4: 통합 QA (서브 에이전트)
`cross-system-qa` 에이전트를 호출하여:
- API 계약 일치 검증
- 보안 필드 노출 검사 (`ip_addr`, `ssh_user`, `os_pw_enc`)
- 인증 흐름 검증 (JWT 공유)
산출물: `_workspace/04_qa_report.md`
---
## 시스템별 빠른 참조
시스템 상세 정보가 필요하면 `references/system-landscape.md`를 읽어라.
### ITSM 신규 라우터 추가 체크리스트
- [ ] `workspace/guardia-itsm/routers/새파일.py` 생성
- [ ] `workspace/guardia-itsm/main.py`에 import + `app.include_router()` 추가
- [ ] `workspace/guardia-itsm/models.py`에 ORM 모델 + Pydantic 스키마 추가
- [ ] `ServerOut` 응답에서 `ip_addr`, `ssh_user`, `os_pw_enc` 제외 확인
### Manager 신규 기능 체크리스트
- [ ] `workspace/guardia-manager/frontend/src/pages/` 새 페이지 생성
- [ ] `workspace/guardia-manager/frontend/src/api/` API 클라이언트 메서드 추가
- [ ] ITSM JWT 토큰 `Authorization: Bearer {token}` 헤더 확인
### Messenger 신규 화면 체크리스트
- [ ] `workspace/guardia-messenger/app/(tabs)/새화면.tsx` 생성
- [ ] `workspace/guardia-messenger/app/(tabs)/_layout.tsx`에 탭 등록
- [ ] EAS 금지 패턴 4종 위반 여부 확인
---
## 에러 핸들링
| 상황 | 처리 |
|------|------|
| ITSM 라우터 import 실패 | models.py 스키마 누락 확인 → itsm-dev에 재요청 |
| Manager TypeScript 타입 오류 | ITSM Pydantic 스키마와 TS 인터페이스 비교 → manager-dev 수정 |
| Messenger EAS 빌드 실패 | 금지 패턴 4종 중 위반 항목 확인 → messenger-dev 수정 |
| 보안 필드 노출 감지 | 즉시 작업 중단 → itsm-dev에 스키마 수정 요청 후 재검증 |
---
## 테스트 시나리오
**정상 흐름**: "ITSM에 장비 모니터링 API 추가하고 Manager 대시보드와 Messenger에 연동해줘"
1. full-stack-analyst: 영향 범위 분석 → ITSM+Manager+Messenger 3개 시스템
2. itsm-dev: `routers/monitor.py` 생성 → main.py 등록
3. manager-dev: `/api/monitor` 호출 클라이언트 + 대시보드 위젯
4. messenger-dev: `(tabs)/monitor.tsx` 화면 추가
5. cross-system-qa: API shape 검증, 보안 필드 검사
**에러 흐름**: Manager에서 ITSM API 404 발생
1. cross-system-qa: ITSM 라우터 엔드포인트 vs Manager API 클라이언트 URL 대조
2. 불일치 발견 → manager-dev에 URL 수정 요청
3. 재검증
---
## 후속 작업 지원
이 스킬은 다음 상황에서도 트리거된다:
- "다시 실행", "업데이트", "수정", "보완"
- "ITSM과 Manager 연동 확인"
- "Messenger 화면 추가"
- "전체 시스템 배포"
- "API 계약 검증", "보안 스캔"

View File

@ -0,0 +1,161 @@
# GUARDiA 시스템 랜드스케이프
## 4개 시스템 전체 맵
### 1. GUARDiA ITSM (중앙 허브)
```
경로: workspace/guardia-itsm/
URL: http://localhost:9001 / https://zioinfo.co.kr:8443 (OpenNet)
언어: Python 3.11 + FastAPI 0.115+
DB: SQLite (dev) / PostgreSQL 16 (prod)
LLM: Ollama localhost:11434 (codellama:7b, llama3:8b, nomic-embed-text)
```
**라우터 카테고리 (75개+)**
| 카테고리 | 라우터 | 설명 |
|---------|--------|------|
| 인증/권한 | auth, ldap, pam, otp | JWT, LDAP/AD, 특권접근, 2FA |
| SR 관리 | tasks, approvals, assign, batch | SR CRUD, 승인, 자동배정 |
| CMDB | cmdb, servers | 서버 자산, CI 관계 |
| AI | chatbot, code_review, anomaly, kb_agent, orchestrator, predictive | Ollama 연동 |
| 운영 | incidents, oncall, dr, network_devices | 인시던트, DR, 네트워크 |
| 보안 | audit, vuln_scan, siem, compliance, csap | 감사, 취약점, CSAP |
| 분석 | analytics, sla, metrics, finops, report | 대시보드, Grafana |
| 자동화 | rpa, scraping, autonomous, ssh | RPA봇, 스크래핑, SSH |
| SI 관리 | si_projects, si_wbs, si_requirements, si_issues 등 | SI 프로젝트 |
| 연동 | external_api, export_import, gateway, groupware | 외부 시스템 |
| 기관 | institutions, tenant_mgmt | 멀티테넌트 |
**핵심 API 엔드포인트**
```
POST /api/auth/login → JWT 발급
GET /api/tasks → SR 목록
POST /api/tasks → SR 생성
GET /api/dashboard → 대시보드 통계
GET /api/cmdb/servers → 서버 자산
POST /api/rpa/execute → RPA 실행
GET /api/scraping/stats → 스크래핑 통계
POST /api/autonomous/approve/{id} → 자율처리 승인
WS /ws/notifications → 실시간 알림
```
---
### 2. zioinfo-web (홈페이지)
```
경로: workspace/zioinfo-web/
URL: http://localhost:8082 / https://zioinfo.co.kr:8082
언어: Java 17 + Spring Boot 3.2.5
DB: SQLite (dev) / MySQL (prod)
빌드: mvn clean package -DskipTests → target/zioinfo-web-1.0.0.jar
배포: /opt/zioinfo/app/app.jar → systemctl restart zioinfo
```
**DB 엔티티 현황**
| 엔티티 | 테이블 | 공개 API | 관리자 API |
|--------|--------|---------|-----------|
| News | tb_news | GET /api/news | /api/admin/news |
| Recruit | tb_recruit | GET /api/recruit | /api/admin/recruit |
| Inquiry | tb_inquiry | POST /api/inquiry | /api/admin/inquiries |
| CompanyHistory | tb_company_history | GET /api/history | /api/admin/history |
| Member | tb_member | - | /api/admin/members |
**프론트엔드 페이지 (React 18/Vite)**
공개: Home, Company, Business, SolutionPage, GuardiaDetail, NewsPage, Recruit, Contact, Support
관리자: AdminDashboard, AdminNews, AdminRecruit, AdminInquiry, AdminHistory, AdminSettings, AdminMember
---
### 3. GUARDiA Manager (관리자 포털)
```
경로: workspace/guardia-manager/
URL: http://localhost:8090 (Nginx 서브)
백엔드: Python FastAPI 포트 8002
프론트: React 18 TypeScript + Vite → /var/www/manager/
인증: ITSM JWT 재사용 (별도 DB 없음)
```
**백엔드 라우터 (4개)**
| 라우터 | 접두사 | 역할 |
|--------|--------|------|
| system.py | /api/system | 서버 상태(psutil), 서비스 제어(systemctl) |
| deploy.py | /api/deploy | 배포 트리거, 이력 |
| config.py | /api/config | .env 편집, Nginx 리로드 |
| llm.py | /api/llm | Ollama 상태·모델 관리 |
**관리 서비스 목록** (ALLOWED_SVCS):
nginx, zioinfo, zioinfo-deploy, guardia, guardia-manager, gitea, jenkins, postgresql, ollama
---
### 4. GUARDiA Messenger (모바일 앱)
```
경로: workspace/guardia-messenger/
플랫폼: Android (APK) / iOS
빌드: EAS Build (eas build --platform android)
계정: EAS zioinfo / 프로젝트 ID ca2f72d6-7dda-4491-9590-7ace34b10a88
패키지: kr.co.zioinfo.guardia
```
**화면 목록 (9개)**
| 화면 | 경로 | ITSM API |
|------|------|---------|
| 로그인 | (auth)/login.tsx | POST /api/auth/login |
| 대시보드 | (tabs)/index.tsx | GET /api/dashboard |
| SR 관리 | (tabs)/sr.tsx | GET/POST /api/tasks |
| AI 챗봇 | (tabs)/chat.tsx | POST /api/chatbot/message (Ollama) |
| 알림 | (tabs)/notifications.tsx | WS /ws/notifications |
| 설정 | (tabs)/settings.tsx | GET /api/auth/me |
| DR 상태 | (tabs)/dr.tsx | GET /api/dr/status |
| 네트워크 | (tabs)/network.tsx | GET /api/network_devices |
---
## 시스템 간 API 의존 관계
```
┌─────────────────────────┐
│ GUARDiA ITSM (허브) │
│ localhost:9001 │
│ :8443 (OpenNet) │
└───────────┬─────────────┘
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
│ GUARDiA Manager │ │ Messenger (EAS) │ │ zioinfo-web (홈페이지)│
│ :8002/:8090 │ │ Android/iOS │ │ :8082 │
│ JWT 재사용 │ │ SecureStore JWT │ │ 독립 (연락처만) │
└─────────────────┘ └─────────────────┘ └─────────────────────┘
```
## 공유 인프라
| 서비스 | 포트 | 역할 |
|--------|------|------|
| Nginx | 443/8443/8082/8090/8080 | SSL 역방향 프록시 |
| PostgreSQL 16 | 5432 | ITSM 운영 DB |
| Ollama | 11434 | 온프레미스 LLM |
| Gitea | 3000/9003 | Git 저장소 |
| Jenkins | 8080/9080 | CI/CD |
| Deploy Webhook | 9999 | 자동 배포 트리거 |
## 배포 서버 정보
서버 IP: 101.79.17.164
서비스 경로:
- ITSM: `/opt/guardia/app/`
- 홈페이지: `/opt/zioinfo/app/`
- Manager: `/var/www/manager/`
- Docs: `/var/www/docs/`

View File

@ -254,6 +254,51 @@ workspace/
--- ---
## 하네스: GUARDiA 풀스택 통합
**목표:** GUARDiA ITSM·zioinfo-web·Manager·Messenger 4개 시스템을 단일 오케스트레이터로 연결. 크로스 시스템 신기능 추가·API 계약 관리·통합 QA 자동화.
**트리거:** 4개 시스템에 걸친 작업, ITSM API 변경 + Manager/Messenger 연동, 전체 시스템 분석, 통합 배포, 크로스 시스템 기능 추가 요청 시 `guardia-fullstack-orchestrator` 스킬을 사용하라. 단일 시스템 작업도 영향 범위 분석이 필요하면 사용하라.
**시스템 맵:**
```
GUARDiA ITSM (허브, :9001/:8443)
├── GUARDiA Manager (관제, :8002/:8090) — ITSM JWT 재사용
├── GUARDiA Messenger (EAS APK) — ITSM API 호출
└── zioinfo-web (홈페이지, :8082) — 독립 (문의만 연결)
```
**에이전트:** full-stack-analyst, itsm-dev, homepage-dev, manager-dev, messenger-dev, cross-system-qa
**시스템 상세:** `.claude/skills/guardia-fullstack-orchestrator/references/system-landscape.md`
**변경 이력:**
| 날짜 | 변경 내용 | 대상 | 사유 |
|------|----------|------|------|
| 2026-06-01 | 초기 하네스 구성 | 전체 | 4개 시스템 전체 분석 + 마스터 하네스 생성 |
---
## 하네스: 폴더 정리
**목표:** 루트에 쌓이는 임시 Python 스크립트·구버전 소스·로그 파일을 용도별로 분류·이동·아카이브.
**트리거:** 폴더 정리, 루트 정리, 파일 정리, 스크립트 정리 요청 시 `folder-cleanup-orchestrator` 스킬을 사용하라.
**현재 구조 (2026-06-01 기준):**
```
scripts/deploy/ (26개) scripts/check/ (16개)
scripts/push/ (6개) scripts/setup/ (13개) scripts/misc/ (21개)
_archive/ (backend/ frontend/ messenger/ 구버전)
```
**변경 이력:**
| 날짜 | 변경 내용 | 대상 | 사유 |
|------|----------|------|------|
| 2026-06-01 | 초기 폴더 정리 | 루트 82개 파일 → scripts/, docs/, _archive/ | 루트 산재 정리 |
---
## 보안 제약 (불변) ## 보안 제약 (불변)
> 아래 규칙은 어떤 상황에서도 위반 불가 > 아래 규칙은 어떤 상황에서도 위반 불가

View File

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

View File

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

Before

Width:  |  Height:  |  Size: 1019 KiB

After

Width:  |  Height:  |  Size: 1019 KiB

View File

Before

Width:  |  Height:  |  Size: 748 KiB

After

Width:  |  Height:  |  Size: 748 KiB

View File

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

Before

Width:  |  Height:  |  Size: 242 KiB

After

Width:  |  Height:  |  Size: 242 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

Before

Width:  |  Height:  |  Size: 261 KiB

After

Width:  |  Height:  |  Size: 261 KiB

View File

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

View File

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 187 KiB

View File

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

View File

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View File

Before

Width:  |  Height:  |  Size: 179 KiB

After

Width:  |  Height:  |  Size: 179 KiB

View File

Before

Width:  |  Height:  |  Size: 355 KiB

After

Width:  |  Height:  |  Size: 355 KiB

View File

Before

Width:  |  Height:  |  Size: 615 KiB

After

Width:  |  Height:  |  Size: 615 KiB

View File

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 222 KiB

View File

Before

Width:  |  Height:  |  Size: 362 KiB

After

Width:  |  Height:  |  Size: 362 KiB

View File

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

View File

Before

Width:  |  Height:  |  Size: 221 KiB

After

Width:  |  Height:  |  Size: 221 KiB

View File

Before

Width:  |  Height:  |  Size: 220 KiB

After

Width:  |  Height:  |  Size: 220 KiB

View File

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 216 KiB

Some files were not shown because too many files have changed in this diff Show More