# 디지털트윈 아키텍처 v4 ## 변경사항 (v3 → v4) | 구분 | v3 | v4 | | :--- | :--- | :--- | | OTA 업데이트 | 개념만 존재 | Fleet Manager + MQTT 구현 | | 디바이스 관리 | 없음 | Device Registry 추가 | | 상태 모니터링 | 없음 | Heartbeat + Metrics 추가 | | 원격 제어 | 없음 | MQTT 기반 명령 추가 | | Agent | 없음 | Fleet Agent 추가 | --- ## Mermaid 다이어그램 ```mermaid --- config: layout: dagre --- flowchart BT subgraph Global_Platform["☁️ Vexplor 글로벌 플랫폼"] direction TB AAS_Dashboard["💻 AAS 통합 대시보드
(React/Next.js)
• 중앙 모니터링
• Fleet 관리 UI"] Global_API["🌐 글로벌 API 게이트웨이
• 사용자 인증 (Auth)
• 고객사 라우팅
• Fleet API"] subgraph Fleet_System["🎛️ Fleet Management"] Fleet_Manager["📊 Fleet Manager
• Device Registry
• 배포 오케스트레이션
• 상태 모니터링"] MQTT_Broker["📡 MQTT Broker
(Mosquitto/EMQX)
• 실시간 통신
• 10,000+ 연결"] Monitoring["📈 Monitoring
(Prometheus/Grafana)
• 메트릭 수집
• 알림"] end Update_Server["🚀 배포/업데이트 매니저
• Docker 이미지 레지스트리 (Harbor)
• 버전 관리
• Canary 배포"] end subgraph Local_Server["스피폭스 사내 서버 (Local Server)"] Fleet_Agent_A["🤖 Fleet Agent
• MQTT 연결
• Heartbeat (30초)
• 원격 명령 실행
• Docker 관리"] VEX_Engine["VEX Flow 엔진
데이터 수집/처리"] Customer_DB[("사내 통합 DB
(모든 데이터 보유)")] Watchtower_A["🐋 Watchtower
이미지 자동 업데이트"] end subgraph Edge_Internals["🖥️ 엣지 디바이스 (Store & Forward)"] Edge_Collector["수집/가공
(Python)"] Edge_Buffer[("💾 로컬 버퍼
(TimescaleDB)
단절 시 임시 저장")] Edge_Sender["📤 전송 매니저
(Priority Queue)"] Edge_Retry_Queue[("🕒 재전송 큐
(SQLite/File)")] end subgraph Factory_A["🏭 스피폭스 공장 현장 (Factory Floor)"] Edge_Internals PLC_A["PLC / 센서"] end subgraph Customer_A["🏢 고객사 A: 스피폭스 (사내망)"] Local_Server Factory_A end subgraph Local_Server_B["고객사 B 사내 서버"] Fleet_Agent_B["🤖 Fleet Agent"] Watchtower_B["🐋 Watchtower"] end subgraph Customer_B["🏭 고객사 B (확장 예정)"] Local_Server_B end subgraph Local_Server_N["고객사 N 사내 서버"] Fleet_Agent_N["🤖 Fleet Agent"] end subgraph Customer_N["🏭 고객사 N (10,000개)"] Local_Server_N end %% 대시보드 연결 AAS_Dashboard <--> Global_API AAS_Dashboard <--> Fleet_Manager %% Fleet System 내부 연결 Fleet_Manager <--> MQTT_Broker Fleet_Manager <--> Monitoring Fleet_Manager <--> Update_Server %% 공장 내부 연결 PLC_A <--> Edge_Collector Edge_Collector --> Edge_Buffer Edge_Buffer --> Edge_Sender Edge_Sender -- ① 정상 전송 --> VEX_Engine Edge_Sender -- ② 전송 실패 시 --> Edge_Retry_Queue Edge_Retry_Queue -. ③ 네트워크 복구 시 재전송 .-> Edge_Sender VEX_Engine <--> Customer_DB %% Fleet Agent 연결 (MQTT - Outbound Only) Fleet_Agent_A == 📡 MQTT (Heartbeat/명령) ==> MQTT_Broker Fleet_Agent_B == 📡 MQTT ==> MQTT_Broker Fleet_Agent_N == 📡 MQTT ==> MQTT_Broker %% Agent ↔ 로컬 컴포넌트 Fleet_Agent_A <--> VEX_Engine Fleet_Agent_A <--> Watchtower_A Fleet_Agent_A <--> Customer_DB %% OTA 업데이트 (Pull 방식) Update_Server -. 이미지 배포 .-> Watchtower_A Update_Server -. 이미지 배포 .-> Watchtower_B Watchtower_A -. 컨테이너 업데이트 .-> VEX_Engine %% 엣지 업데이트 VEX_Engine -. 엣지 업데이트 .-> Edge_Collector %% 스타일 AAS_Dashboard:::user Global_API:::global Update_Server:::global Fleet_Manager:::fleet MQTT_Broker:::fleet Monitoring:::fleet VEX_Engine:::localServer Customer_DB:::localServer Fleet_Agent_A:::agent Fleet_Agent_B:::agent Fleet_Agent_N:::agent Watchtower_A:::agent Watchtower_B:::agent Edge_Collector:::edge Edge_Buffer:::edgedb Edge_Sender:::edge Edge_Retry_Queue:::fail PLC_A:::factory classDef factory fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef edge fill:#fff9c4,stroke:#fbc02d,stroke-width:2px classDef edgedb fill:#fff9c4,stroke:#fbc02d,stroke-width:2px,stroke-dasharray: 5 5 classDef localServer fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px classDef global fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef user fill:#ffebee,stroke:#c62828,stroke-width:2px classDef fleet fill:#e3f2fd,stroke:#1565c0,stroke-width:2px classDef agent fill:#fff3e0,stroke:#ef6c00,stroke-width:2px classDef fail fill:#ffebee,stroke:#c62828,stroke-width:2px,stroke-dasharray: 5 5 linkStyle 8 stroke:#2e7d32,stroke-width:2px,fill:none linkStyle 9 stroke:#c62828,stroke-width:2px,fill:none linkStyle 10 stroke:#fbc02d,stroke-width:2px,stroke-dasharray: 5 5,fill:none ``` --- ## 추가된 컴포넌트 설명 ### 1. Fleet Management (신규) | 컴포넌트 | 역할 | | :--- | :--- | | **Fleet Manager** | 10,000개 디바이스 등록/관리, 배포 오케스트레이션 | | **MQTT Broker** | 실시간 양방향 통신 (Outbound Only 유지) | | **Monitoring** | Prometheus + Grafana, 메트릭 수집 & 알림 | ### 2. Fleet Agent (각 공장 서버에 설치) | 기능 | 설명 | | :--- | :--- | | **MQTT 연결** | 글로벌 플랫폼과 상시 연결 (Outbound) | | **Heartbeat** | 30초마다 상태 보고 | | **원격 명령** | 업데이트, 재시작, 설정 변경 수신 | | **Docker 관리** | 컨테이너 상태 모니터링 & 제어 | ### 3. Watchtower (기존 유지) - Harbor에서 새 이미지 자동 Pull - Fleet Agent의 명령으로 즉시 업데이트 가능 --- ## 통신 흐름 비교 ### v3 (기존) ``` 보안 커넥터 ←→ 글로벌 API (양방향 터널) ``` ### v4 (신규) ``` Fleet Agent ──→ MQTT Broker (Outbound Only) ←── 명령 수신 (Subscribe) ──→ 상태 보고 (Publish) Watchtower ──→ Harbor (Pull Only) ``` **장점:** - 방화벽 Inbound 규칙 불필요 - 10,000개 동시 연결 가능 - 실시간 명령 전달 --- ## 데이터 흐름 ``` [공장 → 글로벌] PLC → 엣지 → VEX Flow → Fleet Agent → MQTT → Fleet Manager → Dashboard [글로벌 → 공장] Dashboard → Fleet Manager → MQTT → Fleet Agent → Docker/VEX Flow ```