guardia-hrm/doc/_content_운영자지침서.json

65 lines
4.1 KiB
JSON

{
"solution": "GUARDiA HRM",
"doc_type": "운영자지침서",
"out": "C:/GUARDiA/workspace/guardia-hrm/doc/hrm_운영자지침서_v1.pptx",
"subtitle": "운영자 지침서 (배포·운영·보안) / 지오정보기술 2026",
"design": {"primary": "1F3A5F", "accent": "2E86C1", "text": "222222", "font_ko": "맑은 고딕"},
"sections": [
{"type": "table", "title": "1. 시스템 사양", "headers": ["항목", "값"], "rows": [
["애플리케이션", "Spring Boot 3.5 / Java 17 (단일 JAR)"],
["서비스 포트", "8014"],
["데이터베이스", "PostgreSQL (hrm_db)"],
["패키지", "com.zioinfo.hrm"],
["프론트", "React 19 (backend static 번들)"],
["AI", "온프레미스 Ollama"]
]},
{"title": "2. 설치 / 배포", "bullets": [
"단일 JAR 빌드: 프론트 빌드 산출물이 backend static에 번들됨",
"deploy_server.py의 guardia-hrm 블록(포트 8014)으로 자동 배포",
"systemd 서비스: scripts/setup/setup_hrm_service.py로 서비스 등록 + hrm_db 생성",
"Gitea webhook → deploy_server 연동 시 push 기반 자동 배포",
"배포 후 8014 health 엔드포인트로 기동 확인"
]},
{"title": "3. DB 스키마 적용 (UIMS 이식 반영)", "bullets": [
"스키마 로드: schema.sql + 91_uiws_port.sql + 92_uiws_system.sql",
"Spring sql.init.mode=always + continue-on-error로 멱등 적용",
"deploy_server.py guardia-hrm 블록에 'load uiws schema'(91·92 psql) 스텝으로 이중 커버",
"tb_uiws_* 신규 테이블 + hrm_users 멱등 ALTER(2FA·승인 컬럼) 자동 반영",
"재적용 안전: CREATE TABLE IF NOT EXISTS / ON CONFLICT DO NOTHING"
]},
{"type": "table", "title": "4. 환경 설정 (application.yml)", "headers": ["설정", "용도"], "rows": [
["hrm.uiws.auth.twofa-enabled", "2FA 토글 (off 시 단일 JWT 회귀 0)"],
["hrm.uiws.auth.max-login-fail", "로그인 실패 잠금 임계(5)"],
["mail.mode", "log (LogMailSender 폴백 — 외부 API 0)"],
["hrm.uiws.upload-dir", "첨부 파일 저장 경로"],
["sql.init.mode", "always (스키마 멱등 적용)"]
]},
{"title": "5. 운영 — 모니터링 / 헬스", "bullets": [
"8014 health 엔드포인트로 서비스 기동 상태 점검",
"systemd 서비스 active 상태 확인(중지 시 재기동)",
"PostgreSQL 연결: Hikari pool max=3 — 공유 인스턴스 max_connections 포화 방지",
"Ollama AI 호출 실패 시 폴백 동작(서비스 중단 없음)"
]},
{"title": "6. 백업 / 복구", "bullets": [
"hrm_db 정기 백업(pg_dump) — hrm_* 인사 데이터 + tb_uiws_* 업무/권한 데이터 포함",
"첨부 파일 디렉터리(upload-dir) 별도 백업",
"복구 시 스키마 멱등 구조로 재적용 안전(중복 키 미발생)",
"배포 전 백업 → 배포 → 헬스체크 → 이상 시 롤백 시퀀스 권장"
]},
{"title": "7. 장애 대응 (운영 함정 주의)", "bullets": [
"Mapper bean 미등록 크래시 → @MapperScan(annotationClass=Mapper.class) 적용 확인",
"PG 연결 포화 → Hikari pool max=3 유지(상향 시 공유 인스턴스 영향 검토)",
"repos/guardia-hrm는 fresh git init 사용(모노레포 .git 상속 금지 — bundle 비대화 방지)",
"UIMS 테이블 누락(relation does not exist) → 91/92 스키마 psql 재적용 확인",
"에러 응답은 요약 메시지만 — 스택트레이스 미노출(GlobalExceptionHandler)"
]},
{"title": "8. 보안 운영", "bullets": [
"2FA verify-token 우회 차단: purpose=2fa 클레임 토큰은 보호 API 접근 불가(verify 전용)",
"PII AES-256-GCM 암호화 저장, 비밀번호·임시비번·인증코드는 메일·로그 채널만(API 응답 0)",
"RBAC: /api/system/** 조회=SUPERADMIN/MANAGER, 쓰기=SUPERADMIN",
"회원가입 승인 게이트(approved=false 로그인 차단), 사용자 열거 방지",
"외부 API 0 (Ollama 외 통신 없음). 자격증명·내부 IP는 운영 문서에 미기재"
]}
]
}