ERP-node/digitalTwin/architecture-v4.md

6.9 KiB

디지털트윈 아키텍처 v4

변경사항 (v3 → v4)

구분 v3 v4
OTA 업데이트 개념만 존재 Fleet Manager + MQTT 구현
디바이스 관리 없음 Device Registry 추가
상태 모니터링 없음 Heartbeat + Metrics 추가
원격 제어 없음 MQTT 기반 명령 추가
Agent 없음 Fleet Agent 추가

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