파일
wbx-spring/plans/wtmgr/09-devops-infra.md
accura0117 9707a6eeb1 feat: FE 화면 구현 완료 + 샘플 데이터 + 결재라인 연동
- 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>
2026-03-25 22:17:32 +09:00

230 줄
8.7 KiB
Markdown

# 09. 한화오션 보안 SW / Azure 인프라
> **전제**: Nginx 라우팅, Docker Compose, systemd 등 일반 인프라는
> `plans/wbx-spring/07-infra-deploy.md`에서 제공.
> 본 문서는 **한화오션 고객 요구 보안 SW + Azure 구성**만 다룹니다.
>
> **비기능 요구사항 매핑**: NF.1~2 (Cloud), NF.3~7 (Security), NF.8~10 (Monitoring), NF.16~17 (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 설정 (이중화)
```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)
```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 위에 추가)
```yaml
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 옵션 추가 사항입니다.
```yaml
# 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) |