122 lines
3.9 KiB
Markdown
122 lines
3.9 KiB
Markdown
# 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 관련 작업
|