13.9.1.2 평범한 Zenoh 클라이언트 연동을 위한 Subscriber Source 선언 규칙
파이프라인 안의 결괏값을 바깥세상으로 뽑아내는 Pub Gateway Sink(13.9.1.1장 참조)가 있다면, 그 반대의 문도 철저히 보장되어야 한다.
모터 온도 제어 파이프라인(Zenoh-Flow)이 돌아가고 있는데, 회사 본사의 관제탑에서 단순 파이썬(Zenoh Python API) 스크립트로 “긴급 냉각 밸브 개방(Cooling Valve Open)“이라는 평범한 JSON 메시지 한 줄을 파이프라인 속으로 찔러 넣고 싶을 때가 있다.
이때 본사의 파이썬 스크립트가 파이프라인의 C++ 메모리 규격(Zero-copy Data Capsule)을 알 필요 따윈 없다. 오직 파이프라인 관문(Source Node) 자체가 바깥세상의 평범한 Zenoh Publish 패킷을 낚아채어 파이프라인 내부 규격으로 번역(Trans-encoding)해 주는 구독자 관문(Subscriber Source)의 뼈대가 필요하다. 본 절에서는 폐쇄망의 우주로 범용 패킷을 강제 이식시키는 관문 흡수(Ingestion) 런북을 갈파한다.
1. 폐쇄망의 허점: 평등한 진입로(Entrypoint) 확장
보통 데이터플로우의 Source 라 하면, I2C 통신이나 커널 V4L2 명령으로 하드웨어 렌즈에 물리 전압을 가해 직접 데이터를 캐오는(Polling) 하드웨어 종속 클래스로 착각하기 쉽다.
하지만 아키텍트는 분산 통제망을 조립할 때, 파이프라인의 시작점을 하드웨어로 국한시키지 않는다.
파이프라인의 관문은 허공에 떠 있는 네트워크 토픽(Topic) 그 자체가 될 수 있다.
2. 매니페스트(YAML) 기반 Subscriber Source 락온(Lock-on)
파이프라인 설계도(YAML) 최상단 sources 구역에, 특별한 빌트인(Built-in) 플러그인을 선언하여 전 우주의 글로벌 Zenoh 라우팅 메쉬를 도청(Subscribe)하는 거대한 안테나를 세운다.
# [외부 Zenoh망 평범한 패킷을 파이프라인 안으로 끌고 들어오는 강제 흡수 런북]
sources:
- id: "Cloud_Command_Receiver"
uri: "file:///opt/zenoh_flow/builtin_sources/zenoh_sub_source.so"
configuration:
# 나(Pipeline Source)는 이제부터 전 세계를 휩쓰는 글로벌 라우터 망에서,
# 아래의 문패(Key Expr)를 달고 날아다니는 모든 평범한 패킷들을 강하게 빨아들이겠다!
key_expr: "factory/robotA/valve/command"
이 단 몇 줄의 YAML 선언으로, 데몬은 엣지 네트워크 구석에 웅크리고 앉아 전 세계에서 날아오는 Zenoh 멀티캐스트 네트워크 브로드캐스트들을 엿듣기 시작한다.
3. 포맷 변환과 파이프라인 주사(Injection)
수천 킬로미터 밖의 평범한 관제 파이썬 코드 하나가 아래와 같이 실행되었다 하자.
# [본사 웹 브라우저 백엔드의 멍청하고 평범한 1줄짜리 타격 코드]
zenoh.open().put("factory/robotA/valve/command", b"{'valve_open': true}")
이 평범한 바이트(JSON) 덩어리가 해저 케이블을 건너 로봇의 엣지 보드에 닿는 순간!
Cloud_Command_Receiver 관문 노드가 이를 악어처럼 낚아챈다.
이 관문 소스는 곧바로 내부에 탑재된 파이프라인 통치 프로토콜을 가동하여, 이 멍청한 바이트 스트링 바깥에 마이크로초 단위의 시계열 Event Time 을 억지로 각인시키고, 파이프라인 내부용 Zero-copy Pointer Lock 을 걸어서(Wraping) 고결하고 무거운 zflow::Data 캡슐로 탈바꿈시킨다.
탈바꿈이 끝난 캡슐은 즉각 파이프라인 다음 배관(쿨링팬 오퍼레이터) 큐에 밀어 넣어진다.
이 과정을 통해, 수만 대의 이기종 기기가 판치는 Zenoh 글로벌 네트워크 위의 모든 일반 애플리케이션들은, 상대방이 미치도록 무겁고 폐쇄적인 하드 리얼타임 데이터플로우 데몬 스케줄러를 돌리고 있다는 사실을 1도 눈치채지 못한 채 그냥 put(topic) 이란 범용 소켓 API 만으로 거대 톱니바퀴의 심장에 비즈니스 펄스를 무단 주입할 수 있게 되는 것이다.
이 극도의 포용성(Ingestion)이 백엔드 아키텍처가 지향하는 L7 완전 디커플링(Decoupling) 융합이다.