ERP-node/digitalTwin/architecture-v4.md

210 lines
6.9 KiB
Markdown

# 디지털트윈 아키텍처 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["<b>💻 AAS 통합 대시보드</b><br>(React/Next.js)<br>• 중앙 모니터링<br>• Fleet 관리 UI"]
Global_API["<b>🌐 글로벌 API 게이트웨이</b><br>• 사용자 인증 (Auth)<br>• 고객사 라우팅<br>• Fleet API"]
subgraph Fleet_System["🎛️ Fleet Management"]
Fleet_Manager["<b>📊 Fleet Manager</b><br>• Device Registry<br>• 배포 오케스트레이션<br>• 상태 모니터링"]
MQTT_Broker["<b>📡 MQTT Broker</b><br>(Mosquitto/EMQX)<br>• 실시간 통신<br>• 10,000+ 연결"]
Monitoring["<b>📈 Monitoring</b><br>(Prometheus/Grafana)<br>• 메트릭 수집<br>• 알림"]
end
Update_Server["<b>🚀 배포/업데이트 매니저</b><br>• Docker 이미지 레지스트리 (Harbor)<br>• 버전 관리<br>• Canary 배포"]
end
subgraph Local_Server["스피폭스 사내 서버 (Local Server)"]
Fleet_Agent_A["<b>🤖 Fleet Agent</b><br>• MQTT 연결<br>• Heartbeat (30초)<br>• 원격 명령 실행<br>• Docker 관리"]
VEX_Engine["<b>VEX Flow 엔진</b><br>데이터 수집/처리"]
Customer_DB[("<b>사내 통합 DB</b><br>(모든 데이터 보유)")]
Watchtower_A["<b>🐋 Watchtower</b><br>이미지 자동 업데이트"]
end
subgraph Edge_Internals["🖥️ 엣지 디바이스 (Store & Forward)"]
Edge_Collector["<b>수집/가공</b><br>(Python)"]
Edge_Buffer[("<b>💾 로컬 버퍼</b><br>(TimescaleDB)<br>단절 시 임시 저장")]
Edge_Sender["<b>📤 전송 매니저</b><br>(Priority Queue)"]
Edge_Retry_Queue[("<b>🕒 재전송 큐</b><br>(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["<b>🤖 Fleet Agent</b>"]
Watchtower_B["<b>🐋 Watchtower</b>"]
end
subgraph Customer_B["🏭 고객사 B (확장 예정)"]
Local_Server_B
end
subgraph Local_Server_N["고객사 N 사내 서버"]
Fleet_Agent_N["<b>🤖 Fleet Agent</b>"]
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
```