3.9 KiB
3.9 KiB
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/) |
실행 명령어
# 프론트엔드 빌드 (필수 — 백엔드 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 | 업데이트 큐 |
보안 제약 (불변)
@MapperScan(annotationClass = Mapper.class)— basePackages 절대 금지- Hikari
maximum-pool-size=3— 공유 PG 서버 보호 - 외부 AI API 절대 금지 — Ollama localhost:11434만 허용
- API 응답에서
passwordHash,ssh_*필드 완전 제외 - SecurityConfig에 static 리소스
permitAll필수 (SPA 403 방지)
하네스 트리거
guardia-esn-orchestrator 스킬을 사용하라:
- ESN 기능 추가·수정
- 배포 작업
- 레거시 소스 분석·통합
- 알람·POS·HCore 관련 작업