13.4.1.1 선언적 디스크립터(Declarative Descriptor) 기반 Dataflow 그래프 지배 구조
수십 개의 레이저 스캐너, 수백 대의 자율 주행 모터, 그리고 클라우드의 AI 추론 서브 노드들. 이 파편화되고 분산된 로보틱스 서비스들을 하나의 생명체처럼 엮어내어 연산(Compute) 파이프라인을 구축하는 일은, 하드코딩된 C++ 콜백 스파게티 코드로는 결코 제어할 수 없는 난해함의 극치다.
Zenoh-Flow 의 아키텍처는 이 지옥 같은 분산 토폴로지(Topology)를 제압하기 위해 코딩을 배제하고 선언적 디스크립터(Declarative Descriptor, 통상 YAML 문법 지향) 기반의 인프라 매니페스트(Manifest) 철학을 전위로 내세운다. 본 절에서는 오퍼레이터의 복잡한 연결망을 소스 코드가 아닌 단 한 장의 지배 서류(Descriptor)로 통합 통치하는 아키텍처 설계와 전개 런북을 설파한다.
1. 코드(Code) 기반 연결의 파탄과 선언적 직조(Declarative Weaving)
기존 ROS2 프로그래밍에서는 노드 A의 퍼블리셔를 만들고 똑같은 문자열 토픽으로 노드 B의 서브스크라이버를 일일이 하드코딩(Hardcoding)하여 엮어냈다.
이러한 암묵적 파이프라인 조립은 시스템이 거대해질수록 아키텍트가 전체 위상(Topology)의 흐름을 한눈에 볼 수 없게 만드는 “장님 코끼리 만지기” 식 파탄을 불러온다. 노드 하나를 다른 서버로 옮기거나 연결 순서를 뒤바꾸려면 재컴파일(Re-compile)의 고통이 수반된다.
반면 Zenoh-Flow는 노드 로직의 구현과, 그 노드들을 연결하는 배관 조립(Pipeline Wiring)을 완전히 절단(Decoupling)시켜 버린다.
개발자는 그저 입력 데이터를 받아 출력만 내뱉는 바보 연산 블록(Operator Block)들만 개별 바이너리 플러그인(.so 파일)으로 던져놓는다. 그리고 이들을 어떤 순서로, 어디로 흐르게 할 것인가에 대한 우주적 위상(Topology)은 오직 yaml 매니페스트 서류 단 한 장에 선언적(Declarative)으로 집필하여 런타임에 주입(Injection)한다.
2. Dataflow 그래프 매니페스트 선언 문법
Zenoh-Flow 데몬은 매니페스트(YAML)를 읽어 들이는 순간, 허공에 둥둥 떠 있던 연산 블록들을 갈고리로 찍어 하나의 거대한 방향성 비순환 그래프(DAG, Directed Acyclic Graph) 파이프라인으로 용접시켜버린다.
# [Zenoh-Flow 파이프라인 지배 디스크립터 런북 예시]
name: Autonomous_Vision_Pipeline
# 1. 엣지 하드웨어의 센서 입구 선언 (Sources)
sources:
- id: lidar_scanner
uri: "file:///opt/zenoh-flow/nodes/lidar_source.so"
# 2. 핵심 연산 블록 선언 (Operators)
operators:
- id: pointcloud_filter
uri: "file:///opt/zenoh-flow/nodes/filter_op.so"
- id: yolo_inference
uri: "wasm:///opt/zenoh-flow/nodes/yolo.wasm" # Wasm 바이너리마저 품어버리는 포용력
# 3. 데이터가 흘러 들어가 못 박힐 최후 종착지 (Sinks)
sinks:
- id: cloud_db_sink
uri: "file:///opt/zenoh-flow/nodes/influx_sink.so"
# 4. 대혈관 연결(Links): 노드 간의 바이트 흐름을 물리적으로 용접
links:
- from: lidar_scanner
to: pointcloud_filter
- from: pointcloud_filter
to: yolo_inference
# yolo 결과물을 클라우드로 밀어 넣는 최후의 강제 배관
- from: yolo_inference
to: cloud_db_sink
이 매니페스트 한 장은 스파게티 랩코드 몇천 줄을 학살한다. 코드 수정 1바이트 없이도, 이 YAML 파일 안의 links 를 수정하는 것만으로 Yolo 노드를 빼버리거나 필터의 순서를 뒤바꾸는 파이프라인 해부 및 재조립이 초 단위로 즉결(Instant) 실행된다.
3. 분산 런타임의 동적 매핑(Dynamic Mapping)과 전 지구적 배포
이 선언적 그래프 디스크립터의 극강의 사기성(Over-powered)은 단일 컴퓨터를 벗어나 전 지구적 멀티 라우터 생태계로 확장될 때 비로소 그 본성을 드러낸다.
아키텍트가 작성한 저 Autonomous_Vision_Pipeline 그래프 선언문을 중앙 메인 Zenoh-Flow 데몬에 밀어 넣으면, 메인 데몬은 매니페스트에 선언된 sources와 operators를 자신이 혼자 다 돌리지 않는다.
놀랍게도 데몬은 글로벌 Zenoh 네트워크에 붙어있는 전 세계의 다른 빈둥거리는 Worker 데몬들의 리소스(CPU, 메모리 상태)를 정찰한 뒤, Yolo 오퍼레이터 덩어리는 GPU가 달린 ’3번 공장 로봇’으로 텔레포트시켜 띄워버리고, 무거운 cloud_db_sink는 AWS의 ’EC2 엣지 워커’로 원격 배포하여 가동해 버린다.
즉 프로그래머는 하나의 로컬 프로그램 연결도를 그리듯 YAML을 그렸을 뿐인데, 런타임 엔진이 그 도형 조각들을 물리 네트워크에 퍼트려 광역(WAN) 분산 아키텍처를 자동 렌더링(Auto-rendering)하는 기적을 시전하는 것이다. 선언적 디스크립터(Declarative Descriptor) 룰은 곧 인프라 그 자체(Infrastructure as Code)이자 거대 연산 자원을 쥐락펴락하는 무소불위의 권력이다.