85 lines
5.2 KiB
JSON
85 lines
5.2 KiB
JSON
{
|
|
"solution": "GUARDiA ESN",
|
|
"doc_type": "설계서",
|
|
"out": "C:/GUARDiA/workspace/guardia-esn/doc/guardia-esn_설계서_v1.pptx",
|
|
"subtitle": "지오정보기술 / 2026",
|
|
"design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"},
|
|
"sections": [
|
|
{"title":"1. 시스템 구성도", "bullets":[
|
|
"프레젠테이션: React 19 + Vite + TS — backend static 번들(단일 JAR)",
|
|
"애플리케이션: Spring Boot 3.5 / Java 17 / MyBatis — 포트 8016",
|
|
"데이터: PostgreSQL esn_db / esn_user",
|
|
"AI: Ollama 온프레미스(알람 분석·POS 분류, 폴백) — 외부 API 0",
|
|
"외부 연계: 통합 메신저 앱 QR(중앙 ITSM APK 저장소 공개 엔드포인트, 읽기전용)"
|
|
], "note":"단일 JAR · 8016 · esn_db"},
|
|
{"type":"table","title":"2. 멀티테넌트 도메인", "headers":["테넌트","비고"], "rows":[
|
|
["LGINNOTEK","ESL 운영 테넌트"],
|
|
["LGIT","ESL 운영 테넌트"],
|
|
["EMART","ESL 운영 테넌트"],
|
|
["ZIOINFO","ESL 운영 테넌트"]
|
|
]},
|
|
{"type":"table","title":"3. 도메인 / 엔티티 (본연 13 VO)", "headers":["엔티티","의미"], "rows":[
|
|
["Tenant / StoreGroup / Store","테넌트·매장그룹·매장"],
|
|
["Template","ESL 화면 템플릿"],
|
|
["TagBinding","ESL 기기 바인딩"],
|
|
["Product","상품 / 가격"],
|
|
["Alarm","알람 + 알람이력"],
|
|
["HCore","게이트웨이 / 허브 관제"],
|
|
["PosCvt","POS 데이터 변환 / 분류"],
|
|
["Firmware / UpdateQueue","펌웨어 + 업데이트 큐"],
|
|
["WorkHistory","작업 이력"],
|
|
["Dashboard","통합 대시보드 집계"]
|
|
]},
|
|
{"type":"table","title":"3-1. UIMS 이식 엔티티 (tb_uiws_*)", "headers":["영역","비고"], "rows":[
|
|
["worklog / schedule / message / stats","공통 업무협업 테이블"],
|
|
["tb_uiws_sys_user","시스템관리 사용자 (VARCHAR user_id)"],
|
|
["역할 / 메뉴 / 코드 / 부서 / 거래처","RBAC 시스템관리 테이블"],
|
|
["격리 원칙","tb_uiws_sys_user ≠ esn_user(BIGSERIAL) — 병합 금지"]
|
|
]},
|
|
{"type":"table","title":"4. API 설계 — 본연 컨트롤러 15종", "headers":["컨트롤러","역할"], "rows":[
|
|
["Tenant / StoreGroup / Store","테넌트·매장 관리"],
|
|
["Template / TagBinding","템플릿·기기 바인딩"],
|
|
["Product","상품/가격"],
|
|
["Alarm / HCore","알람·게이트웨이 관제"],
|
|
["PosCvt","POS 변환/분류"],
|
|
["Firmware / UpdateQueue","펌웨어·업데이트 큐"],
|
|
["Work / User","작업이력·사용자"],
|
|
["Dashboard / Ai","대시보드·AI 분석"]
|
|
]},
|
|
{"type":"table","title":"4-1. API 설계 — UIMS 이식 (uiws.system 10 + auth 3)", "headers":["base","항목"], "rows":[
|
|
["/api/system/codes","공통코드 (그룹 values[] 치환 PUT)"],
|
|
["/api/system/companies","거래처 (DELETE 바디 {ids[]})"],
|
|
["/api/system/depts","부서 (+/tree, 단건 DELETE)"],
|
|
["/api/system/menus","메뉴 (2-depth, 다중 DELETE)"],
|
|
["/api/system/roles","역할 (다중 DELETE)"],
|
|
["/api/system/roles/{roleId}/menus","역할-메뉴 권한 매핑 (읽기/쓰기)"],
|
|
["/api/system/{programs,users,DeptRole}","프로그램·사용자·부서역할"],
|
|
["/api/auth/signup | find-id | reset-password","로그인 보조 3종 (permitAll)"]
|
|
]},
|
|
{"type":"table","title":"5. 화면 설계 — 메뉴 목록", "headers":["구분","화면"], "rows":[
|
|
["본연","Dashboard · TenantAdmin · StoreList · TemplateList · TagBindingList"],
|
|
["본연","ProductList · AlarmList · HCoreStatus · PosCvtList"],
|
|
["본연","FirmwareList · UpdateQueueList · WorkHistory · UserList"],
|
|
["본연","AiAnalysis · AuditLog · SystemSettings · MobileApp · Login · AiTechniqueSettings"],
|
|
["UIMS 업무","WorklogList · ScheduleCalendar · MessageBox · StatsPivot"],
|
|
["UIMS 시스템관리","RoleManagement · RoleMenuPermission · CodeManagement"],
|
|
["UIMS 시스템관리","MenuManagement · DeptManagement · CompanyManagement"]
|
|
]},
|
|
{"title":"6. DB 스키마 설계", "bullets":[
|
|
"DB: esn_db / 계정 esn_user (PostgreSQL)",
|
|
"본연 도메인 스키마 + UIMS 이식 스키마 멱등 적용 (sql.init.mode=always)",
|
|
"db/90_uiws_system.sql — tb_uiws_* (self-contained, 멱등)",
|
|
"db/93_esn_login_helper.sql — esn_user에 name·approval_status 멱등 ALTER",
|
|
"스키마 격리: tb_uiws_sys_user(VARCHAR) ≠ esn_user(BIGSERIAL) — 절대 병합 안 함"
|
|
], "note":"전 스키마 멱등 — 부팅 시 안전 재적용"},
|
|
{"title":"7. 보안 설계", "bullets":[
|
|
"인증: JWT + 2FA (verify-token purpose=2fa 우회차단 + 로그인 실패 잠금)",
|
|
"RBAC: /api/system/** hasAnyRole(ADMIN,MANAGER) + 사이드바 esn_role==='ADMIN' 가드 (이중 방어)",
|
|
"공개: /api/public/** · /api/auth/** permitAll",
|
|
"열거방지: find-id 미존재 found:false, reset-password 항상 success=true",
|
|
"임시비번 메일/로그 전용 — API 응답·예외 미노출",
|
|
"온프레미스: 외부 API 0 (Ollama·SMTP만), 자격증명·스택트레이스 미노출"
|
|
], "note":"이중 방어 · 열거방지 · 온프레미스"}
|
|
]
|
|
}
|