14.1.1.1 파이프라인과 Zenoh 메인 프로토콜(Pub-Sub) 간의 다차원 관문(Gateway) 매핑

14.1.1.1 파이프라인과 Zenoh 메인 프로토콜(Pub-Sub) 간의 다차원 관문(Gateway) 매핑

Zenoh-Flow 파이프라인은 데이터가 흐르는 폐쇄적이고 완벽한 컨테이너(우주)다. 소스 노드에서 생성된 데이터가 큐(Queue)와 연산 오퍼레이터를 거쳐 싱크(Sink) 단에서 마무리되는 과정은 찰나의 지연도 허용치 않는 제로카피 무중단 배관으로 엮여 있다.
그러나 파이프라인 우주 안의 고립된 결괏값만으로는 전 지구적 로보틱스 생태계를 통치할 수 없다. 외부의 모니터링 콘솔(React Web), 레거시 MQTT IoT 센서, 혹은 ROS 2 내비게이션 노드들은 파이프라인의 닫힌 캡슐을 파싱할 수 없다. 둘 사이를 연결하기 위해서는 거대한 차원 연결선이 관통해야만 한다.

본 절에서는 갇혀있는 데이터플로우(Dataflow) 망의 포트 구멍과, 전 세계를 이분법으로 휩쓰는 거대한 메인스트림 Zenoh Pub/Sub 라우터 네트워킹망을 물리적으로 접합(Welding) 시키고 데이터를 다차원으로 뽑아(Gateway Mapping) 분출하는 거시적 공간 통제 런북을 갈파한다.

1. 캡슐화된 파이프라인(Dataflow) 권력과 개방의 부재

파이프라인 그래프 안에서 “Yolo_Filter” 노드가 “Detector_Sink” 로 영상 텐서를 던질 때, 데몬 내부에서는 zenoh_flow::Data 라는 특수한 래핑 바이너리(HLC 타임스탬프, 제로카피 포인터 등이 붙은 족쇄 캡슐)를 만들어 낸다. 일반 외부 애플리케이션 장치(Mobile 앱, Python 데이터 통계 서버 등)가 무턱대고 이 바이너리를 열어보려 하다간 쓰레기 역참조 문자에 얻어맞고 파싱 오류로 직행한다. 파이프라인은 1ms 단위를 다투는 극지방이기 때문에 철저히 자체 규격을 쓴다.

이 폐쇄된 권력 안에서 얻은 연산의 결론(예: “현재 사람 3명 탐지됨!”)을 일반 세상 사람들도 구독(Subscribe) 할 수 있는 평범한 문자열 알림으로 송출하려면, 매니페스트(YAML) 바깥쪽의 아키텍처 관문에 게이트웨이 싱크(Gateway Sink) 노드를 박아 뚫어주어야만 한다.

2. 매니페스트 관문(Gateway) 선언 및 논리 토폴로지 용접

Zenoh-Flow YAML 설계도면 최하단, sink 선언 구역은 이 우주와 물리계를 뚫는 차원의 문 역할을 부여받았다.

# [파이프라인 폐쇄망을 뚫고 나오는 Pub/Sub 게이트웨이 사출 런북]
sinks:
  - id: "PubSub_Gateway_Sink"
    uri: "file:///opt/zenoh_flow/builtin_sinks/zenoh_pub_sink.so" 
    # [핵심] 외부 범용 Zenoh 글로벌 라우터 토폴로지에 강제로 노출 시킨다!
    configuration:
      # 파이프라인 안에서의 텐서 데이터 결론이, 
      # 이 토픽(Key Expression) 문패를 달고 외부 세계망(Global WAN) 전체로 뿌려진다(Publish).
      key_expr: "factory/robotA/yolo/detection/result" 
      encoding: "application/json" # 외부의 평범한 앱들도 알 수 있게 텍스트 JSON 직렬화 강제!

이 매니페스트가 클러스터에 타격(Deploy) 되는 순간, 워커 데몬은 파이프라인의 종착지에서 날아오는 제로 카피 텐서(Zero-copy binary data capsule)들을 낚아챈 뒤, 무식하지만 친절하고 규격화된 JSON 스트링 바이트로 포맷 번역(Trans-encoding)을 시도한다.
그 후 번역된 데이터를 일반적인 Zenoh Pub 세션 프로토콜 객체에 실어 외부 물리망 멀티캐스트 네트워크 카드 레이어 단으로 거칠게 방사(Broadcast)해 버린다!

3. 구독(Subscribe) 감찰망의 역습과 결합 생태계 창조

이로 인해 “사람 3명” 이라는 로봇 파이프라인 내부의 연산 결과치는 파이프라인이라는 물리적 한계 철창을 벗어나 평범한 “Factory/robotA/yolo/… “ 란 글로벌 라우팅 메쉬 도메인 이름표(Topic)를 획득했다.

수만 킬로미터 밖의 회사 본사, 프론트엔드 React 개발자 PC나, 타 부서의 파이썬 알람 통제 서버는 Zenoh-Flow 데몬 매니페스트 따위를 1줄도 볼 필요가 없다. 단지 20라인짜리 구닥다리 Python Zenoh API 코드 한 방이면 족하다.

# [프론트엔드 관제 서버의 노멀(Normal) Zenoh 구독 런북]
import zenoh, json

# 1. 묵직한 워커 데몬 따위 필요 없다. 가벼운 범용 Zenoh 글로벌 세션 진입!
session = zenoh.open()

# 2. 로봇 파이프라인의 관문에서 쏟아지는 토픽을 평안하게 구독(Subscribe)한다.
def on_alert(sample):
    data = json.loads(sample.payload) 
    print(f"WEB ALARM Triggered: Detected {data['people_count']} persons.")

session.declare_subscriber("factory/robotA/yolo/detection/result", on_alert)

어플리케이션 개발자는 그것이 무려 1만 대의 클라우드 노드와 엣지 하드웨어가 꼬인 Directed Acyclic Graph (DAG) 의 최종 파이프라인 산출물이라는 거창한 시스템 위상(Architecture)을 인지할 필요가 박탈당한다. 단순히 단말 토픽 센서 하나에서 읽히는 친절한 로깅 문자열처럼 소비될 뿐이다.
파이프라인 안에서는 마이크로초 단위의 시계열 동기화, 제로카피 권력, 메모리 슬라이스가 난무하는 하드 리얼타임 이종 격투기를 치르면서도, 그 치열한 결과물만큼은 가장 범용성 높은 문맥의 L7 Liveliness Pub/Sub 스펙으로 번역하여 세상에 던져놓는(Off-loading) 배관 마감술(Gateway End). 데이터플로우 시스템 고립주의를 찢어발기는 가장 실용적이고 기만적인 대통합 생태계 아키텍처의 포문이 여기서 열린다.