1.6.1 리소스 표현과 계층적 키 경로(Key Path) 기반 라우팅
차세대 데이터 분산 네트워크(DDN, Data Distribution Network)가 성취해 낸 위대한 아키텍처적 도약은, 네트워크 파이프라인 상에 오고 가는 모든 정보를 맹목적인 바이트 덩어리(Byte Array Payload)에서 벗어나 분명한 의미 체계(Semantics)를 지닌 독립적 ’데이터 객체(Data Object)’로 격상시킨 것에 바탕을 둔다. 낡은 메시지 브로커(Message Broker)들이 단순히 편지 봉투에 적힌 수신자 큐(Queue)를 찾아 배달하는 멍청한 집배원에 불과했다면, 현대적 미들웨어는 데이터 자체에 유일 무이한 논리적 계층 구조의 이름표를 붙이고 이 ’명명된 데이터(Named Data)’를 중심으로 전 세계의 라우팅 정보 표지판을 재단장한다.
본 절에서는 IP 주소라는 물리적 장벽을 해체하고, 대신 인간이 직관적으로 이해할 수 있는 트리(Tree) 기반의 논리적 디렉토리 추상화 기법을 도입하여 글로벌 스케일망을 정복한 계층적 키 경로(Hierarchical Key Path) 기반 라우팅 철학을 해부한다.
1. RESTful 철학을 계승한 URI(Uniform Resource Identifier) 기반 글로벌 네임스페이스 매핑
초거대 스마트 팩토리나 커넥티드 카(Connected Car) 인프라는 쏟아지는 막대한 파트(Part) 구별과 수십만 종류의 센서 도메인이 복잡하게 얽힌 정보의 정글이다. 이 안에서 단순히 topic_A와 같이 평면적인(Flat) 문자열로 데이터를 발행(Publish)하는 과거의 방식은 데이터 카테고리의 붕괴와 심각한 충돌(Naming Collision)을 유발했다. 이를 막기 위해 어플리케이션 개발자들은 변수 명 안에 억지로 카테고리를 하드 코딩(Hard-coding)해 넣는 가독성 떨어지는 누더기 코드를 양산했다.
이러한 평면성의 족쇄를 찢기 위하여 Zenoh(제노) 설계 철학은 월드 와이드 웹(WWW)의 기반이자 개발자들에게 가장 친숙한 RESTful 서비스의 뼈대인 계층적 URI(Uniform Resource Identifier) 주소 스키마 구조를 데이터 미들웨어 네임스페이스(Namespace) 한가운데로 그대로 이식했다. 파일 시스템의 디렉터리 경로처럼 슬래시(/)를 기준으로 나뉘는 트리(Tree) 형태의 이 명명법은, 센서 데이터에 로케이션(국가/도시), 장비 군집(공장/섹터), 단말 식별자(로봇 1번), 속성(속도/온도)이라는 공간적이고 물리적인 인프라 분할 계층을 완벽히 투명하게 투영해 낸다.
예를 들어, 독일 뮌헨 공장에 배치된 조립 라인 로봇 2호기의 현재 관절 온도 데이터를 송출하고자 한다면 이 데이터 조각은 통신망 위에서 물리적인 서버 IP(192.168.1.10)가 아닌 um/munich/factory/assembly_robot2/joint/temperature라는 직관적인 절대 좌표 명판(Name Marker)을 부여받고 우아하게 전진한다. 데이터 그 자체에 계층적인 의미라는 불멸의 혼인 서명(Signature)을 박아줌으로써 전역망(Global Area Network) 상의 어떠한 충돌 딜레마도 극복하는 것이다.
2. 와일드카드(Wildcard) 패턴 매칭을 통한 다차원 동적 리소스 응집력 제어
계층적인 네임 루트 구조가 주는 두 번째 마법은 데이터를 단일 조각으로가 아닌, 논리적으로 군집화(Clustering)된 무한소 집합체 덩어리로 잘라내어 쿼리(Query)하거나 구독(Subscribe)할 수 있는 무소불위의 필터링 제어 권한을 제공한다는 점이다.
관제 클라우드의 수집 스케줄러가 오직 하나의 특정 기계 온도만 보는 것이 아니라, “뮌헨과 뉴욕 공장에 깔린 모든 타입의 로봇들의 센서 중, 관절(Joint)에 대한 현재 값을 즉각 취합해 올려라“라는 거시적 관점의 비즈니스 로직을 다루어야 한다고 상상해 보라. 평면적 방식(MQTT 등)에서는 각각의 수천 개 센서 토픽 이름을 루프로 일일이 구독 테이블에 올려야 하며(Subscription Storm), 이는 네트워크를 스니핑 쿼리로 박살낸다.
그러나 깊이(Depth)를 이해하는 계층적 키 경로 시스템은 um/*/factory/**/joint/*와 같이 Asterisk(* 및 **) 와일드카드 특수 규칙을 지원하여 단 하나의 포워딩 정규식 요청(Single Filter Subscription)만으로 이 거대한 정보 나뭇가지(Tree Branch)를 꺾어버린다. 단일 *는 해당 계층 하나의 문자열을 무정형 허용(Match Any in Scope)하고, 더블 **는 그 하위에 얽힌 수천 단계 서브 트리 목록 전부를 무차별 포용 지대로 지정(Match Recursive)한다. 미들웨어 라우팅 코어 엔진이 이 와일드카드 스트링 식별자의 논리를 네이티브 문법 구조에서 직접 해치워(Evaluation) 버리기에, 어플리케이션 계층단 코드 레벨에서 거론됐을 수많은 if-else 분기 처리가 단 세 바이트의 경로 지정 코드로 응집(Cohesion) 증발해버리는 프로그래밍적 희열을 선사한다.
3. 포워딩 엔진(FIB) 해시 효율 확장을 이끄는 라우팅 응축(Aggregation) 트릭
인프라스트럭처의 트래픽 라우터들은 물리적인 메모리 테이블을 보유하고 있으며 이 자원은 유한한 리소스 한계를 지니고 있다. 로봇 10만 대가 제각각 robot/00001/telemetry, robot/00002/telemetry … 형태로 각자의 10만 개 구독 테이블 레코드(Records)를 메모리 덩어리로 밀어 넣으면, 라우팅을 위한 포워딩 정보 베이스(FIB, Forwarding Information Base) 라인 대조 속도는 끔찍한 O(N) 테이블 스캔(Table Scan) 지연 오버헤드로 파멸을 맞는다.
계층적 구조가 위력을 발휘하는 진가는 여기서 빛을 뿜는다. 지능형 분산 포그(Fog) 라우터는 하위에 주렁주렁 매달린 로컬망 내의 개별적인 로봇 1만 개의 가지치기 구독 라인들을 상단 클라우드(Cloud Node)로 파이프스루(Pass-through)할 때, 그 개별 항목들을 액면가 1만 줄로 전송하지 않는다.
모든 라인이 um/korea/seoul/robot/**이라는 마스터 루트(Root) 트리의 한 갈래라는 사실을 인지하는 라우터 데몬(Daemon)은 이 1만 개의 트래픽 관심사를 즉각 가차 없이 하나로 압축 및 응축(Routing Aggregation)시켜버린다. 그리고는 상위 티어 게이트웨이를 향해 “단 하나, um/korea/seoul/robot/** 경로로 떨어지는 데이터가 오거든 통째로 나에게 넘겨라“라고 선언(Declare)하는 영리함을 발휘한다. 하위 말단이 수억 개로 비대해지더라도 백본 전역을 다루는 글로벌 FIB 라우팅 지도는 불과 수십 개의 거시적(Macro) 상위 루트 브랜치 맵만 O(1) 해시 테이블(Hash Table)에 매핑한 채 유지되므로, 네트워크 전역의 대역폭과 메모리를 지키면서도 패킷 포워딩 스피드를 극한으로 뽑아올리는 스케일 아웃(Scale-out) 병목 돌파의 궁극 해법이 작동하는 것이다.