- WBS/TEAL 화면 실제 구현 (TreeTable, FileUpload, 버전관리) - 시수이력/결재이력 화면 구현 (DataTable, Filter, Timeline) - 비밀번호변경 화면 추가 - 로그인 snake_case 응답 매핑 수정 - Vite 프록시 8081 포트 수정 - auth guard에서 fetchMe 자동 호출 - V108 샘플 데이터 (10명 사용자, 4주 시수 215건, 결재 9건) - 배너 추가 (WBX Spring) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8.7 KiB
8.7 KiB
09. 한화오션 보안 SW / Azure 인프라
전제: Nginx 라우팅, Docker Compose, systemd 등 일반 인프라는
plans/wbx-spring/07-infra-deploy.md에서 제공. 본 문서는 한화오션 고객 요구 보안 SW + Azure 구성만 다룹니다.비기능 요구사항 매핑: NF.1
2 (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.mdWTM은 아래 고객 전용 설정만 추가합니다:
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) |