메시지 브로커 (WAMP)
WAMP 메시지 브로커는 IronFlock의 통신 백본입니다. 모든 컴포넌트 — 엣지 디바이스, 중앙 서비스, 가상 디바이스, AI 시스템, 웹 UI — 가 브로커에 연결하여 통신합니다.
WAMP를 선택한 이유
WAMP(Web Application Messaging Protocol)는 단일 프로토콜에서 두 가지 통신 패턴을 결합합니다:
- 게시/구독(pub/sub) — 디바이스가 센서 데이터를 토픽에 게시하면 대시보드, FleetDB 서비스, 알람 평가기가 구독하여 실시간으로 수신합니다
- 원격 프로시저 호출(RPC) — AI 서비스가 엣지 디바이스의 함수를 호출하고, 백엔드가 OTA 업데이트를 트리거하며, 운영자가 기계에 명령을 전송합니다
이 이중 패턴은 IronFlock이 실시간 데이터 스트리밍과 요청-응답 작업에 별도의 시스템이 필요하지 않음을 의미합니다. 하나의 프로토콜, 하나의 연결, 두 가지 패턴.
컴포넌트 연결 방식
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 엣지 │ │ 가상 │ │ 웹 UI │
│ 디바이스 │ │ 디바이스 │ │ (브라우저) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ WSS │ WSS │ WSS
└────────────────────┼────────────────────┘
│
┌───────┴───────┐
│ WAMP 브로커 │
└───────┬───────┘
│
┌────────────────────┼────────────────────┐
│ WSS │ WSS │ WSS
┌──────┴───────┐ ┌──────┴───────┐ ┌──────┴───────┐
│ 백엔드 │ │ FleetDB │ │ AI │
│ 서비스 │ │ 서비스 │ │ 서비스 │
└──────────────┘ └──────────────┘ └──────────────┘모든 연결은 WSS(WebSocket Secure) — TLS를 통한 암호화되고 지속적인 양방향 연결 — 을 사용합니다.
렐름을 통한 프로젝트 격리
브로커는 WAMP 렐름을 사용하여 프로젝트 간에 엄격한 격리를 적용합니다:
- 각 프로젝트-앱 조합은 자체 렐름 — 완전히 격리된 메시징 네임스페이스 — 을 보유합니다
- 한 렐름에서 게시된 메시지는 다른 모든 렐름에서 보이지 않습니다
- 프로젝트 A의 디바이스는 프로젝트 B의 디바이스를 보거나 상호 작용할 수 없습니다
- 두 개의 다른 프로젝트에 설치된 동일한 앱도 별도의 렐름에서 운영됩니다
인증
브로커에 대한 모든 연결은 인증이 필요합니다:
| 컴포넌트 | 인증 방법 |
|---|---|
| 엣지 디바이스 | 디바이스별 시크릿을 사용한 WAMP-CRA(챌린지-응답) |
| 백엔드 서비스 | 시스템 자격 증명을 사용한 WAMP-CRA |
| 웹 UI 클라이언트 | OIDC 기반 세션 토큰 |
| AI 서비스 | 범위가 지정된 접근을 가진 시스템 자격 증명 |
인증되지 않은 클라이언트는 렐름에 참여하거나, 토픽을 구독하거나, 프로시저를 호출할 수 없습니다.
실시간 데이터 흐름
센서 값이 디바이스에서 대시보드로 흐르는 방식:
- 디바이스 앱이 센서 값을 읽고 프로젝트 렐름의 WAMP 토픽에 게시합니다
- WAMP 브로커가 해당 렐름의 모든 구독자에게 메시지를 라우팅합니다
- FleetDB 서비스가 메시지를 받아 TimescaleDB에 기록하고 알람 규칙을 평가합니다
- 웹 UI가 동일한 메시지를 받아 대시보드 차트를 실시간으로 업데이트합니다
이 전체 흐름은 1초 미만의 지연 시간으로 발생합니다 — 대시보드는 데이터가 도착하는 만큼 빠르게 업데이트됩니다.
디바이스 제어를 위한 RPC
브로커는 엣지 디바이스의 직접 제어도 가능하게 합니다:
- 운영자가 웹 UI에서 “앱 재시작”을 클릭합니다
- 백엔드가 브로커를 통해 디바이스 에이전트에서 RPC를 호출합니다
- 디바이스 에이전트가 호출을 받아 컨테이너를 재시작하고 결과를 반환합니다
- 웹 UI가 확인 메시지를 표시합니다
동일한 메커니즘이 물리적 AI를 구동합니다 — AI 어시스턴트가 디바이스에서 함수를 호출할 때 브로커를 통한 RPC 호출입니다.
확장성
WAMP 브로커는 프로덕션 배포에서 클러스터로 운영됩니다:
- 여러 브로커 노드가 동시 연결을 처리합니다
- 부하가 노드 간에 분산됩니다
- 디바이스는 장애 시 자동 재연결을 통해 지속적인 연결을 유지합니다
- 브로커는 낮은 지연 시간으로 메시지를 전달하면서 수천 개의 동시 디바이스 연결을 처리합니다
온프레미스 배포
온프레미스 배포에서 WAMP 브로커는 다른 중앙 서비스와 함께 귀사의 인프라에서 실행됩니다. 프로토콜과 격리 보장은 동일하게 유지됩니다 — 유일한 차이점은 네트워크 경로(인터넷 대신 로컬)입니다.
자세한 내용은 온프레미스 배포를 참조하십시오.