graph TB %% 개발환경 네트워크 다이어그램 %% AI 기반 여행 일정 생성 서비스 - 개발환경 %% 외부 영역 subgraph Internet["🌐 인터넷"] Developer["👨‍💻 개발자"] QATester["🧪 QA팀"] end %% Azure 클라우드 영역 subgraph AzureCloud["☁️ Azure Cloud"] %% Virtual Network subgraph VNet["🏢 Virtual Network (VNet)
주소 공간: 10.0.0.0/16"] %% AKS 서브넷 subgraph AKSSubnet["🎯 AKS Subnet
10.0.1.0/24"] %% Kubernetes 클러스터 subgraph AKSCluster["⚙️ AKS Cluster"] %% Ingress Controller subgraph IngressController["🚪 NGINX Ingress Controller"] LoadBalancer["⚖️ LoadBalancer Service
(External IP)"] IngressPod["📦 Ingress Controller Pod"] end %% Application Tier subgraph AppTier["🚀 Application Tier"] UserService["👤 User Service
Pod"] TripService["🗺️ Trip Service
Pod"] AIService["🤖 AI Service
Pod"] LocationService["📍 Location Service
Pod"] end %% Database Tier subgraph DBTier["🗄️ Database Tier"] PostgreSQL["🐘 PostgreSQL
Pod"] PostgreSQLStorage["💾 hostPath Volume
(/data/postgresql)"] end %% Cache Tier subgraph CacheTier["⚡ Cache Tier"] Redis["🔴 Redis
Pod"] end %% Cluster Internal Services subgraph ClusterServices["🔗 ClusterIP Services"] UserServiceDNS["user-service:8080"] TripServiceDNS["trip-service:8080"] AIServiceDNS["ai-service:8080"] LocationServiceDNS["location-service:8080"] PostgreSQLDNS["postgresql:5432"] RedisDNS["redis:6379"] end end end %% Service Bus 서브넷 subgraph ServiceBusSubnet["📨 Service Bus Subnet
10.0.2.0/24"] ServiceBus["📮 Azure Service Bus
(Basic Tier)"] subgraph Queues["📬 Message Queues"] AIQueue["🤖 ai-schedule-generation"] LocationQueue["📍 location-search"] NotificationQueue["🔔 notification"] end end end end %% 네트워크 연결 관계 %% 외부에서 클러스터로의 접근 Developer -->|"HTTPS:443
(개발용 도메인)"| LoadBalancer QATester -->|"API 호출/테스트"| LoadBalancer %% Ingress Controller 내부 흐름 LoadBalancer -->|"트래픽 라우팅"| IngressPod %% Ingress에서 Application Services로 IngressPod -->|"/api/users/**"| UserServiceDNS IngressPod -->|"/api/trips/**"| TripServiceDNS IngressPod -->|"/api/ai/**"| AIServiceDNS IngressPod -->|"/api/locations/**"| LocationServiceDNS %% ClusterIP Services에서 실제 Pod로 UserServiceDNS -->|"내부 로드밸런싱"| UserService TripServiceDNS -->|"내부 로드밸런싱"| TripService AIServiceDNS -->|"내부 로드밸런싱"| AIService LocationServiceDNS -->|"내부 로드밸런싱"| LocationService %% Application Services에서 Database로 UserService -->|"DB 연결
TCP:5432"| PostgreSQLDNS TripService -->|"DB 연결
TCP:5432"| PostgreSQLDNS AIService -->|"DB 연결
TCP:5432"| PostgreSQLDNS LocationService -->|"DB 연결
TCP:5432"| PostgreSQLDNS %% Application Services에서 Cache로 UserService -->|"캐시 연결
TCP:6379"| RedisDNS TripService -->|"캐시 연결
TCP:6379"| RedisDNS AIService -->|"캐시 연결
TCP:6379"| RedisDNS LocationService -->|"캐시 연결
TCP:6379"| RedisDNS %% ClusterIP Services에서 실제 Pod로 (Database/Cache) PostgreSQLDNS -->|"DB 요청 처리"| PostgreSQL RedisDNS -->|"캐시 요청 처리"| Redis %% Storage 연결 PostgreSQL -->|"데이터 영속화"| PostgreSQLStorage %% Service Bus 연결 AIService -->|"비동기 메시징
HTTPS/AMQP"| ServiceBus LocationService -->|"비동기 메시징
HTTPS/AMQP"| ServiceBus TripService -->|"알림 메시징
HTTPS/AMQP"| ServiceBus ServiceBus --> AIQueue ServiceBus --> LocationQueue ServiceBus --> NotificationQueue %% 스타일 정의 classDef azureStyle fill:#0078D4,stroke:#fff,stroke-width:2px,color:#fff classDef k8sStyle fill:#326CE5,stroke:#fff,stroke-width:2px,color:#fff classDef appStyle fill:#28A745,stroke:#fff,stroke-width:2px,color:#fff classDef dbStyle fill:#DC3545,stroke:#fff,stroke-width:2px,color:#fff classDef cacheStyle fill:#FF6B35,stroke:#fff,stroke-width:2px,color:#fff classDef serviceStyle fill:#6610F2,stroke:#fff,stroke-width:2px,color:#fff classDef queueStyle fill:#FD7E14,stroke:#fff,stroke-width:2px,color:#fff %% 스타일 적용 class AzureCloud,VNet azureStyle class AKSCluster,AKSSubnet,IngressController k8sStyle class AppTier,UserService,TripService,AIService,LocationService appStyle class DBTier,PostgreSQL,PostgreSQLStorage dbStyle class CacheTier,Redis cacheStyle class ClusterServices,UserServiceDNS,TripServiceDNS,AIServiceDNS,LocationServiceDNS,PostgreSQLDNS,RedisDNS serviceStyle class ServiceBus,ServiceBusSubnet,Queues,AIQueue,LocationQueue,NotificationQueue queueStyle