# 물리 아키텍처 설계서 - 마스터 인덱스

## 1. 개요

### 1.1 설계 목적
- AI 기반 여행 일정 생성 서비스의 Azure Cloud 기반 물리 아키텍처 설계
- 개발환경과 운영환경의 체계적인 아키텍처 분리 및 관리
- 환경별 특화 구성과 단계적 확장 전략 제시

### 1.2 아키텍처 분리 원칙
- **환경별 특화**: 개발환경과 운영환경의 목적에 맞는 최적화
- **단계적 발전**: 개발→운영 단계적 아키텍처 진화
- **비용 효율성**: 환경별 비용 최적화 전략
- **운영 단순성**: 환경별 복잡도 적정 수준 유지

### 1.3 문서 구조
```
physical-architecture.md (마스터 인덱스)
├── physical-architecture-dev.md (개발환경)
└── physical-architecture-prod.md (운영환경)
```

### 1.4 참조 아키텍처
- HighLevel아키텍처정의서: design/high-level-architecture.md
- 논리아키텍처: design/backend/logical/logical-architecture.md
- 아키텍처패턴: design/pattern/아키텍처패턴.md
- API설계서: design/backend/api/*.yaml

## 2. 환경별 아키텍처 개요

### 2.1 환경별 특성 비교

| 구분 | 개발환경 | 운영환경 |
|------|----------|----------|
| **목적** | MVP 개발/검증 | 실제 서비스 운영 |
| **가용성** | 95% | 99.9% |
| **사용자** | 개발팀(5명) | 실사용자(1만~10만) |
| **확장성** | 고정 리소스 | 자동 스케일링 |
| **보안** | 기본 수준 | 엔터프라이즈급 |
| **비용** | 최소화($150/월) | 최적화($2,650/월) |
| **복잡도** | 단순 | 고도화 |

### 2.2 환경별 세부 문서

#### 2.2.1 개발환경 아키텍처
📄 **[물리 아키텍처 설계서 - 개발환경](./physical-architecture-dev.md)**

**주요 특징:**
- **비용 최적화**: Spot Instance, 로컬 스토리지 활용
- **개발 편의성**: 복잡한 설정 최소화, 빠른 배포
- **단순한 보안**: 기본 Network Policy, JWT 검증
- **Pod 기반 백킹서비스**: PostgreSQL, Redis Pod 배포

**핵심 구성:**
📄 **[개발환경 물리 아키텍처 다이어그램](./physical-architecture-dev.mmd)**
- NGINX Ingress → AKS Basic → Pod Services 구조
- Application Pods, PostgreSQL Pod, Redis Pod 배치

#### 2.2.2 운영환경 아키텍처  
📄 **[물리 아키텍처 설계서 - 운영환경](./physical-architecture-prod.md)**

**주요 특징:**
- **고가용성**: Multi-Zone 배포, 자동 장애조치
- **확장성**: HPA 기반 자동 스케일링 (10배 확장)
- **엔터프라이즈 보안**: 다층 보안, Private Endpoint
- **관리형 서비스**: Azure Database, Cache for Redis

**핵심 구성:**
📄 **[운영환경 물리 아키텍처 다이어그램](./physical-architecture-prod.mmd)**
- Azure Front Door → App Gateway + WAF → AKS Premium 구조
- Multi-Zone Apps, Azure PostgreSQL, Azure Redis Premium 배치

### 2.3 핵심 아키텍처 결정사항

#### 2.3.1 공통 아키텍처 원칙
- **서비스 메시 제거**: Istio 대신 Kubernetes Network Policies 사용
- **비동기 통신 중심**: 직접적인 서비스 간 호출 최소화
- **Managed Identity**: 키 없는 인증으로 보안 강화
- **다층 보안**: L1(Network) → L2(Gateway) → L3(Identity) → L4(Data)

#### 2.3.2 환경별 차별화 전략

**개발환경 최적화:**
- 개발 속도와 비용 효율성 우선
- 단순한 구성으로 운영 부담 최소화
- Pod 기반 백킹서비스로 의존성 제거

**운영환경 최적화:**
- 가용성과 확장성 우선
- 관리형 서비스로 운영 안정성 확보
- 엔터프라이즈급 보안 및 모니터링

## 3. 네트워크 아키텍처 비교

### 3.1 환경별 네트워크 전략

#### 3.1.1 환경별 네트워크 전략 비교

| 구성 요소 | 개발환경 | 운영환경 | 비교 |
|-----------|----------|----------|------|
| **인그레스** | NGINX Ingress Controller | Azure Application Gateway + WAF | 운영환경에서 WAF 보안 강화 |
| **네트워크** | 단일 서브넷 구성 | 다중 서브넷 (Application/Database/Cache) | 운영환경에서 계층적 분리 |
| **보안** | 기본 Network Policy | Private Endpoint, NSG 강화 | 운영환경에서 엔터프라이즈급 보안 |
| **접근** | 인터넷 직접 접근 허용 | Private Link 기반 보안 접근 | 운영환경에서 보안 접근 제한 |

### 3.2 네트워크 보안 전략

#### 3.2.1 공통 보안 원칙
- **Network Policies**: Pod 간 통신 제어
- **Managed Identity**: 키 없는 인증
- **Private Endpoints**: Azure 서비스 보안 접근
- **TLS 암호화**: 모든 외부 통신

#### 3.2.2 환경별 보안 수준

| 보안 요소 | 개발환경 | 운영환경 | 보안 수준 |
|-----------|----------|----------|----------|
| **Network Policy** | 기본 (개발 편의성 고려) | 엄격한 적용 | 운영환경에서 강화 |
| **시크릿 관리** | Kubernetes Secrets | Azure Key Vault | 운영환경에서 HSM 보안 |
| **암호화** | HTTPS 인그레스 레벨 | End-to-End TLS 1.3 | 운영환경에서 완전 암호화 |
| **웹 보안** | - | WAF + DDoS 보호 | 운영환경 전용 |

## 4. 데이터 아키텍처 비교

### 4.1 환경별 데이터 전략

#### 4.1.1 환경별 데이터 구성 비교

| 데이터 서비스 | 개발환경 | 운영환경 | 가용성 | 비용 |
|-------------|----------|----------|---------|------|
| **PostgreSQL** | Kubernetes Pod (hostPath) | Azure Database Flexible Server | 95% vs 99.9% | 무료 vs $450/월 |
| **Redis** | Memory Only Pod | Azure Cache Premium (Cluster) | 단일 vs 클러스터 | 무료 vs $250/월 |
| **백업** | 수동 (주 1회) | 자동 (35일 보존) | 로컬 vs 지역간 복제 | - |
| **데이터 지속성** | 재시작 시 손실 가능 | Zone Redundant | - | - |

### 4.2 캐시 전략 비교

#### 4.2.1 다층 캐시 아키텍처
| 캐시 계층 | 캐시 타입 | TTL | 개발환경 설정 | 운영환경 설정 | 용도 |
|----------|----------|-----|-------------|-------------|------|
| **L1_Application** | Caffeine Cache | 5분 | max_entries: 1000 | max_entries: 2000 | 애플리케이션 레벨 로컬 캐시 |
| **L2_Distributed** | Redis | 30분 | cluster_mode: false | cluster_mode: true | 분산 캐시, eviction_policy: allkeys-lru |

#### 4.2.2 환경별 캐시 특성 비교

| 캐시 특성 | 개발환경 | 운영환경 | 비고 |
|-----------|----------|----------|------|
| **Redis 구성** | 단일 Pod | Premium 클러스터 | 운영환경에서 고가용성 |
| **데이터 지속성** | 메모리 전용 | 지속성 백업 | 운영환경에서 데이터 보장 |
| **성능** | 기본 성능 | 최적화된 성능 | 운영환경에서 향상된 처리 능력 |

## 5. 보안 아키텍처 비교

### 5.1 다층 보안 아키텍처

#### 5.1.1 공통 보안 계층
| 보안 계층 | 보안 기술 | 적용 범위 | 보안 목적 |
|----------|----------|----------|----------|
| **L1_Network** | Kubernetes Network Policies | Pod-to-Pod 통신 제어 | 내부 네트워크 마이크로 세그먼테이션 |
| **L2_Gateway** | API Gateway JWT 검증 | 외부 요청 인증/인가 | API 레벨 인증 및 인가 제어 |
| **L3_Identity** | Azure Managed Identity | Azure 서비스 접근 | 클라우드 리소스 안전한 접근 |
| **L4_Data** | Private Link + Key Vault | 데이터 암호화 및 비밀 관리 | 엔드투엔드 데이터 보호 |

### 5.2 환경별 보안 수준

#### 5.2.1 환경별 보안 수준 비교

| 보안 영역 | 개발환경 | 운영환경 | 보안 강화 |
|-----------|----------|----------|----------|
| **인증** | JWT (고정 시크릿) | Azure AD + Managed Identity | 운영환경에서 엔터프라이즈 인증 |
| **네트워크** | 기본 Network Policy | 엄격한 Network Policy + Private Endpoint | 운영환경에서 네트워크 격리 강화 |
| **시크릿** | Kubernetes Secrets | Azure Key Vault (HSM) | 운영환경에서 하드웨어 보안 모듈 |
| **암호화** | HTTPS (인그레스 레벨) | End-to-End TLS 1.3 | 운영환경에서 전 구간 암호화 |

## 6. 모니터링 및 운영

### 6.1 환경별 모니터링 전략

#### 6.1.1 환경별 모니터링 도구 비교

| 모니터링 요소 | 개발환경 | 운영환경 | 기능 차이 |
|-------------|----------|----------|----------|
| **도구** | Kubernetes Dashboard, kubectl logs | Azure Monitor, Application Insights | 운영환경에서 전문 APM 도구 |
| **메트릭** | 기본 Pod/Node 메트릭 | 포괄적 APM, 비즈니스 메트릭 | 운영환경에서 비즈니스 인사이트 |
| **알림** | 기본 알림 (Pod 재시작) | 다단계 알림 (PagerDuty, Teams) | 운영환경에서 전문 알림 체계 |
| **로그** | 로컬 파일시스템 (7일) | Log Analytics (90일) | 운영환경에서 장기 보존 |

### 6.2 CI/CD 및 배포 전략

#### 6.2.1 환별별 배포 방식

#### 6.2.1 환경별 배포 방식 비교

| 배포 요소 | 개발환경 | 운영환경 | 안정성 차이 |
|-----------|----------|----------|----------|
| **배포 방식** | Rolling Update | Blue-Green Deployment | 운영환경에서 무중단 배포 |
| **자동화** | develop 브랜치 자동 | tag 생성 + 수동 승인 | 운영환경에서 더 신중한 배포 |
| **테스트** | 기본 헬스체크 | 종합 품질 게이트 (80% 커버리지) | 운영환경에서 더 엄격한 테스트 |
| **다운타임** | 허용 (1-2분) | Zero Downtime | 운영환경에서 서비스 연속성 보장 |

## 7. 비용 분석

### 7.1 환경별 비용 구조

#### 7.1.1 월간 비용 비교 (USD)

| 구성요소 | 개발환경 | 운영환경 | 차이 |
|----------|----------|----------|------|
| **컴퓨팅** | | | |
| AKS 노드 | $120 (Spot) | $1,200 (Reserved) | 10배 |
| **데이터** | | | |
| PostgreSQL | $0 (Pod) | $450 (Managed) | 무제한 |
| Redis | $0 (Pod) | $250 (Premium) | 무제한 |
| **네트워킹** | | | |
| Load Balancer | $20 | $150 | 7.5배 |
| **기타** | | | |
| Service Bus | $10 | $150 | 15배 |
| 모니터링 | $0 | $100 | 무제한 |
| **총합** | **$150** | **$2,650** | **17.7배** |

#### 7.1.2 비용 최적화 전략

#### 7.1.2 환경별 비용 최적화 전략 비교

| 최적화 영역 | 개발환경 | 운영환경 | 절약 효과 |
|-------------|----------|----------|----------|
| **컴퓨팅 비용** | Spot Instances 사용 | Reserved Instances | 70% vs 30% 절약 |
| **백킹서비스** | Pod 기반 (무료) | 관리형 서비스 | 100% 절약 vs 안정성 |
| **리소스 관리** | 비업무시간 자동 종료 | 자동 스케일링 | 시간 절약 vs 효율성 |
| **사이징 전략** | 고정 리소스 | 성능 기반 적정 sizing | 단순 vs 최적화 |

## 8. 전환 및 확장 계획

### 8.1 개발환경 → 운영환경 전환 체크리스트

| 카테고리 | 체크 항목 | 상태 | 우선순위 | 비고 |
|---------|-----------|------|----------|------|
| **데이터 마이그레이션** | 개발 데이터 백업 | ☐ | 높음 | pg_dump 사용 |
| **데이터 마이그레이션** | 스키마 마이그레이션 스크립트 | ☐ | 높음 | Flyway/Liquibase 고려 |
| **데이터 마이그레이션** | Azure Database 프로비저닝 | ☐ | 높음 | Flexible Server 구성 |
| **설정 변경** | 환경 변수 분리 | ☐ | 높음 | ConfigMap/Secret 분리 |
| **설정 변경** | Azure Key Vault 설정 | ☐ | 높음 | HSM 보안 모듈 |
| **설정 변경** | Managed Identity 구성 | ☐ | 높음 | 키 없는 인증 |
| **모니터링** | Azure Monitor 설정 | ☐ | 중간 | Log Analytics 연동 |
| **모니터링** | 알림 정책 수립 | ☐ | 중간 | PagerDuty/Teams 연동 |
| **모니터링** | 대시보드 구축 | ☐ | 낮음 | Application Insights |

### 8.2 단계별 확장 로드맵

| 단계 | 기간 | 핵심 목표 | 주요 작업 | 사용자 지원 | 가용성 |
|------|------|----------|----------|-------------|----------|
| **Phase 1** | 현재-6개월 | 안정화 | 개발환경 → 운영환경 전환<br/>기본 모니터링 및 알림 구축 | 1만 사용자 | 99.9% |
| **Phase 2** | 6-12개월 | 최적화 | 성능 최적화 및 비용 효율화<br/>고급 모니터링 (APM) 도입 | 10만 동시 사용자 | 99.9% |
| **Phase 3** | 12-18개월 | 글로벌 확장 | 다중 리전 배포<br/>글로벌 CDN 및 로드 밸런싱 | 100만 사용자 | 99.95% |

## 9. 핵심 SLA 지표

### 9.1 환경별 서비스 수준 목표

| SLA 항목 | 개발환경 | 운영환경 | 글로벌환경 (Phase 3) |
|---------|----------|----------|---------------------|
| **가용성** | 95% | 99.9% | 99.95% |
| **응답시간** | < 10초 | < 5초 | < 2초 |
| **배포시간** | 30분 | 10분 | 5분 |
| **복구시간** | 수동 복구 | < 5분 | < 2분 |
| **동시사용자** | 개발팀 (5명) | 10만명 | 100만명 |
| **월간비용** | $150 | $2,650 | $15,000+ |
| **보안인시던트** | 모니터링 없음 | 0건 목표 | 0건 목표 |