diff --git a/doc/_content/mes_admin_guide.json b/doc/_content/mes_admin_guide.json new file mode 100644 index 0000000..3336824 --- /dev/null +++ b/doc/_content/mes_admin_guide.json @@ -0,0 +1,61 @@ +{ + "solution": "GUARDiA MES", + "doc_type": "운영자지침서", + "out": "C:/GUARDiA/workspace/guardia-mes/doc/mes_운영자지침서_v1.pptx", + "subtitle": "AI 기반 제조실행시스템 (MES/WMS/QMS) · 지오정보기술 / 2026", + "design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"}, + "sections": [ + {"type":"table", "title":"1. 설치 / 배포 개요", "headers":["항목","값"], "rows":[ + ["서비스 포트","8013 (단일 JAR)"], + ["데이터베이스","PostgreSQL — mes_db (전용 계정)"], + ["AI 엔진","Ollama 온프레미스 (11434, 폴백 내장)"], + ["배포 방식","Gitea webhook → 자동배포(deploy_server) → systemd 서비스"], + ["구성","React 빌드 산출물을 backend static에 번들(단일 서비스)"] + ]}, + {"title":"2. 환경 설정", "bullets":[ + "application.yml: DB 연결(mes_db), 서버 포트(8013), Ollama 엔드포인트 설정", + "schema-locations: db 스키마 + db/92_uiws_system.sql 병기(mode=always·continue-on-error)", + "스키마는 멱등 설계(CREATE IF NOT EXISTS / ON CONFLICT DO NOTHING)로 재적용 안전", + "AI 모델: 서버 RAM 제약 고려해 소형 모델 우선, 실패 시 규칙 기반 폴백 동작", + "민감 설정(자격증명·비밀번호)은 응답/로그에 노출 금지 — 환경값으로만 주입" + ]}, + {"type":"table", "title":"3. 권한관리(RBAC) 운영", "headers":["대상","운영"], "rows":[ + ["접근 권한","/api/system/** 는 SUPERADMIN만 접근(403 가드)"], + ["회원 승인","회원가입 승인 대기 → 운영자가 승인(approved) 처리해야 로그인 허용"], + ["역할/메뉴","역할 생성 후 역할-메뉴 권한(읽기/쓰기) 매핑"], + ["기준정보","부서·거래처·공통코드·메뉴 관리 화면에서 유지보수"] + ]}, + {"title":"4. 백업 / 복구", "bullets":[ + "DB 백업: mes_db 정기 덤프(pg_dump) 및 보관 정책 수립", + "복구 절차: DB 복원 → 서비스 재기동 → 헬스체크 확인", + "스키마 멱등 구조로 재배포 시 데이터 손실 없이 누락 테이블 보강", + "배포 산출물(JAR)·설정 파일은 형상관리(Gitea)로 버전 보존" + ]}, + {"type":"table", "title":"5. 모니터링 / 헬스체크", "headers":["점검 항목","방법"], "rows":[ + ["서비스 기동","systemd active 상태 및 포트 8013 응답 확인"], + ["DB 연결","mes_db 연결/쿼리 정상 여부"], + ["AI 동작","Ollama 응답 또는 폴백 정상 동작 확인"], + ["로그","에러 로그 점검(스택트레이스는 사용자 응답에 미노출)"] + ]}, + {"type":"table", "title":"6. 장애 대응", "headers":["증상","조치"], "rows":[ + ["서비스 미기동","로그 확인 → 설정/DB 점검 → 재기동"], + ["relation does not exist","스키마 멱등 재적용(mode=always) 후 재기동"], + ["AI 응답 지연/실패","폴백 동작 확인, 모델/메모리 점검(소형 모델 전환 검토)"], + ["로그인 불가 다수","2FA/메일 발송·승인 게이트 설정 점검"] + ]}, + {"title":"7. 보안 운영", "bullets":[ + "JWT + 2FA 인증 유지, verify-token 우회 차단 가드 보존", + "RBAC 가드(SUPERADMIN) 및 회원가입 승인 게이트 상시 점검", + "임시 비밀번호·자격증명·내부 IP·SSH 정보는 응답/로그에 미노출", + "외부 API 호출 0 — AI는 온프레미스 Ollama만 사용", + "감사 관점: 권한 변경·계정 승인 이력 관리" + ]}, + {"title":"8. 본 차수 운영 반영 사항 (UIMS 이식)", "bullets":[ + "신규 스키마 db/92_uiws_system.sql 적용 필요(권한관리 10테이블, 멱등)", + "/api/mes/auth/* (로그인 보조 3종) 및 /api/system/* (권한관리) 엔드포인트 추가", + "프론트 시스템관리 화면 6종은 SUPERADMIN 전용으로 노출", + "기존 MES 도메인(작업지시·생산실적·SPC·OEE·LOT추적) 회귀 없음(추가만)", + "@MapperScan으로 신규 system 매퍼 9종 자동 등록 — 별도 설정 불필요" + ]} + ] +} diff --git a/doc/_content/mes_design_spec.json b/doc/_content/mes_design_spec.json new file mode 100644 index 0000000..40107f4 --- /dev/null +++ b/doc/_content/mes_design_spec.json @@ -0,0 +1,73 @@ +{ + "solution": "GUARDiA MES", + "doc_type": "설계서", + "out": "C:/GUARDiA/workspace/guardia-mes/doc/mes_설계서_v1.pptx", + "subtitle": "AI 기반 제조실행시스템 (MES/WMS/QMS) · 지오정보기술 / 2026", + "design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"}, + "sections": [ + {"title":"1. 시스템 구성도", "bullets":[ + "단일 JAR 서비스(포트 8013): Spring Boot 3.5 백엔드 + React 19 정적 번들", + "DB: PostgreSQL mes_db (제조 도메인 + tb_uiws_* 권한관리 테이블)", + "AI: Ollama 온프레미스(11434) — 불량분석·예측·예지보전·SPC 이상감지 (폴백 내장)", + "외부 연계: ERP·ITSM·OCR·BI (REST)", + "클라이언트: 관리자 웹 + 현장 작업자 모바일앱(통합 메신저 앱 app/mes)" + ], "note":"구성도 도식 자리 — 클라이언트/서비스/DB/AI/연계 5블록"}, + {"type":"table", "title":"2. 도메인 / ERD 요약 (MES 본연)", "headers":["영역","핵심 엔터티"], "rows":[ + ["MES","작업지시·생산실적·공정/라우팅·BOM·설비/OEE·LOT추적·생산계획"], + ["WMS","입고·출고·재고·로케이션·재고실사·LOT/시리얼"], + ["QMS","검사(수입/공정/출하)·검사기준·NCR·CAPA·SPC관리도·성적서"], + ["기준정보","품목·거래처·회원·BOM 구성"] + ]}, + {"type":"table", "title":"3. 도메인 / ERD 요약 (UIMS 이식)", "headers":["영역","테이블/엔터티"], "rows":[ + ["업무협업","업무일지·일정·쪽지·통계 (uiws.* 도메인)"], + ["권한관리(RBAC)","tb_uiws_sys_user(VARCHAR user_id)·role·dept_role·program·menu·role_menu"], + ["기준(시스템)","tb_uiws_dept·company·code_grp·code"], + ["주의","tb_uiws_sys_user 와 mes_user(BIGSERIAL)는 별개·미병합"] + ]}, + {"type":"table", "title":"4. API 설계 — 주요 엔드포인트", "headers":["영역","베이스 / 메서드"], "rows":[ + ["MES/WMS/QMS","도메인별 REST CRUD (작업지시·생산실적·검사·재고 등)"], + ["로그인 보조","POST /api/mes/auth/signup · /find-id · /reset-password (permitAll)"], + ["권한관리","/api/system/{users,roles,roles/{id}/menus,menus,depts,companies,codes}"], + ["공통조회","GET /api/public/** (permitAll, 드롭다운 룩업)"], + ["응답봉투","ApiResponse{success,message,data} · 목록 PageResponse{content,total,page,size}"] + ]}, + {"type":"table", "title":"5. 화면 설계 — 관리자 웹 메뉴", "headers":["섹션","화면"], "rows":[ + ["MES","작업지시·생산실적·공정진행·BOM/라우팅·설비OEE·LOT추적·생산계획"], + ["WMS","입출고·재고·로케이션·피킹·재고실사"], + ["QMS","수입/공정/출하검사·부적합NCR·CAPA·SPC관리도·성적서"], + ["기준/공통","품목·거래처·사용자·설정·분석·AI도구"], + ["업무(UIMS)","업무일지·일정·쪽지·통계"], + ["시스템관리(권한)","권한관리·역할-메뉴권한·공통코드·메뉴관리·부서관리·거래처관리 (SUPERADMIN)"] + ]}, + {"type":"table", "title":"6. 화면 설계 — UIMS 시스템관리 라우트", "headers":["라우트","화면 / 권한"], "rows":[ + ["/uiws/system/roles","권한 관리(역할 CRUD·다중삭제) · SUPERADMIN"], + ["/uiws/system/role-menus","역할-메뉴 권한(읽기/쓰기 매핑) · SUPERADMIN"], + ["/uiws/system/codes","공통코드(그룹+값 일괄 CRUD) · SUPERADMIN"], + ["/uiws/system/menus","메뉴 관리(2-depth 트리) · SUPERADMIN"], + ["/uiws/system/depts","부서 관리(2-depth 트리) · SUPERADMIN"], + ["/uiws/system/companies","거래처 관리(CRUD·다중삭제) · SUPERADMIN"] + ]}, + {"title":"7. DB 스키마 설계", "bullets":[ + "DB: mes_db — 제조 도메인 테이블 + db/92_uiws_system.sql(권한관리 10테이블)", + "권한관리: dept·company·code_grp·code·sys_user·role·dept_role·program·menu·role_menu", + "멱등 적용: CREATE IF NOT EXISTS / ON CONFLICT DO NOTHING + 최소 시드(ROLE/COMPANY/DEPT)", + "application.yml schema-locations에 92_uiws_system.sql 병기 (mode=always·continue-on-error)", + "MesUser에 approved 필드 추가(기존 계정 기본 true → 로그인 회귀 0)" + ]}, + {"title":"8. 보안 설계", "bullets":[ + "인증: JWT + 2차 인증(2FA, 이메일 인증코드 verify-token)", + "RBAC: /api/system/** → hasRole(SUPERADMIN), /api/public/** permitAll, /api/mes/auth/** permitAll", + "회원가입 승인 게이트: approved=false 차단, role=VIEWER 기본", + "계정 열거 방지: reset-password 미존재도 success=true, 임시비번 응답/로그 미노출(메일만)", + "아이디찾기 마스킹(앞 2자), 임시비번 BCrypt 저장", + "보안 불변: 자격증명·비밀번호·SSH·내부IP·스택트레이스 미노출 (외부 API 0)" + ]}, + {"type":"table", "title":"9. 연계 설계", "headers":["연계 대상","내용"], "rows":[ + ["ERP","재고/정산 연계"], + ["ITSM","CS / 운영 연계"], + ["OCR","문서/상품 등록 연계"], + ["BI","제조 데이터 분석 피드"], + ["통합 메신저앱","모바일 QR 배포 (중앙 APK 저장소 재사용)"] + ]} + ] +} diff --git a/doc/_content/mes_dev_plan.json b/doc/_content/mes_dev_plan.json new file mode 100644 index 0000000..4fac9fe --- /dev/null +++ b/doc/_content/mes_dev_plan.json @@ -0,0 +1,73 @@ +{ + "solution": "GUARDiA MES", + "doc_type": "개발계획서", + "out": "C:/GUARDiA/workspace/guardia-mes/doc/mes_개발계획서_v1.pptx", + "subtitle": "AI 기반 제조실행시스템 (MES/WMS/QMS) · 지오정보기술 / 2026", + "design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"}, + "sections": [ + {"title":"1. 개요 / 배경", "bullets":[ + "GUARDiA MES — AI 기반 제조실행시스템. MES·WMS·QMS 3개 영역 단일 플랫폼 통합", + "작업지시→생산실적→품질검사→재고/입출고를 단일 흐름으로 연결, 현장 가시성 확보", + "온프레미스 AI(Ollama)로 불량원인분석·수요/생산예측·설비예지보전·SPC 이상감지 내장", + "GUARDiA ERP·ITSM·OCR·BI 연계 + 관리자 웹 + 현장 작업자 모바일앱 제공", + "본 차수: MES 본연 기능에 더해 UIMS 공통 업무협업 레이어(업무일지·일정·쪽지·통계·권한관리)와 로그인 보조·2FA를 이식" + ]}, + {"title":"2. 목표", "bullets":[ + "제조 현장 실시간 가시화: OEE·SPC(Cp/Cpk)·LOT 추적으로 품질·생산성 관리", + "AI 자동화: 불량원인분석·생산/수요예측·예지보전으로 의사결정 보조", + "공통 업무협업 표준화: UIMS 이식으로 업무일지·일정·쪽지·통계·시스템관리(RBAC) 추가", + "보안 강화: JWT + 2차 인증(2FA), 회원가입 승인 게이트, 권한관리 SUPERADMIN 가드", + "단일 JAR 배포(frontend→backend static 번들)로 운영 단순화" + ]}, + {"type":"table", "title":"3. 범위 — 모듈 목록 (MES 본연)", "headers":["영역","모듈"], "rows":[ + ["MES","작업지시(workorder)·생산실적(production)·공정/라우팅(process/routing)·BOM·설비OEE(equipment/oee)·LOT추적(tracking)·생산계획(plan)·진행관리(progress)"], + ["WMS","입고(receiving)·출고(shipping)·재고(inventory)·로케이션/창고(warehouse)·재고실사(stocktake)·LOT/시리얼(lotserial)·바코드(barcode)"], + ["QMS","수입/공정/출하검사(inspection)·검사기준(spec)·부적합 NCR·시정조치 CAPA·SPC 관리도·성적서(certificate)"], + ["AI/연계","AI(불량분석·예측·예지보전)·RAG·분석(analytics)·대시보드·통합(integration ERP/ITSM/OCR/BI)"], + ["관리","품목(item)·거래처(partner)·회원(member)·관리자(admin)·설정(config)·공통(common)"] + ]}, + {"type":"table", "title":"4. 범위 — 본 차수 UIMS 이식 추가", "headers":["구분","내용"], "rows":[ + ["공통 업무협업","업무일지·일정·쪽지·통계 (com.zioinfo.mes.uiws.*)"], + ["시스템관리","권한관리 RBAC — 역할/역할-메뉴/공통코드/메뉴/부서/거래처 (tb_uiws_*, /api/system/*) + React 화면 6종"], + ["로그인 보조","회원가입·아이디찾기·비밀번호초기화 (/api/mes/auth/*)"], + ["인증","JWT + 2차 인증(2FA) 레이어, 회원가입 승인 게이트"], + ["모바일","모바일 앱 QR 배포(통합 메신저 앱 재사용)"] + ]}, + {"type":"table", "title":"5. 기술 스택", "headers":["레이어","기술"], "rows":[ + ["Backend","Spring Boot 3.5 / Java 17 / MyBatis"], + ["Frontend","React 19 + Vite + TypeScript + Tailwind + Recharts (backend static 번들)"], + ["Database","PostgreSQL — mes_db (전용 계정)"], + ["AI","Ollama 온프레미스 (외부 API 금지) — 폴백 포함"], + ["인증","JWT + 2FA(이메일 인증코드)"], + ["배포","단일 JAR · 포트 8013 · Gitea webhook → 자동배포"] + ]}, + {"title":"6. 아키텍처", "bullets":[ + "단일 JAR: React 빌드 산출물을 backend static에 번들 → 8013 단일 서비스", + "@MapperScan(annotationClass=Mapper.class, basePackages=com.zioinfo.mes) — 신규 매퍼 자동 등록", + "도메인 분리: MES/WMS/QMS + uiws 서브패키지(worklog·schedule·message·stats·system)", + "AI 호출은 OllamaClient 단일 경로, 실패 시 규칙 기반 폴백", + "연계: ERP(재고/정산)·ITSM(CS)·OCR(상품/문서)·BI(분석) REST 연동" + ], "note":"상세 구성도는 설계서 참조"}, + {"type":"table", "title":"7. 일정 (WBS 요약)", "headers":["단계","산출물/활동"], "rows":[ + ["분석/설계","요구사항·ERD·API 명세·화면 설계 (개발계획서·설계서)"], + ["MES 코어","작업지시·생산실적·공정·BOM·OEE·LOT추적"], + ["WMS/QMS","입출고·재고·실사 / 검사·NCR·CAPA·SPC·성적서"], + ["AI/연계","불량분석·예측·예지보전 + ERP/ITSM/OCR/BI 연계"], + ["UIMS 이식","업무일지·일정·쪽지·통계·권한관리 + 로그인보조·2FA"], + ["검증/배포","빌드·테스트·QA → 8013 배포 → 지침서 작성"] + ]}, + {"type":"table", "title":"8. 역할 분담", "headers":["역할","담당"], "rows":[ + ["백엔드","제조 도메인·AI·연계·관리자 API (mes-backend-dev)"], + ["프론트엔드","관리자 웹·UIMS 화면 (mes-frontend-dev)"], + ["모바일","현장 작업자 앱 (mes-mobile-dev)"], + ["DevOps","Gitea·deploy_server·webhook·배포 (mes-devops-dev)"], + ["QA","경계면·보안·제조 도메인 정합 (mes-qa)"] + ]}, + {"title":"9. 기대효과", "bullets":[ + "현장 실시간 가시성: OEE·SPC·LOT 추적으로 품질·생산성 정량 관리", + "AI 보조로 불량/장애 선제 대응, 수요·생산 예측 기반 계획 수립", + "UIMS 이식으로 제조 현장과 업무협업(일지·일정·쪽지·통계)을 단일 시스템에서 운영", + "RBAC·2FA로 보안 강화 및 권한 통제, 회원가입 승인 게이트로 무단 접근 차단" + ]} + ] +} diff --git a/doc/_content/mes_user_guide.json b/doc/_content/mes_user_guide.json new file mode 100644 index 0000000..8b0f116 --- /dev/null +++ b/doc/_content/mes_user_guide.json @@ -0,0 +1,59 @@ +{ + "solution": "GUARDiA MES", + "doc_type": "사용자지침서", + "out": "C:/GUARDiA/workspace/guardia-mes/doc/mes_사용자지침서_v1.pptx", + "subtitle": "AI 기반 제조실행시스템 (MES/WMS/QMS) · 지오정보기술 / 2026", + "design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"}, + "sections": [ + {"title":"1. 시작하기 — 로그인 / 2차 인증(2FA)", "bullets":[ + "관리자 웹 접속 후 아이디·비밀번호로 로그인", + "2차 인증(2FA) 활성 시 이메일로 받은 인증코드를 입력해 본인 확인", + "로그인 화면 하단의 회원가입 / 아이디찾기 / 비밀번호초기화 링크 제공", + "회원가입은 승인 대기 상태로 접수되며, 관리자 승인 후 로그인 가능" + ]}, + {"type":"table", "title":"2. 로그인 보조 기능 사용법", "headers":["기능","사용법"], "rows":[ + ["회원가입","이름·아이디·이메일·비밀번호 입력 → 승인 대기 접수(기본 VIEWER 권한)"], + ["아이디찾기","이름 + 이메일 입력 → 일치 시 마스킹된 아이디(앞 2자) 안내"], + ["비밀번호초기화","아이디 + 이메일 입력 → 임시 비밀번호를 등록 이메일로 발송"] + ]}, + {"type":"table", "title":"3. 메뉴별 사용법 — MES (제조실행)", "headers":["메뉴","주요 동작"], "rows":[ + ["작업지시","생산 작업지시 등록·조회·진행 상태 관리"], + ["생산실적","생산 수량·불량·가동 실적 입력 및 집계"], + ["공정진행","공정/라우팅별 진행 현황 모니터링"], + ["설비/OEE","설비 가동률·성능·품질 기반 OEE 조회"], + ["LOT추적","LOT/시리얼 기준 생산 이력 추적"] + ]}, + {"type":"table", "title":"4. 메뉴별 사용법 — WMS / QMS", "headers":["메뉴","주요 동작"], "rows":[ + ["입출고(WMS)","입고·출고 등록, 바코드 스캔 처리"], + ["재고/실사","재고 현황 조회 및 재고실사 입력"], + ["검사(QMS)","수입/공정/출하 검사 입력 및 판정"], + ["NCR/CAPA","부적합 등록(NCR)·시정조치(CAPA) 처리"], + ["SPC/성적서","SPC 관리도(Cp/Cpk) 확인, 성적서 출력"] + ]}, + {"type":"table", "title":"5. 메뉴별 사용법 — 업무협업 (UIMS)", "headers":["메뉴","주요 동작"], "rows":[ + ["업무일지","일자별 업무 내용 작성·조회"], + ["일정","개인/공유 일정 등록 및 캘린더 확인"], + ["쪽지","사용자 간 쪽지 송수신"], + ["통계","업무/업무일지 기반 통계 조회"] + ]}, + {"type":"table", "title":"6. 업무 흐름 — 생산 1건 처리 예시", "headers":["단계","행위"], "rows":[ + ["1","로그인(필요 시 2FA 인증)"], + ["2","작업지시 확인 및 착수"], + ["3","생산실적 입력(수량·불량)"], + ["4","검사 입력 및 판정(QMS)"], + ["5","입출고/재고 반영(WMS)"], + ["6","업무일지 작성·일정 공유(UIMS)"] + ]}, + {"title":"7. 모바일 앱 사용", "bullets":[ + "통합 메신저 앱(GUARDiA Messenger)에서 MES 화면(app/mes) 진입", + "관리자 화면의 앱 다운로드 페이지에서 QR 코드를 스캔해 설치", + "현장에서 작업지시 조회·실적 입력·바코드 스캔·검사 입력 수행" + ]}, + {"type":"table", "title":"8. FAQ", "headers":["질문","답변"], "rows":[ + ["로그인이 안 됩니다","회원가입 승인 대기 상태일 수 있습니다. 관리자 승인 후 다시 시도하세요."], + ["인증코드가 안 와요","등록 이메일 주소와 스팸함을 확인하고, 관리자에게 문의하세요."], + ["권한 메뉴가 안 보입니다","시스템관리(권한) 메뉴는 SUPERADMIN 권한 사용자에게만 표시됩니다."], + ["비밀번호를 잊었습니다","로그인 화면의 비밀번호초기화로 임시 비밀번호를 발급받으세요."] + ]} + ] +} diff --git a/doc/mes_개발계획서_v1.pptx b/doc/mes_개발계획서_v1.pptx new file mode 100644 index 0000000..9c16e53 Binary files /dev/null and b/doc/mes_개발계획서_v1.pptx differ diff --git a/doc/mes_사용자지침서_v1.pptx b/doc/mes_사용자지침서_v1.pptx new file mode 100644 index 0000000..c430747 Binary files /dev/null and b/doc/mes_사용자지침서_v1.pptx differ diff --git a/doc/mes_설계서_v1.pptx b/doc/mes_설계서_v1.pptx new file mode 100644 index 0000000..d305b68 Binary files /dev/null and b/doc/mes_설계서_v1.pptx differ diff --git a/doc/mes_운영자지침서_v1.pptx b/doc/mes_운영자지침서_v1.pptx new file mode 100644 index 0000000..40999bc Binary files /dev/null and b/doc/mes_운영자지침서_v1.pptx differ