227 lines
8.5 KiB
Plaintext
227 lines
8.5 KiB
Plaintext
!theme mono
|
|
|
|
skinparam componentStyle rectangle
|
|
skinparam componentFontSize 12
|
|
skinparam arrowFontSize 11
|
|
skinparam arrowThickness 2
|
|
|
|
title HealthSync 역설계 - Azure Cloud 물리 아키텍처
|
|
|
|
' 외부 사용자 및 시스템
|
|
package "External Systems" as external #lightgray {
|
|
[모바일 사용자] as MobileUser
|
|
[Google OAuth] as GoogleOAuth
|
|
[Claude AI API] as ClaudeAPI
|
|
[건강보험공단\n데이터] as NhisData
|
|
}
|
|
|
|
' Azure Front Door & CDN
|
|
package "Global Network" as global #lightblue {
|
|
[Azure Front Door] as FrontDoor
|
|
[Azure CDN] as CDN
|
|
}
|
|
|
|
' Azure Application Gateway & Load Balancer
|
|
package "Load Balancing" as lb #lightyellow {
|
|
[Application Gateway\n(WAF 포함)] as AppGateway
|
|
[Azure Load Balancer] as LoadBalancer
|
|
}
|
|
|
|
' AKS Cluster
|
|
package "Azure Kubernetes Service (AKS)" as aks #lightgreen {
|
|
package "Ingress Controller" as ingress {
|
|
[NGINX Ingress\nController] as IngressController
|
|
}
|
|
|
|
package "Application Pods" as pods {
|
|
[Gateway Pod] as GatewayPod
|
|
[User Service Pod] as UserPod
|
|
[Health Service Pod] as HealthPod
|
|
[Goal Service Pod] as GoalPod
|
|
[Intelligence Service Pod] as IntellPod
|
|
[Batch Service Pod] as BatchPod
|
|
}
|
|
|
|
package "Supporting Services" as support {
|
|
[Istio Service Mesh] as ServiceMesh
|
|
[Prometheus\n& Grafana] as Monitoring
|
|
[FluentD] as Logging
|
|
}
|
|
}
|
|
|
|
' Azure Database Services
|
|
package "Database Services" as database #lightpink {
|
|
[Azure Database\nfor PostgreSQL\n(Flexible Server)] as PostgreSQL
|
|
[Azure Cache\nfor Redis\n(Premium)] as Redis
|
|
[Azure Blob Storage\n(Hot Tier)] as BlobStorage
|
|
}
|
|
|
|
' Azure Messaging & Events
|
|
package "Messaging & Events" as messaging #lightsalmon {
|
|
[Azure Service Bus\n(Standard)] as ServiceBus
|
|
[Azure Event Hub\n(Standard)] as EventHub
|
|
}
|
|
|
|
' Azure Security & Identity
|
|
package "Security & Identity" as security #orange {
|
|
[Azure Key Vault] as KeyVault
|
|
[Azure Active Directory\nB2C] as AzureAD
|
|
[Azure Application\nInsights] as AppInsights
|
|
}
|
|
|
|
' Azure DevOps & CI/CD
|
|
package "DevOps & CI/CD" as devops #lightsteelblue {
|
|
[Azure DevOps\nPipelines] as AzureDevOps
|
|
[Azure Container\nRegistry (ACR)] as ACR
|
|
[GitHub Repository] as GitHub
|
|
[Azure Monitor] as AzureMonitor
|
|
}
|
|
|
|
' Azure Backup & Recovery
|
|
package "Backup & DR" as backup #thistle {
|
|
[Azure Backup] as AzureBackup
|
|
[Azure Site Recovery] as SiteRecovery
|
|
[Geo-Redundant\nStorage] as GeoStorage
|
|
}
|
|
|
|
' === 외부 접근 및 CDN (1-3) ===
|
|
MobileUser -[#blue,thickness=3]-> FrontDoor : "1. 모바일 앱 접근"
|
|
FrontDoor -[#blue,thickness=2]-> CDN : "2. 정적 자원 캐싱"
|
|
CDN -[#blue,thickness=2]-> AppGateway : "3. 동적 요청 라우팅"
|
|
|
|
' === 로드밸런싱 및 보안 (4-5) ===
|
|
AppGateway -[#green,thickness=2]-> LoadBalancer : "4. WAF 보안 필터링"
|
|
LoadBalancer -[#green,thickness=2]-> IngressController : "5. AKS 클러스터 진입"
|
|
|
|
' === AKS 내부 라우팅 (6-8) ===
|
|
IngressController -[#purple,thickness=2]-> GatewayPod : "6. API Gateway 라우팅"
|
|
GatewayPod -[#purple,thickness=2]-> ServiceMesh : "7. Service Mesh 통신"
|
|
ServiceMesh -[#purple,thickness=2]-> UserPod : "8a. User Service 호출"
|
|
ServiceMesh -[#purple,thickness=2]-> HealthPod : "8b. Health Service 호출"
|
|
ServiceMesh -[#purple,thickness=2]-> GoalPod : "8c. Goal Service 호출"
|
|
ServiceMesh -[#purple,thickness=2]-> IntellPod : "8d. Intelligence Service 호출"
|
|
|
|
' === 데이터베이스 연결 (9-11) ===
|
|
UserPod -[#red,thickness=2]-> PostgreSQL : "9a. 사용자 데이터 처리"
|
|
HealthPod -[#red,thickness=2]-> PostgreSQL : "9b. 건강검진 데이터 처리"
|
|
GoalPod -[#red,thickness=2]-> PostgreSQL : "9c. 목표/미션 데이터 처리"
|
|
IntellPod -[#red,thickness=2]-> PostgreSQL : "9d. AI 분석/채팅 데이터 처리"
|
|
|
|
' === 캐싱 및 스토리지 (10-11) ===
|
|
HealthPod -[#orange,thickness=2]-> Redis : "10a. 건강검진 결과 캐싱"
|
|
IntellPod -[#orange,thickness=2]-> Redis : "10b. AI 응답 캐싱"
|
|
GoalPod -[#orange,thickness=2]-> Redis : "10c. 활성 미션 캐싱"
|
|
HealthPod -[#brown,thickness=2]-> BlobStorage : "11. 건강검진 파일 저장"
|
|
|
|
' === 메시징 및 이벤트 (12-13) ===
|
|
UserPod -[#magenta,thickness=2]-> ServiceBus : "12a. 사용자 이벤트 발행"
|
|
HealthPod -[#magenta,thickness=2]-> ServiceBus : "12b. 건강데이터 이벤트 발행"
|
|
GoalPod -[#magenta,thickness=2]-> ServiceBus : "12c. 목표달성 이벤트 발행"
|
|
IntellPod -[#magenta,thickness=2]-> EventHub : "13. 대량 이벤트 스트리밍"
|
|
|
|
' === 외부 API 연동 (14-16) ===
|
|
UserPod -[#navy,thickness=2]-> GoogleOAuth : "14. Google SSO 인증"
|
|
IntellPod -[#navy,thickness=2]-> ClaudeAPI : "15. AI 분석/채팅 요청"
|
|
HealthPod -[#darkgreen,thickness=2]-> NhisData : "16. 건강보험공단 데이터 연동"
|
|
|
|
' === 배치 처리 (17) ===
|
|
BatchPod -[#darkred,thickness=2]-> ServiceBus : "17a. 배치 이벤트 구독"
|
|
BatchPod -[#darkred,thickness=2]-> IntellPod : "17b. 주기적 AI 알림 요청"
|
|
BatchPod -[#darkred,thickness=2]-> ClaudeAPI : "17c. 배치 AI 메시지 생성"
|
|
|
|
' === 보안 및 키 관리 (18-20) ===
|
|
GatewayPod -[#darkgray,thickness=1,dotted]-> KeyVault : "18a. Gateway 설정"
|
|
UserPod -[#darkgray,thickness=1,dotted]-> KeyVault : "18b. JWT Secret"
|
|
HealthPod -[#darkgray,thickness=1,dotted]-> KeyVault : "18c. DB 연결 정보"
|
|
IntellPod -[#darkgray,thickness=1,dotted]-> KeyVault : "18d. Claude API Key"
|
|
BatchPod -[#darkgray,thickness=1,dotted]-> KeyVault : "18e. 스케줄러 설정"
|
|
|
|
' === 모니터링 및 로깅 (19-20) ===
|
|
Monitoring -[#cyan,thickness=1,dashed]-> AppInsights : "19. 메트릭 수집"
|
|
Logging -[#cyan,thickness=1,dashed]-> AzureMonitor : "20. 로그 집계"
|
|
|
|
' === CI/CD 파이프라인 (21-25) ===
|
|
GitHub -[#teal,thickness=2]-> AzureDevOps : "21. 코드 푸시 트리거"
|
|
AzureDevOps -[#teal,thickness=2]-> ACR : "22. 컨테이너 빌드 & 푸시"
|
|
AzureDevOps -[#teal,thickness=2]-> GitHub : "23. 배포 YAML 업데이트"
|
|
GitHub -[#teal,thickness=2]-> aks : "24. GitOps 배포 동기화"
|
|
AzureDevOps -[#teal,thickness=2]-> AzureMonitor : "25. 배포 모니터링"
|
|
|
|
' === 백업 및 재해복구 (26-28) ===
|
|
PostgreSQL -[#purple,thickness=1,dashed]-> AzureBackup : "26. 데이터베이스 백업"
|
|
BlobStorage -[#purple,thickness=1,dashed]-> GeoStorage : "27. 파일 지역 복제"
|
|
aks -[#purple,thickness=1,dashed]-> SiteRecovery : "28. 클러스터 재해복구"
|
|
|
|
' === 주요 특징 및 처리 흐름 설명 ===
|
|
note top of FrontDoor
|
|
**글로벌 진입점**
|
|
• 전 세계 사용자 접근 최적화
|
|
• DDoS 보호 및 SSL 터미네이션
|
|
• 지연시간 최소화
|
|
end note
|
|
|
|
note top of AKS
|
|
**컨테이너 오케스트레이션**
|
|
• 마이크로서비스 자동 스케일링
|
|
• Service Mesh로 서비스 간 통신
|
|
• 무중단 배포 및 롤백
|
|
• 리소스 효율적 관리
|
|
end note
|
|
|
|
note top of PostgreSQL
|
|
**통합 데이터베이스**
|
|
• 단일 PostgreSQL로 모든 서비스 데이터 통합
|
|
• Flexible Server로 성능 최적화
|
|
• 자동 백업 및 포인트-인-타임 복구
|
|
• Read Replica로 읽기 성능 향상
|
|
end note
|
|
|
|
note top of Redis
|
|
**고성능 캐싱**
|
|
• Premium 티어로 99.9% 가용성
|
|
• 클러스터링으로 확장성 확보
|
|
• 영구 저장으로 데이터 보호
|
|
• 지역 복제로 재해 대비
|
|
end note
|
|
|
|
note top of ServiceBus
|
|
**신뢰성 있는 메시징**
|
|
• 이벤트 기반 아키텍처 구현
|
|
• 메시지 순서 보장
|
|
• Dead Letter Queue로 실패 처리
|
|
• Auto-scaling으로 부하 대응
|
|
end note
|
|
|
|
note top of KeyVault
|
|
**중앙 보안 관리**
|
|
• 모든 시크릿 중앙 관리
|
|
• 하드웨어 보안 모듈 (HSM)
|
|
• 액세스 정책 세밀 제어
|
|
• 감사 로그 자동 기록
|
|
end note
|
|
|
|
note bottom of AzureDevOps
|
|
**완전 자동화 CI/CD**
|
|
• 코드 커밋 → 자동 빌드
|
|
• 컨테이너 이미지 스캔
|
|
• 단계별 배포 승인
|
|
• Blue-Green 배포 지원
|
|
• 자동 롤백 기능
|
|
end note
|
|
|
|
note bottom of AzureMonitor
|
|
**통합 모니터링**
|
|
• 실시간 성능 메트릭
|
|
• 사용자 정의 대시보드
|
|
• 자동 알림 및 경고
|
|
• 로그 분석 및 검색
|
|
• 비용 최적화 인사이트
|
|
end note
|
|
|
|
note bottom of external
|
|
**외부 시스템 연동**
|
|
• Google OAuth: 안전한 사용자 인증
|
|
• Claude AI: 고품질 AI 분석
|
|
• 건강보험공단: 신뢰성 있는 건강 데이터
|
|
• Circuit Breaker 패턴으로 안정성 확보
|
|
end note |