zioinfo-esn/doc/_content/design_spec.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 폴백)"]
]}
]
}