guardia-esn/.claude/skills/guardia-esn-orchestrator/SKILL.md
2026-06-17 07:00:42 +09:00

119 lines
5.3 KiB
Markdown

# guardia-esn-orchestrator
## 역할
레거시 ESL(전자 가격표) 관리 시스템(`workspace/esn/` 6개 프로젝트 — Spring Boot 1.5 + Java 8 + Thymeleaf)을 Spring Boot 3.5 + Java 17 + React 19 + PostgreSQL 단일 플랫폼으로 통합한 `workspace/guardia-esn/` 프로젝트를 운영·확장하는 오케스트레이터 스킬.
## 트리거
"guardia-esn", "ESN 통합", "ESL 플랫폼", "전자가격표", "HCore", "POS 변환", "PosCvt", "ESN 알람", "ESL 템플릿", "업데이트 큐", "다시 실행", "업데이트" 요청 시 이 스킬을 사용하라.
## 프로젝트 정보
- **위치:** `C:\GUARDiA\workspace\guardia-esn\`
- **포트:** backend:8016 (단일 JAR, Vite 번들)
- **DB:** `guardia_esn_db` / `guardia_esn_user` / `guardia_esn_pass2026`
- **패키지:** `com.zioinfo.esn`
- **멀티테넌트:** `tenant_code VARCHAR(20)` — LGINNOTEK / LGIT / EMART / ZIOINFO
- **Gitea:** `http://git.zioinfo.co.kr/zio/guardia-esn`
- **서버:** `101.79.17.164` `/opt/guardia-esn/`
## 레거시 소스 (C:\GUARDiA\workspace\esn\)
| 레거시 프로젝트 | 용도 | 현대화 대상 |
|----------------|------|------------|
| ESN_WEB_ZIOINFO | ZIOINFO ESL 웹 관리 (Thymeleaf) | → React 19 관리자 웹 |
| ESN_WEB_LGInnotek | LG Innotek ESL 웹 (Thymeleaf) | → 멀티테넌트 LGINNOTEK |
| ESN_DAEMON_EMART | 이마트 ESL 데몬 | → EMART 테넌트 |
| ESN_DAEMON_LGIT | LG IT ESL 데몬 | → LGIT 테넌트 |
| esn | ESN 코어 (Maven) | → 도메인 모델 |
| ESL_AUTO_UPDATE | 펌웨어 자동 업데이트 | → firmware 도메인 |
| restapi_lgit | LGIT REST API | → API 통합 |
| UCS_LGU | UCS 시스템 | → HCore 통합 |
## 아키텍처
```
레거시 ESL 8개 프로젝트 (Spring Boot 1.5 + Java 8 + Thymeleaf)
↓ 현대화
guardia-esn (Spring Boot 3.5 + Java 17 + React 19 + PostgreSQL)
backend:8016 ←→ frontend static bundle (단일 JAR)
ITSM:9001 · Ollama:11434
```
## 도메인 개념
| 도메인 | 테이블 | 설명 |
|--------|--------|------|
| Tenant | esn_tenants | 멀티테넌트 — LGINNOTEK·LGIT·EMART·ZIOINFO |
| StoreGroup | esn_store_groups | 매장 그룹 |
| Store | esn_stores | 매장 (tenantCode 격리) |
| Template | esn_templates | ESL 표시 템플릿 |
| PosCvt | esn_pos_cvt | POS→ESL 가격 변환 데이터 |
| Alarm / AlarmHistory | esn_alarms | 장치 알람·이력 |
| HCore | esn_hcores | 게이트웨이/허브 장치 |
| WorkHistory | esn_work_history | 작업 이력 |
| Firmware | esn_firmware | 장치 펌웨어 |
| User | esn_users | 사용자 (멀티테넌트 RBAC) |
| Product | esn_products | 상품 가격 |
| TagBinding | esn_tag_bindings | ESL 태그↔상품 바인딩 |
| UpdateQueue | esn_update_queue | 업데이트 큐 |
## 에이전트 팀
| 에이전트 | 역할 |
|----------|------|
| `esn-backend-dev` | Spring Boot 3.5 백엔드 — 도메인·매퍼·서비스·컨트롤러 |
| `esn-frontend-dev` | React 19 + Vite + TypeScript — 관리자 웹 |
| `esn-devops-dev` | Gitea·deploy·Jenkinsfile·setup·홈페이지 |
| `esn-qa` | API 통합 테스트 + 크로스 경계면 검증 |
## 구현 원칙 (GUARDiA 불변 규칙)
1. `@MapperScan(annotationClass = Mapper.class)` — basePackages 아님
2. Hikari `maximum-pool-size=3` — 공유 PG 서버
3. repos에 `fresh git init` — 모노레포 .git 상속 금지
4. 단일 JAR: 프론트 빌드 → `backend/src/main/resources/static/` → mvn package
5. Ollama 폴백: 연결 실패 시 기본 응답 반환 (예외 던지지 않음)
6. admin 시드: bcrypt `$2a$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LnCWh7Vz.Xm` (admin/admin123)
7. API 응답에 `password_hash`, 자격증명 필드 절대 미포함
8. AES-256-GCM 자격증명 암호화 저장
9. SecurityConfig에 static 리소스 `permitAll` 필수 (SPA 403 방지)
## 파일 구조
```
workspace/guardia-esn/
├── .claude/
│ ├── agents/
│ │ ├── esn-backend-dev.md
│ │ ├── esn-frontend-dev.md
│ │ ├── esn-devops-dev.md
│ │ └── esn-qa.md
│ └── skills/guardia-esn-orchestrator/SKILL.md
├── CLAUDE.md
├── Jenkinsfile
├── backend/
│ ├── pom.xml
│ └── src/main/
│ ├── java/com/zioinfo/esn/
│ │ ├── EsnApplication.java (@MapperScan(annotationClass=Mapper.class))
│ │ ├── auth/
│ │ ├── common/
│ │ ├── config/ (SecurityConfig, WebConfig, CryptoUtil, OllamaClient)
│ │ ├── domain/ (VO 클래스)
│ │ ├── mapper/ (@Mapper 인터페이스)
│ │ ├── service/
│ │ └── controller/
│ └── resources/
│ ├── application.yml
│ ├── mapper/*.xml
│ ├── db/schema.sql
│ └── static/ (Vite 빌드 산출물)
└── frontend/
├── package.json
├── vite.config.ts
└── src/
├── App.tsx
├── api/client.ts
├── components/
└── pages/ (15개 관리자 화면)
```
## 변경 이력
| 날짜 | 내용 | 사유 |
|------|------|------|
| 2026-06-16 | 초기 하네스 구성 + 통합 소스 생성 | 레거시 ESN 8개 프로젝트 → 단일 현대화 플랫폼 |