파일
wbx-spring/HanwhaOCN/wtmgr/09-devops-infra.md
accura0117 783865266b docs: 한화오션 WTM 프로젝트 계획서 추가 (00~14)
- 00~11: WTM 시수관리 시스템 설계 문서 (아키텍처, DB스키마, API스펙 등)
- 12: BE 멀티프로젝트 플랫폼 구성 계획 (wbx-spring-core 라이브러리 전환)
- 13: FE Vue3+PrimeVue4 모듈 기반 구조 계획
- 14: 레이아웃 표준 및 디자인 시스템 (반응형, 하드코딩 제거)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 19:52:15 +09:00

8.7 KiB

09. 한화오션 보안 SW / Azure 인프라

전제: Nginx 라우팅, Docker Compose, systemd 등 일반 인프라는 plans/wbx-spring/07-infra-deploy.md에서 제공. 본 문서는 한화오션 고객 요구 보안 SW + Azure 구성만 다룹니다.

비기능 요구사항 매핑: NF.12 (Cloud), NF.37 (Security), NF.810 (Monitoring), NF.1617 (Architecture)

Azure 인프라 구성

┌─────────────────────────────────────────────────────────────┐
│                   Azure Resource Group                       │
│                                                              │
│  ┌───────────────┐    ┌──────────────────────────────────┐  │
│  │ Azure App     │    │   Virtual Network (VNet)          │  │
│  │ Gateway       │    │                                   │  │
│  │ (WAF + SSL)   │    │  ┌─────────┐    ┌─────────────┐ │  │
│  │               │───▶│  │  VM #1  │    │   VM #2     │ │  │
│  └───────────────┘    │  │ Nginx   │    │  Nginx      │ │  │
│                       │  │ +Tomcat │    │  +Tomcat    │ │  │
│                       │  │ (Active)│    │  (Standby)  │ │  │
│                       │  └────┬────┘    └──────┬──────┘ │  │
│                       │       │                │        │  │
│                       │  ┌────┴────────────────┴────┐   │  │
│                       │  │   Azure SQL / PostgreSQL  │   │  │
│                       │  │   (PaaS, HA built-in)     │   │  │
│                       │  └──────────────────────────┘   │  │
│                       │                                  │  │
│                       │  ┌──────────┐  ┌──────────────┐ │  │
│                       │  │  Redis   │  │ Blob Storage │ │  │
│                       │  │  Cache   │  │ (Files)      │ │  │
│                       │  └──────────┘  └──────────────┘ │  │
│                       └──────────────────────────────────┘  │
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────┐    │
│  │ Azure Entra  │  │ Azure Monitor│  │ Key Vault      │    │
│  │ ID (SSO)     │  │ + Log        │  │ (Secrets)      │    │
│  └──────────────┘  │ Analytics    │  └────────────────┘    │
│                     └──────────────┘                        │
└─────────────────────────────────────────────────────────────┘

Nginx 설정 (이중화)

# /etc/nginx/conf.d/wtmgr.conf
upstream wtmgr_backend {
    server 127.0.0.1:8080;
    keepalive 32;
}

server {
    listen 80;
    server_name wtmgr.hanwhaocean.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name wtmgr.hanwhaocean.com;

    ssl_certificate     /etc/ssl/certs/wtmgr.pem;
    ssl_certificate_key /etc/ssl/private/wtmgr.key;
    ssl_protocols       TLSv1.2 TLSv1.3;

    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Strict-Transport-Security "max-age=63072000" always;

    # Rate Limiting
    limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

    # API
    location /api/ {
        proxy_pass http://wtmgr_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        client_max_body_size 50m;  # Excel 업로드
    }

    # Login Rate Limiting
    location /api/auth/login {
        limit_req zone=login burst=3 nodelay;
        proxy_pass http://wtmgr_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Actuator (내부만)
    location /actuator/ {
        allow 10.0.0.0/8;
        deny all;
        proxy_pass http://wtmgr_backend;
    }

    # Frontend SPA
    location / {
        root /var/www/wtmgr/frontend;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}

CI/CD · Docker · 배포

CI/CD 파이프라인(GitHub Actions, Azure DevOps), Dockerfile, docker-compose, Nginx 설정 등 일반 인프라는 wbx-spring 프레임워크에서 표준 제공합니다.

상세: plans/wbx-spring/07-infra-deploy.md

WTM은 아래 고객 전용 설정만 추가합니다:

WTM 전용 환경변수 (.env)

# wbx-spring 공통 (프레임워크 제공)
JWT_SECRET=...
DB_HOST=...
SPRING_PROFILES_ACTIVE=prod,azure,mssql

# WTM 전용
WTM_WORK_RULES_DEFAULT_MIN_DAILY=8
WTM_WORK_RULES_DEFAULT_MAX_WEEKLY=52
SAP_BTP_ENDPOINT=https://btp.hanwhaocean.com/api
SAP_BTP_CLIENT_ID=...
SAP_BTP_CLIENT_SECRET=...

WTM 전용 application-prod.yml (wbx.spring 위에 추가)

wtm:
  work-rules:
    default-min-daily-hours: 8
    default-max-weekly-hours: 52
  sap:
    btp-endpoint: ${SAP_BTP_ENDPOINT}
    btp-client-id: ${SAP_BTP_CLIENT_ID}
    sync-cron: "0 0 2 * * *"  # 매일 02시

보안 SW — 한화오션 표준 (NF.3~7)

서버 보안 (NF.3)

SW 용도 구성 방법
HIWARE 서버 접근 제어 Azure VM에 HIWARE Agent 설치
V3 (AhnLab) 서버 백신 Azure VM에 V3 Agent 설치
Secuver TOS 서버 보안 (파일 무결성) Azure VM에 Agent 설치

DB 보안 (NF.4)

SW 용도 구성 방법
Cubeone DB 암호화 (컬럼 레벨) Azure SQL TDE + Cubeone 연동
Dbsafer DB 접근 제어/감사 Dbsafer Proxy 서버 구성

클라우드 보안 (NF.5)

SW 용도
Azure Defender 위협 탐지 (VM + SQL)
Azure Log Analytics 보안 이벤트 분석
Azure WAF 웹 방화벽 (App Gateway)
Azure DDoS Protection DDoS 방어
Azure Key Vault 시크릿 관리 (DB PW, JWT 키)

정보보호 심의 (NF.6~7)

□ 웹 애플리케이션 취약점 점검 (OWASP Top 10)
□ 서버/네트워크 인프라 보안 점검
□ 소스코드 보안 점검 (SonarQube / Fortify)
□ 모의해킹 (Penetration Testing)
□ 개인정보 보호 관리 (개인정보보호법 준수)
□ 한화그룹 보안 표준 준수 확인

모니터링 SW — 한화오션 표준 (NF.8~10)

SW 용도 대상 구성
onTune SMS (서버 모니터링) Azure VM Agent 설치
MCCS HA (클러스터) WAS 이중화 Linux: Keepalived 대안 검토
Maxguage DB 모니터링/성능 분석 Azure SQL Proxy 구성
Jennifer WAS(Tomcat) APM Spring Boot -javaagent 연동

Jennifer APM 연동 (NF.10)

Dockerfile, docker-compose 설정은 wbx-spring 표준을 사용합니다. 아래는 WTM 전용 JVM 옵션 추가 사항입니다.

# systemd 서비스 또는 docker-compose에 JVM 옵션 추가
JAVA_OPTS: >-
  -javaagent:/opt/jennifer/agent.java/jennifer.jar
  -Djennifer.config=/opt/jennifer/conf/jennifer.conf

# application-prod.yml (WTM 전용 메트릭 태그)
management:
  metrics:
    tags:
      application: wtm-api
  health:
    db:
      enabled: true
    redis:
      enabled: true

# 알림 규칙: CPU > 80%, Memory > 85%, 5xx > 10/min, Response Time > 3s

백업 전략 (NF.16~17)

항목 방식 주기
Azure SQL 자동 백업 (Point-in-Time) 5분 간격
Azure SQL Long-term Retention 주간/월간
Blob Storage GRS (Geo-Redundant) 실시간 복제
VM 설정 Azure Backup 일간
코드 GitHub 실시간 (Git)