# GUARDiA ESN — ESL 통합 관리 플랫폼 > 레거시 ESL(전자 가격표) 8개 Spring Boot 1.5 프로젝트를 단일 현대화 플랫폼으로 통합한 프로젝트 --- ## 프로젝트 개요 `C:\GUARDiA\workspace\esn\` 의 레거시 ESN 시스템(ESN_WEB_ZIOINFO·ESN_WEB_LGInnotek·ESN_DAEMON_EMART·ESN_DAEMON_LGIT·esn·ESL_AUTO_UPDATE·restapi_lgit·UCS_LGU)을 **Spring Boot 3.5 + Java 17 + React 19 + PostgreSQL** 단일 플랫폼으로 재구현. 멀티테넌트 (TENANT_A / TENANT_B / EMART / ZIOINFO), Ollama 온프레미스 AI 알람 분석·POS 자동 분류. --- ## 기술 스택 | 레이어 | 기술 | |--------|------| | Backend | Spring Boot 3.5 · Java 17 · MyBatis 3.0.3 | | Database | PostgreSQL (`guardia_esn_db` / `guardia_esn_user`) | | Frontend | React 19 · Vite · TypeScript · Tailwind CSS | | AI | Ollama 온프레미스 (llama3, llava) | | 인증 | Spring Security · JWT (jjwt 0.12.6) | | 배포 | 단일 JAR (Vite 번들 → static/) | --- ## 실행 명령어 ```bash # 프론트엔드 빌드 (필수 — 백엔드 static/ 번들) cd frontend && npm install && npm run build # 백엔드 빌드 + 실행 cd backend && mvn clean package -DskipTests java -jar target/zioinfo-esn-1.0.0.jar \ --spring.datasource.url=jdbc:postgresql://localhost:5432/guardia_esn_db \ --spring.datasource.username=guardia_esn_user \ --spring.datasource.password=guardia_esn_pass2026 \ --server.port=8016 ``` --- ## 환경변수 | 변수 | 기본값 | 설명 | |------|--------|------| | DB_URL | jdbc:postgresql://localhost:5432/esn_db | 운영에서는 guardia_esn_db | | DB_USER | esn_user | 운영에서는 guardia_esn_user | | DB_PASS | esn_pass2026 | 운영에서는 guardia_esn_pass2026 | | OLLAMA_URL | http://localhost:11434 | Ollama 서버 | | JWT_SECRET | ZioInfoEsnJwtSecret... | JWT 서명 키 | --- ## 디렉터리 구조 ``` workspace/guardia-esn/ ├── .claude/ │ ├── agents/ (에이전트 4종) │ └── skills/guardia-esn-orchestrator/SKILL.md ├── CLAUDE.md ← 이 파일 ├── Jenkinsfile ├── backend/ │ ├── pom.xml │ └── src/main/ │ ├── java/com/zioinfo/esn/ (67개 Java 파일) │ └── resources/ │ ├── application.yml │ ├── db/schema.sql (13개 테이블) │ └── mapper/*.xml (15개 MyBatis XML) └── frontend/ └── src/ ├── App.tsx ├── api/client.ts ├── components/ (Layout, Sidebar, Header...) └── pages/ (15개 관리자 화면) ``` --- ## 도메인 (13개) | 도메인 | 테이블 | 설명 | |--------|--------|------| | 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 | 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 | 업데이트 큐 | --- ## 보안 제약 (불변) 1. `@MapperScan(annotationClass = Mapper.class)` — basePackages 절대 금지 2. Hikari `maximum-pool-size=3` — 공유 PG 서버 보호 3. 외부 AI API 절대 금지 — Ollama localhost:11434만 허용 4. API 응답에서 `passwordHash`, `ssh_*` 필드 완전 제외 5. SecurityConfig에 static 리소스 `permitAll` 필수 (SPA 403 방지) --- ## 하네스 트리거 `guardia-esn-orchestrator` 스킬을 사용하라: - ESN 기능 추가·수정 - 배포 작업 - 레거시 소스 분석·통합 - 알람·POS·HCore 관련 작업 ## AI 에이전트 (최신 기법 — 중앙 guardia-rag 연계) `.claude/agents/` 의 도메인 맞춤 AI 에이전트 4종(외부 API 금지·Ollama 전용·테넌트 격리·소형모델 기본·degraded 폴백, 중앙 계약 `/answer`·`/verify`·`/agent`·`/structured`·`/feedback`): - `esn-ai-alarm-agent` — ESL/HCore 알람 원인분석·우선순위(tool-use + GraphRAG 의존성 추적) - `esn-ai-poscvt-agent` — POS 데이터 자동 분류·매핑 보조(`/structured` format:json 결정론) - `esn-ai-applier` — 최신 기법(hybrid/graph/rerank·tool-use·structured·스트리밍) ESN 적용·배선·기법 토글 - `esn-ai-qa` — 근거·결정론·테넌트 격리·외부 API 0 경계면 검증(general-purpose)