{ "solution": "zioinfo-esn", "doc_type": "운영자지침서", "out": "C:/GUARDiA/workspace/zioinfo-esn/doc/zioinfo-esn_운영자지침서_v2.pptx", "subtitle": "설치·운영·권한관리(RBAC) / 지오정보기술 / 2026", "design": {"primary":"1F3A5F","accent":"2E86C1","text":"222222","font_ko":"맑은 고딕"}, "sections": [ {"type":"table", "title":"1. 설치 / 배포 정보", "headers":["항목","값"], "rows":[ ["서비스","zioinfo-esn (단일 JAR · esn-1.0.0)"], ["백엔드 포트","8015"], ["프론트(개발)","Vite 3014"], ["빌드","Maven (Java 17) · React 빌드 → backend static 번들"], ["배포","Gitea webhook → 자동 배포 파이프라인"], ["DB","PostgreSQL / esn_db"] ]}, {"title":"2. 환경 설정 (환경변수)", "bullets":[ "DB_URL / DB_USER : PostgreSQL esn_db 접속 (비밀번호는 환경변수로 주입, 문서 미기재)", "OLLAMA_URL : 온프레미스 Ollama 엔드포인트(기본 11434) · 텍스트 모델 llama3.2:1b", "ITSM_URL : ITSM 연계(기본 9001)", "JWT_SECRET : JWT 서명 키(운영 시 환경변수로 교체 · 문서/코드 노출 금지)", "메일 설정 미구성 시 2FA 인증코드는 LogMailSender 폴백으로 로그 기록" ], "note":"자격증명·비밀번호·시크릿 값은 본 문서에 기재하지 않음"}, {"title":"3. DB 스키마 / 마이그레이션", "bullets":[ "부팅 시 멱등 적용: sql.init mode:always, continue-on-error", "적용 순서: schema.sql → 90_uiws_system.sql → 91_uiws_port.sql", "90_uiws_system.sql: 권한관리 10테이블 + 시드(역할 ADMIN/MANAGER/USER, ZIOINFO 회사, ROOT 부서)", "91_uiws_port.sql: 업무 9테이블 + esn_user 2FA 컬럼 ALTER", "전 구문 IF NOT EXISTS / ON CONFLICT DO NOTHING → 재배포 안전(중복 무해)", "UIMS 테이블은 tb_uiws_* 프리픽스 → 기존 esn_*(ESL) 충돌 없음" ]}, {"title":"4. 권한관리(RBAC) 운영 — 신규", "bullets":[ "시스템관리 메뉴는 esn_role ∈ {ADMIN, MANAGER}에게만 노출", "역할관리: 역할 등록·수정·다중삭제(검색·페이징)", "메뉴권한: 역할별 메뉴 읽기/쓰기 토글 → 전체 저장(쓰기 ON 시 읽기 자동 ON)", "메뉴·공통코드·부서·거래처 관리(CRUD)", "신규 가입자 승인: 승인 전 로그인 차단 → ADMIN 승인 처리 필요" ]}, {"title":"5. 백업 / 복구", "bullets":[ "PostgreSQL esn_db 정기 백업(pg_dump) 권장 — ESL 운영데이터 + UIMS 업무데이터 포함", "스키마는 멱등 부팅으로 자동 재생성되나 데이터는 별도 백업 필요", "복구 시 DB 복원 후 서비스 재기동 → 스키마 보강 SQL 멱등 재적용으로 정합 유지" ]}, {"type":"table", "title":"6. 모니터링 / 헬스", "headers":["항목","확인 방법"], "rows":[ ["헬스체크","GET /actuator/health (show-details: never)"], ["서비스 기동","8015 포트 응답 확인"], ["AI 상태","Ollama 11434 가용성 · 미가용 시 폴백 동작 확인"], ["DB 연결","Hikari pool(max 3) 포화 여부 모니터링"] ]}, {"title":"7. 장애 대응", "bullets":[ "AI 응답 없음: Ollama 미가용/RAM 부족 가능 → 폴백 동작으로 핵심 기능 유지, 모델/리소스 점검", "테이블 없음(relation does not exist): 보강 SQL(90/91) 멱등 재적용 후 재기동", "DB 연결 포화: Hikari max-pool=3 — 동시 부하 시 풀 상향 검토", "2FA 메일 미발송: 메일 설정 확인, 미설정 시 LogMailSender 로그에서 코드 확인", "계정 잠금 누적: 권한관리에서 사용자 잠금 해제" ]}, {"title":"8. 보안 운영", "bullets":[ "외부 API 호출 0 — Ollama·메일(내부)만 사용", "자격증명·비밀번호·내부IP·JWT 시크릿은 응답/로그/문서에 노출 금지", "2FA verify-token(purpose=2fa)은 보호 API 접근 불가 — 우회 차단 가드 유지", "RBAC 변경 API는 ADMIN/MANAGER 한정(백엔드 403) · 비밀번호 BCrypt 저장", "회원가입 승인대기·아이디찾기 마스킹·스택트레이스 미노출 정책 준수" ]} ] }