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 불변 규칙)
@MapperScan(annotationClass = Mapper.class) — basePackages 아님
- Hikari
maximum-pool-size=3 — 공유 PG 서버
- repos에
fresh git init — 모노레포 .git 상속 금지
- 단일 JAR: 프론트 빌드 →
backend/src/main/resources/static/ → mvn package
- Ollama 폴백: 연결 실패 시 기본 응답 반환 (예외 던지지 않음)
- admin 시드: bcrypt
$2a$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LnCWh7Vz.Xm (admin/admin123)
- API 응답에
password_hash, 자격증명 필드 절대 미포함
- AES-256-GCM 자격증명 암호화 저장
- 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개 프로젝트 → 단일 현대화 플랫폼 |