78 lines
5.1 KiB
JSON
78 lines
5.1 KiB
JSON
{
|
|
"solution": "zioinfo-esn",
|
|
"doc_type": "설계서",
|
|
"out": "C:/GUARDiA/workspace/zioinfo-esn/doc/zioinfo-esn_설계서_v2.pptx",
|
|
"subtitle": "ESL 통합관리 + UIMS 업무협업 / 지오정보기술 / 2026",
|
|
"design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"},
|
|
"sections": [
|
|
{"title":"1. 시스템 구성도", "bullets":[
|
|
"[Client] React 19 SPA → [App] Spring Boot 3.5 단일 JAR (8015) → [DB] PostgreSQL esn_db",
|
|
"[App] ─ Ollama(11434, llama3.2:1b) : 알람분석·POS 분류 (폴백 내장)",
|
|
"[App] ─ ITSM(9001) 연계 (선택)",
|
|
"정적 리소스: backend classpath:/static/ 에 프론트 빌드 번들",
|
|
"스키마 멱등 부팅: schema.sql → 90_uiws_system.sql → 91_uiws_port.sql"
|
|
], "note":"단일 JAR · 에이전트리스 · 온프레미스 AI"},
|
|
{"type":"table", "title":"2. 도메인 요약 — ESL 코어", "headers":["도메인","역할"], "rows":[
|
|
["Tenant","멀티테넌트(LGInnotek/LGIT/Emart/ZIOINFO)"],
|
|
["StoreGroup / Store","매장그룹 · 매장"],
|
|
["Product","상품 / 가격"],
|
|
["Template","ESL 화면 템플릿"],
|
|
["TagBinding","ESL 기기 ↔ 상품 바인딩"],
|
|
["UpdateQueue","가격/화면 갱신 큐"],
|
|
["PosCvt","POS 데이터 변환·분류"],
|
|
["Alarm","알람 / 이력"],
|
|
["HCore","게이트웨이·허브 상태 관제"],
|
|
["Firmware","펌웨어 버전 관리"],
|
|
["WorkHistory","작업 이력"]
|
|
]},
|
|
{"type":"table", "title":"3. 도메인 요약 — UIMS (신규)", "headers":["도메인","역할","테이블(tb_uiws_*)"], "rows":[
|
|
["Worklog","업무일지·진행상태·코멘트","worklog / worklog_dtl / worklog_cmt"],
|
|
["Schedule","일정·캘린더·첨부","schedule / diary / attach"],
|
|
["Message","쪽지 송수신·미읽음","message / message_rcv"],
|
|
["Stats","개인·회사별 업무 집계 피벗","(worklog 집계)"],
|
|
["System(RBAC)","역할·메뉴·코드·부서·거래처","role / menu / role_menu / code* / dept / company / sys_user"],
|
|
["Auth 2FA","로그인 인증코드 검증","login_verify"]
|
|
]},
|
|
{"type":"table", "title":"4. API 설계 — 주요 엔드포인트", "headers":["영역","Base Path"], "rows":[
|
|
["ESL 코어","/api/stores · /api/store-groups · /api/tenants"],
|
|
["ESL 코어","/api/products · /api/templates · /api/tag-binding"],
|
|
["ESL 코어","/api/update-queue · /api/pos-cvt · /api/works"],
|
|
["ESL 코어","/api/alarms · /api/hcore · /api/firmware · /api/dashboard"],
|
|
["AI","/api/ai"],
|
|
["UIMS 업무","/api/worklogs · /api/schedules · /api/messages · /api/stats · /api/attachments · /api/diaries"],
|
|
["UIMS 시스템","/api/system/{roles,menus,programs,codes,depts,companies,users}"],
|
|
["인증","/api/auth (login·verify·signup·find-id·reset-password) · /api/public (depts·companies)"]
|
|
]},
|
|
{"type":"table", "title":"5. 화면 설계 — 메뉴 목록", "headers":["메뉴 그룹","화면"], "rows":[
|
|
["대시보드","Dashboard"],
|
|
["ESL 운영","StoreList · TemplateList · ProductList · TagBindingList"],
|
|
["ESL 운영","UpdateQueueList · PosCvtList · WorkHistory"],
|
|
["관제","AlarmList · HCoreStatus · FirmwareList"],
|
|
["관리","TenantAdmin · UserList · AiAnalysis"],
|
|
["UIMS","WorklogList · ScheduleCalendar · MessageBox · StatsPivot"],
|
|
["시스템관리","RoleManagement · RoleMenuManagement · MenuManagement"],
|
|
["시스템관리","CodeManagement · DeptManagement · CompanyManagement"],
|
|
["인증","Login(2FA) · Signup · FindId · ResetPw · MobileApp(QR)"]
|
|
]},
|
|
{"type":"table", "title":"6. DB 스키마 — 멱등 적용", "headers":["파일","내용"], "rows":[
|
|
["schema.sql","ESL 코어 테이블(esn_*)"],
|
|
["90_uiws_system.sql","권한관리 10테이블 + 시드(ADMIN/MANAGER/USER·ZIOINFO·ROOT)"],
|
|
["91_uiws_port.sql","업무 9테이블 + esn_user 2FA 컬럼 ALTER"],
|
|
["멱등 규칙","CREATE TABLE IF NOT EXISTS / ADD COLUMN IF NOT EXISTS / ON CONFLICT DO NOTHING"]
|
|
]},
|
|
{"title":"7. 보안 설계", "bullets":[
|
|
"인증: JWT(만료 24h) + 2FA(이메일 인증코드 5분, verify-token 5분, 실패 5회 잠금)",
|
|
"2FA 우회 차단: verify-token purpose=2fa 클레임 → JwtFilter가 verify-token은 인증 컨텍스트 미설정(보호 API 접근 불가)",
|
|
"회원가입 승인대기(approved=false) → ADMIN 승인 전 로그인 차단",
|
|
"RBAC: /api/system/** 변경(POST/PUT/DELETE)은 ADMIN/MANAGER 한정 (UI 차단 + 백엔드 403 이중 방어)",
|
|
"자격증명·비밀번호·내부IP 응답/로그 미노출 · 스택트레이스 차단 · 외부 API 0",
|
|
"비밀번호 BCrypt 저장 · 아이디찾기 username 마스킹 반환"
|
|
]},
|
|
{"type":"table", "title":"8. 연계 설계", "headers":["연계 대상","용도"], "rows":[
|
|
["Ollama (11434)","알람 원인 분석 · POS 데이터 자동 분류 (폴백)"],
|
|
["ITSM (9001)","운영 연계 (선택)"],
|
|
["메일/로그","2FA 인증코드 발송 (미설정 시 LogMailSender 폴백)"]
|
|
]}
|
|
]
|
|
}
|