{
  "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":[
      "구성: 단일 JAR — frontend(React) 빌드 산출물을 backend static에 번들",
      "서비스 포트: 8016 (단일 진입점)",
      "패키지: com.zioinfo.esn (Spring Boot 3.5 / Java 17)",
      "기동: systemd 서비스로 단일 JAR 실행, 부팅 시 자동 기동",
      "프론트 빌드 → backend static 번들 → JAR 빌드 → 배포 순서"
    ]},
    {"title":"2. 환경 설정", "bullets":[
      "DB: PostgreSQL esn_db / 계정 esn_user",
      "멀티테넌트: LGINNOTEK / LGIT / EMART / ZIOINFO 4개 테넌트 데이터 격리",
      "AI: Ollama 온프레미스 호스트 연동 (알람 분석·POS 분류, 폴백 동작)",
      "스키마: sql.init.mode=always — 전 스키마 멱등, 부팅 시 안전 재적용",
      "schema-locations에 db/90_uiws_system.sql, db/93_esn_login_helper.sql 포함"
    ], "note":"멱등 스키마 — 누락 테이블 발생 시 재기동으로 재적용"},
    {"type":"table","title":"3. 시스템관리 (RBAC 권한관리)", "headers":["화면","기능"], "rows":[
      ["RoleManagement","역할 등록/수정/다중삭제"],
      ["RoleMenuPermission","역할-메뉴 읽기/쓰기 권한 매핑"],
      ["CodeManagement","공통코드 그룹/값 관리 (사용중 코드값 시 삭제 차단)"],
      ["MenuManagement","메뉴 2-depth 트리 관리"],
      ["DeptManagement","부서 2-depth 트리 관리"],
      ["CompanyManagement","거래처 관리"],
      ["UserList / 승인","사용자 관리 + 회원가입 승인대기 처리"]
    ]},
    {"title":"4. 백업 / 복구", "bullets":[
      "DB 백업: esn_db 정기 덤프(스케줄) — 본연 + tb_uiws_* 포함",
      "복구: 덤프 복원 후 단일 JAR 재기동, 멱등 스키마로 정합 보장",
      "tb_uiws_* 와 esn_user는 분리 스키마 — 복구 시 병합 금지 원칙 유지",
      "펌웨어/업데이트 큐는 작업 상태 정합 확인 후 재개"
    ]},
    {"title":"5. 모니터링 / 헬스", "bullets":[
      "서비스 헬스: 8016 기동 상태 점검(systemd active + 헬스 확인)",
      "HCore 관제(HCoreStatus): 게이트웨이/허브 상태 실시간 모니터링",
      "알람(AlarmList) + AI 원인 분석(AiAnalysis)으로 이상 징후 추적",
      "AuditLog: 감사 로그로 운영 행위 추적",
      "Dashboard: 통합 운영 현황 집계"
    ]},
    {"title":"6. 장애 대응", "bullets":[
      "기동 실패: 단일 JAR 로그 확인 → DB 연결(esn_db)·포트(8016) 점검",
      "누락 테이블(relation does not exist): 멱등 스키마 재적용(재기동) 후 확인",
      "AI 응답 지연/실패: 폴백으로 degraded 동작 — Ollama 호스트 상태 점검",
      "POS 변환 오류(PosCvtList): 변환/분류 큐 상태·원본 데이터 확인",
      "오류 응답: 스택트레이스 미노출 — 요약 메시지 기준으로 원인 추적"
    ]},
    {"title":"7. 보안 운영", "bullets":[
      "자격증명·비밀번호·내부 IP API 응답/로그 미노출 (불변 규칙)",
      "외부 API 0 — Ollama(AI)·SMTP(메일)만 사용",
      "인증: JWT + 2FA + 로그인 실패 잠금, verify-token purpose=2fa 우회차단",
      "RBAC: /api/system/** hasAnyRole(ADMIN,MANAGER) + 사이드바 가드 이중 방어",
      "회원가입 승인대기(PENDING) 운영 — 미승인 계정 접근 차단",
      "열거방지: 아이디찾기 마스킹·미존재 비표시, 비밀번호 재설정 항상 success=true"
    ], "note":"임시비번 메일/로그 전용 — 어떤 응답에도 미노출"}
  ]
}
