zioinfo-esn/CLAUDE.md
DESKTOP-TKLFCPR\ython 707416f78c feat(uiws): UIWS 업무모듈(업무일지·일정·쪽지·통계)+2FA 이식
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:10:47 +09:00

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 관련 작업