# High Level 아키텍처 정의서 ## 1. 개요 (Executive Summary) ### 1.1 프로젝트 개요 - **비즈니스 목적**: MVNO 고객들이 편리하게 통신요금을 조회하고 상품을 변경할 수 있는 디지털 서비스 제공 - **핵심 기능**: - 사용자 인증/인가 관리 - 요금 조회 서비스 (KOS 연동) - 상품 변경 서비스 (KOS 연동) - 요청/처리 이력 관리 - **대상 사용자**: MVNO 통신서비스 고객 - **예상 사용자 규모**: Peak 시간대 1,000명 동시 사용자 ### 1.2 아키텍처 범위 및 경계 - **시스템 범위**: MVNO 통신요금 관리 서비스 (3개 마이크로서비스) - **포함되는 시스템**: - Auth Service (사용자 인증/인가) - Bill-Inquiry Service (요금 조회) - Product-Change Service (상품 변경) - API Gateway, Redis 캐시, PostgreSQL DB - **제외되는 시스템**: KOS-Order 시스템 (외부 레거시 시스템) - **외부 시스템 연동**: - KOS-Order 시스템 (통신사 백엔드) - MVNO AP Server (프론트엔드 시스템) ### 1.3 문서 구성 이 문서는 4+1 뷰 모델을 기반으로 구성되며, 논리적/물리적/프로세스/개발 관점에서 아키텍처를 정의합니다. --- ## 2. 아키텍처 요구사항 ### 2.1 기능 요구사항 요약 | 영역 | 주요 기능 | 우선순위 | |------|-----------|----------| | Auth Service | 사용자 로그인, 권한 관리 | High | | Bill-Inquiry | 요금 조회, KOS 연동, 이력 관리 | High | | Product-Change | 상품 변경, 사전 체크, KOS 연동 | High | ### 2.2 비기능 요구사항 (NFRs) #### 2.2.1 성능 요구사항 - **응답시간**: API 응답 200ms 이내 (일반 조회), 3초 이내 (외부 연동) - **처리량**: API Gateway 1,000 TPS - **동시사용자**: 1,000명 (Peak 시간대) - **데이터 처리량**: KOS 연동 최대 100건/분 #### 2.2.2 확장성 요구사항 - **수평 확장**: 마이크로서비스별 독립적 Auto Scaling - **수직 확장**: 메모리/CPU 사용량 기반 동적 확장 - **글로벌 확장**: 단일 리전 배포 (향후 확장 가능) #### 2.2.3 가용성 요구사항 - **목표 가용성**: 99.9% (8.7시간/년 다운타임) - **다운타임 허용**: 월 43분 이내 - **재해복구 목표**: RTO 30분, RPO 1시간 #### 2.2.4 보안 요구사항 - **인증/인가**: JWT 기반 토큰, RBAC 권한 모델 - **데이터 암호화**: TLS 1.3 전송 암호화, AES-256 저장 암호화 - **네트워크 보안**: Private Link, WAF, NSG - **컴플라이언스**: 개인정보보호법, 정보통신망법 준수 ### 2.3 아키텍처 제약사항 - **기술적 제약**: Spring Boot 3.x, Java 17, PostgreSQL 15 - **비용 제약**: Azure 월 예산 $5,000 이내 - **시간 제약**: 7주 내 개발 완료 - **조직적 제약**: 5명 팀, Agile 방법론 적용 --- ## 3. 아키텍처 설계 원칙 ### 3.1 핵심 설계 원칙 1. **확장성 우선**: 마이크로서비스 아키텍처로 수평적 확장 지원 2. **장애 격리**: Circuit Breaker 패턴으로 외부 시스템 장애 격리 3. **느슨한 결합**: API Gateway를 통한 서비스 간 독립성 보장 4. **관측 가능성**: Azure Monitor를 통한 통합 로깅, 모니터링 5. **보안 바이 데자인**: Zero Trust 보안 모델 적용 ### 3.2 아키텍처 품질 속성 우선순위 | 순위 | 품질 속성 | 중요도 | 전략 | |------|-----------|--------|------| | 1 | 가용성 | High | Circuit Breaker, Auto Scaling | | 2 | 성능 | High | Cache-Aside, CDN | | 3 | 보안 | Medium | JWT, Private Link, WAF | --- ## 4. 논리 아키텍처 (Logical View) ### 4.1 시스템 컨텍스트 다이어그램 ``` design/backend/logical/logical-architecture.mmd ``` ### 4.2 도메인 아키텍처 #### 4.2.1 도메인 모델 | 도메인 | 책임 | 주요 엔티티 | |--------|------|-------------| | Auth | 인증/인가 관리 | User, Session, Permission | | Bill-Inquiry | 요금 조회 처리 | BillInquiry, BillHistory | | Product-Change | 상품 변경 처리 | Product, ChangeHistory | #### 4.2.2 바운디드 컨텍스트 ```mermaid graph TB subgraph "Auth Context" User[User] Session[Session] Permission[Permission] end subgraph "Bill-Inquiry Context" BillInquiry[Bill Inquiry] BillHistory[Bill History] KOSBillData[KOS Bill Data] end subgraph "Product-Change Context" Product[Product] ProductChangeRequest[Change Request] ProductChangeHistory[Change History] KOSProductData[KOS Product Data] end subgraph "External Context" KOS[KOS-Order System] MVNO[MVNO AP Server] end User --> Session User --> BillInquiry User --> ProductChangeRequest BillInquiry --> KOSBillData ProductChangeRequest --> KOSProductData KOSBillData --> KOS KOSProductData --> KOS BillInquiry --> MVNO ProductChangeRequest --> MVNO ``` ### 4.3 서비스 아키텍처 #### 4.3.1 마이크로서비스 구성 | 서비스명 | 책임 | |----------|------| | Auth Service | JWT 토큰 발급/검증, 사용자 세션 관리, 접근 권한 확인 | | Bill-Inquiry Service | 요금 조회 처리, KOS 연동, 조회 이력 관리 | | Product-Change Service | 상품 변경 처리, 사전 체크, KOS 연동, 변경 이력 관리 | #### 4.3.2 서비스 간 통신 패턴 - **동기 통신**: REST API (JSON), API Gateway를 통한 라우팅 - **비동기 통신**: Azure Service Bus (이력 처리용) - **데이터 일관성**: 캐시 무효화, 이벤트 기반 동기화 --- ## 5. 프로세스 아키텍처 (Process View) ### 5.1 주요 비즈니스 프로세스 #### 5.1.1 핵심 사용자 여정 ```mermaid sequenceDiagram participant User as 사용자 participant Frontend as MVNO Frontend participant Gateway as API Gateway participant Auth as Auth Service participant Bill as Bill-Inquiry participant Product as Product-Change User->>Frontend: 1. 로그인 요청 Frontend->>Gateway: 2. POST /auth/login Gateway->>Auth: 3. 인증 처리 Auth-->>Gateway: 4. JWT 토큰 발급 Gateway-->>Frontend: 5. 인증 완료 User->>Frontend: 6. 요금 조회 요청 Frontend->>Gateway: 7. GET /bills/menu Gateway->>Bill: 8. 요금 조회 처리 Bill-->>Gateway: 9. 조회 결과 Gateway-->>Frontend: 10. 화면 표시 User->>Frontend: 11. 상품 변경 요청 Frontend->>Gateway: 12. POST /products/change Gateway->>Product: 13. 변경 처리 Product-->>Gateway: 14. 처리 결과 Gateway-->>Frontend: 15. 완료 안내 ``` #### 5.1.2 시스템 간 통합 프로세스 ``` design/backend/sequence/outer/ ``` ### 5.2 동시성 및 동기화 - **동시성 처리 전략**: Stateless 서비스 설계, Redis를 통한 세션 공유 - **락 관리**: 상품 변경 시 Optimistic Lock 적용 - **이벤트 순서 보장**: Azure Service Bus의 Session 기반 메시지 순서 보장 --- ## 6. 개발 아키텍처 (Development View) ### 6.1 개발 언어 및 프레임워크 선정 #### 6.1.1 백엔드 기술스택 | 서비스 | 언어 | 프레임워크 | 선정이유 | |----------|------|---------------|----------| | Auth Service | Java 17 | Spring Boot 3.2 | 안정성, 생태계, 보안 | | Bill-Inquiry | Java 17 | Spring Boot 3.2 | 일관된 기술스택 | | Product-Change | Java 17 | Spring Boot 3.2 | 팀 역량, 유지보수성 | #### 6.1.2 프론트엔드 기술스택 - **언어**: TypeScript 5.x - **프레임워크**: React 18 + Next.js 14 - **선정 이유**: 타입 안전성, SSR 지원, 팀 경험 ### 6.2 서비스별 개발 아키텍처 패턴 | 서비스 | 아키텍처 패턴 | 선정 이유 | |--------|---------------|-----------| | Auth Service | Layered Architecture | 단순한 CRUD, 명확한 계층 분리 | | Bill-Inquiry | Layered Architecture | 외부 연동 중심, 트랜잭션 관리 | | Product-Change | Layered Architecture | 복잡한 비즈니스 로직, 검증 로직 | ### 6.3 개발 가이드라인 - **코딩 표준**: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/standards/standard_comment.md - **테스트 전략**: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/standards/standard_testcode.md --- ## 7. 물리 아키텍처 (Physical View) ### 7.1 클라우드 아키텍처 패턴 #### 7.1.1 선정된 클라우드 패턴 - **패턴명**: API Gateway + Cache-Aside + Circuit Breaker - **적용 이유**: 마이크로서비스 통합 관리, 성능 최적화, 외부 시스템 안정성 - **예상 효과**: 응답시간 80% 개선, 가용성 99.9% 달성 #### 7.1.2 클라우드 제공자 - **주 클라우드**: Microsoft Azure - **멀티 클라우드 전략**: 단일 클라우드 (단순성 우선) - **하이브리드 구성**: 없음 (클라우드 네이티브) ### 7.2 인프라스트럭처 구성 #### 7.2.1 컴퓨팅 리소스 | 구성요소 | 사양 | 스케일링 전략 | |----------|------|---------------| | 웹서버 | Azure App Service (P1v3) | Auto Scaling (CPU 70%) | | 앱서버 | Azure Container Apps | Horizontal Pod Autoscaler | | 데이터베이스 | Azure Database for PostgreSQL | Read Replica + Connection Pool | #### 7.2.2 네트워크 구성 ```mermaid graph TB subgraph "Internet" User[사용자] end subgraph "Azure Front Door" AFD[Azure Front Door
Global Load Balancer
WAF] end subgraph "Azure Virtual Network" subgraph "Public Subnet" Gateway[API Gateway
Azure Application Gateway] end subgraph "Private Subnet" App[App Services
Container Apps] Cache[Azure Redis Cache] end subgraph "Data Subnet" DB[(Azure PostgreSQL
Flexible Server)] end end subgraph "External" KOS[KOS-Order System
On-premises] end User --> AFD AFD --> Gateway Gateway --> App App --> Cache App --> DB App --> KOS ``` #### 7.2.3 보안 구성 - **방화벽**: Azure Firewall + Network Security Groups - **WAF**: Azure Front Door WAF (OWASP Top 10 보호) - **DDoS 방어**: Azure DDoS Protection Standard - **VPN/Private Link**: Azure Private Link for KOS 연동 --- ## 8. 기술 스택 아키텍처 ### 8.1 API Gateway & Service Mesh #### 8.1.1 API Gateway - **제품**: Azure Application Gateway + API Management - **주요 기능**: JWT 인증, 라우팅, Rate Limiting, 로깅 - **설정 전략**: Path-based routing, SSL termination #### 8.1.2 Service Mesh - **제품**: 적용하지 않음 (3개 서비스로 단순함) - **적용 범위**: 없음 - **트래픽 관리**: API Gateway 수준에서 처리 ### 8.2 데이터 아키텍처 #### 8.2.1 데이터베이스 전략 | 용도 | 데이터베이스 | 타입 | 특징 | |------|-------------|------|------| | 트랜잭션 | PostgreSQL 15 | RDBMS | ACID 보장, JSON 지원 | | 캐시 | Azure Redis Cache | In-Memory | 클러스터 모드, 고가용성 | | 검색 | PostgreSQL Full-text | Search | 기본 검색 기능 | | 분석 | Azure Monitor Logs | Data Warehouse | 로그 및 메트릭 분석 | #### 8.2.2 데이터 파이프라인 ```mermaid graph LR App[Applications] --> Redis[Azure Redis Cache] App --> PG[(PostgreSQL)] App --> Monitor[Azure Monitor] Redis --> PG PG --> Monitor Monitor --> Dashboard[Azure Dashboard] ``` ### 8.3 백킹 서비스 (Backing Services) #### 8.3.1 메시징 & 이벤트 스트리밍 - **메시지 큐**: Azure Service Bus (Premium) - **이벤트 스트리밍**: 없음 (단순한 비동기 처리만 필요) - **이벤트 스토어**: 없음 #### 8.3.2 스토리지 서비스 - **객체 스토리지**: Azure Blob Storage (로그, 백업용) - **블록 스토리지**: Azure Managed Disks - **파일 스토리지**: 없음 ### 8.4 관측 가능성 (Observability) #### 8.4.1 로깅 전략 - **로그 수집**: Azure Monitor Agent - **로그 저장**: Azure Monitor Logs (Log Analytics) - **로그 분석**: KQL (Kusto Query Language) #### 8.4.2 모니터링 & 알람 - **메트릭 수집**: Azure Monitor Metrics - **시각화**: Azure Dashboard + Grafana - **알람 정책**: CPU 80%, Memory 85%, Error Rate 5% #### 8.4.3 분산 추적 - **추적 도구**: Azure Application Insights - **샘플링 전략**: 적응형 샘플링 (1% 기본) - **성능 분석**: End-to-end 트랜잭션 추적 --- ## 9. AI/ML 아키텍처 ### 9.1 AI API 통합 전략 #### 9.1.1 AI 서비스/모델 매핑 | 목적 | 서비스 | 모델 | Input 데이터 | Output 데이터 | SLA | |------|--------|-------|-------------|-------------|-----| | 로그 분석 | Azure OpenAI | GPT-4 | 오류 로그 | 원인 분석 | 99.9% | | 이상 탐지 | Azure ML | Anomaly Detector | 메트릭 데이터 | 이상 여부 | 99.5% | #### 9.1.2 AI 파이프라인 ```mermaid graph LR Logs[Application Logs] --> Monitor[Azure Monitor] Monitor --> OpenAI[Azure OpenAI] OpenAI --> Insights[Insights & Alerts] Metrics[System Metrics] --> ML[Azure ML] ML --> Anomaly[Anomaly Detection] ``` ### 9.2 데이터 과학 플랫폼 - **모델 개발 환경**: Azure Machine Learning Studio - **모델 배포 전략**: REST API 엔드포인트 - **모델 모니터링**: 데이터 드리프트, 성능 모니터링 --- ## 10. 개발 운영 (DevOps) ### 10.1 CI/CD 파이프라인 #### 10.1.1 지속적 통합 (CI) - **도구**: GitHub Actions - **빌드 전략**: Multi-stage Docker build, Parallel job execution - **테스트 자동화**: Unit test 90%, Integration test 70% #### 10.1.2 지속적 배포 (CD) - **배포 도구**: Azure DevOps + ArgoCD - **배포 전략**: Blue-Green 배포 - **롤백 정책**: 자동 헬스체크 실패 시 즉시 롤백 ### 10.2 컨테이너 오케스트레이션 #### 10.2.1 Kubernetes 구성 - **클러스터 전략**: Azure Kubernetes Service (AKS) - **네임스페이스 설계**: dev, staging, prod 환경별 분리 - **리소스 관리**: Resource Quota, Limit Range 적용 #### 10.2.2 헬름 차트 관리 - **차트 구조**: 마이크로서비스별 개별 차트 - **환경별 설정**: values-{env}.yaml - **의존성 관리**: Chart dependencies --- ## 11. 보안 아키텍처 ### 11.1 보안 전략 #### 11.1.1 보안 원칙 - **Zero Trust**: 모든 네트워크 트래픽 검증 - **Defense in Depth**: 다층 보안 방어 - **Least Privilege**: 최소 권한 원칙 #### 11.1.2 위협 모델링 | 위협 | 영향도 | 대응 방안 | |------|--------|-----------| | DDoS 공격 | High | Azure DDoS Protection, Rate Limiting | | 데이터 유출 | High | 암호화, Access Control, Auditing | | 인증 우회 | Medium | JWT 검증, MFA | ### 11.2 보안 구현 #### 11.2.1 인증 & 인가 - **ID 제공자**: Azure AD B2C (향후 확장용) - **토큰 전략**: JWT (Access 30분, Refresh 24시간) - **권한 모델**: RBAC (Role-Based Access Control) #### 11.2.2 데이터 보안 - **암호화 전략**: - 전송 중: TLS 1.3 - 저장 중: AES-256 (Azure Key Vault 관리) - **키 관리**: Azure Key Vault - **데이터 마스킹**: 민감정보 자동 마스킹 --- ## 12. 품질 속성 구현 전략 ### 12.1 성능 최적화 #### 12.1.1 캐싱 전략 | 계층 | 캐시 유형 | TTL | 무효화 전략 | |------|-----------|-----|-------------| | CDN | Azure Front Door | 24h | 파일 변경 시 | | Application | Redis | 1-30분 | 데이터 변경 시 | | Database | Connection Pool | N/A | Connection 관리 | #### 12.1.2 데이터베이스 최적화 - **인덱싱 전략**: B-tree 인덱스, 복합 인덱스 - **쿼리 최적화**: Query Plan 분석, N+1 문제 해결 - **커넥션 풀링**: HikariCP (최대 20개 커넥션) ### 12.2 확장성 구현 #### 12.2.1 오토스케일링 - **수평 확장**: Horizontal Pod Autoscaler (CPU 70%) - **수직 확장**: Vertical Pod Autoscaler (메모리 기반) - **예측적 스케일링**: Azure Monitor 기반 예측 #### 12.2.2 부하 분산 - **로드 밸런서**: Azure Load Balancer + Application Gateway - **트래픽 분산 정책**: Round Robin, Weighted - **헬스체크**: HTTP /health 엔드포인트 ### 12.3 가용성 및 복원력 #### 12.3.1 장애 복구 전략 - **Circuit Breaker**: Resilience4j (실패율 50%, 타임아웃 3초) - **Retry Pattern**: 지수 백오프 (최대 3회) - **Bulkhead Pattern**: 스레드 풀 격리 #### 12.3.2 재해 복구 - **백업 전략**: - PostgreSQL: 자동 백업 (7일 보관) - Redis: RDB 스냅샷 (6시간 간격) - **RTO/RPO**: RTO 30분, RPO 1시간 - **DR 사이트**: 동일 리전 내 가용성 영역 활용 --- ## 13. 아키텍처 의사결정 기록 (ADR) ### 13.1 주요 아키텍처 결정 | ID | 결정 사항 | 결정 일자 | 상태 | 결정 이유 | |----|-----------|-----------|------|-----------| | ADR-001 | Spring Boot 3.x 채택 | 2025-01-08 | 승인 | 팀 역량, 생태계, 보안 | | ADR-002 | Layered Architecture 적용 | 2025-01-08 | 승인 | 복잡도 최소화, 유지보수성 | | ADR-003 | Azure 단일 클라우드 | 2025-01-08 | 승인 | 비용 효율성, 운영 단순성 | ### 13.2 트레이드오프 분석 #### 13.2.1 성능 vs 확장성 - **고려사항**: 캐시 사용량과 메모리 비용, DB 커넥션 수와 처리량 - **선택**: 성능 우선 (캐시 적극 활용) - **근거**: 읽기 중심 워크로드, 비용 대비 효과 #### 13.2.2 일관성 vs 가용성 (CAP 정리) - **고려사항**: 데이터 일관성과 서비스 가용성 - **선택**: AP (Availability + Partition tolerance) - **근거**: 통신요금 서비스 특성상 가용성이 더 중요 --- ## 14. 구현 로드맵 ### 14.1 개발 단계 | 단계 | 기간 | 주요 산출물 | 마일스톤 | |------|------|-------------|-----------| | Phase 1 | 4주 | 기본 패턴 구현 | API Gateway, 캐시, Circuit Breaker | | Phase 2 | 3주 | 최적화 및 고도화 | 성능 튜닝, 모니터링 | ### 14.2 마이그레이션 전략 (레거시 시스템이 있는 경우) - **데이터 마이그레이션**: 없음 (신규 시스템) - **기능 마이그레이션**: 없음 - **병행 운영**: KOS 시스템과의 연동만 고려 --- ## 15. 위험 관리 ### 15.1 아키텍처 위험 | 위험 | 영향도 | 확률 | 완화 방안 | |------|--------|------|-----------| | KOS 시스템 장애 | High | Medium | Circuit Breaker, 캐시 활용 | | Azure 서비스 장애 | High | Low | 다중 가용성 영역, 모니터링 | | 성능 목표 미달성 | Medium | Medium | 캐시 전략, 부하 테스트 | ### 15.2 기술 부채 관리 - **식별된 기술 부채**: - 단일 클라우드 종속성 - 단순한 인증 체계 - **해결 우선순위**: 1. 모니터링 고도화 2. 보안 강화 3. 멀티 클라우드 검토 - **해결 계획**: Phase 2 완료 후 순차적 개선 --- ## 16. 부록 ### 16.1 참조 아키텍처 - **업계 표준**: - Microsoft Azure Well-Architected Framework - 12-Factor App - **내부 표준**: - 통신사 보안 가이드라인 - 개발팀 코딩 표준 - **외부 참조**: - Spring Boot Best Practices - Microservices.io patterns ### 16.2 용어집 | 용어 | 정의 | |------|------| | MVNO | Mobile Virtual Network Operator (가상 이동통신망 사업자) | | KOS | 통신사 백엔드 시스템 | | Circuit Breaker | 외부 시스템 장애 격리 패턴 | | Cache-Aside | 캐시 조회 후 DB 접근하는 패턴 | ### 16.3 관련 문서 - 유저스토리: design/userstory.md - 아키텍처패턴: design/pattern/architecture-pattern.md - 논리아키텍처: design/backend/logical/logical-architecture.md - API설계서: design/backend/api/API설계서.md - 외부시퀀스설계서: design/backend/sequence/outer/ - 클래스설계서: design/backend/class/class.md - 데이터설계서: design/backend/database/data-design-summary.md --- ## 문서 이력 | 버전 | 일자 | 작성자 | 변경 내용 | 승인자 | |------|------|--------|-----------|-------| | v1.0 | 2025-01-08 | 이개발(백엔더) | 초기 작성 | 팀 전체 |