27.5 프로세스 오버헤드 최적화를 위한 컴포넌트 통합 런타임 모델

과거 ROS1 시스템의 철학은 각각의 노드(Node)를 운영체제(OS) 수준에서 완전히 독립된 단일 프로세스(Process)로 컴파일하여 모듈성을 달성하는 것이었다. 그러나 이러한 구조는 카메라 영상, 라이다 포인트 클라우드(Point Cloud) 등 기가바이트(GB) 단위의 트래픽을 송수신해야 하는 현대 자율 드론 아키텍처에서 직렬화(Serialization)/역직렬화(Deserialization) 오버헤드와 잦은 OS 컨텍스트 스위칭(Context Switching) 코스트를 유발하는 치명적 한계를 드러냈다. 이를 극복하기 위해 ROS2는 동적 링킹(Dynamic Linking) 기반의 컴포넌트(Component) 모델을 도입하여, 격리된 모듈들을 단일 메모리 공간으로 통합하는 획기적인 런타임 아키텍처를 제시한다.

0.1 단일 프로세스 내 동적 라이브러리 조합(Composition)

ROS2 프레임워크 산하의 rclcpp_components 패키지는 개발자가 작성한 노드 클래스를 독립 실행형 바이너리 파일(Executable)이 아닌 동적 공유 라이브러리(Shared Library, .so 파일) 형태로 빌드하도록 유도한다. 이렇게 빌드된 다수의 컴포넌트들은 런타임에 ComponentManager라는 하나의 거대한 컨테이너(Container) 프로세스 주소 공간 내부로 동적으로 로드(Load)된다.
예를 들어 이미지 왜곡 보정 노드, 객체 탐지 노드, 궤적 생성 노드를 각각의 프로세스로 실행하는 대신, 하나의 컨테이너 프로세스 안에 이 세 개의 컴포넌트를 동시에 인스턴스화하여 하나의 이그제큐터(Executor) 또는 공유 스레드 풀에 바인딩할 수 있다. 이 방식은 모듈화(Modularity)라는 소프트웨어 공학적 이점을 유지하면서도, 논리적 노드들이 동일한 힙(Heap) 메모리를 공유하게 함으로써 물리적인 프로세스 수를 급격히 감축시킨다.

0.2 포인터 소유권 이전 기반의 프로세스 내 통신 (Intra-process Communication)

컴포넌트 통합 런타임 모델이 창출하는 가장 압도적인 학술적 성과는 초저지연(Ultra-low Latency) 시스템을 위한 프로세스 내 통신(IPC, Intra-process Communication)의 진정한 실현이다. 동일한 프로세스 컨테이너 안방에 위치한 퍼블리셔(Publisher)와 서브스크라이버(Subscriber)가 데이터를 교환할 때, ROS2 미들웨어 계층(RMW)은 데이터가 굳이 네트워크 계층을 타고 로컬 루프백(Loopback)으로 전송될 필요가 없음을 감지한다.
IPC가 활성화되면 송신 노드는 전달할 메시지를 std::unique_ptr과 같은 스마트 포인터 형식으로 메모리에 단 한 번만 생성한다. 이후 데이터의 심층 복사(Deep Copy)나 바이트 스트림 변환 없이 포인터의 소유권(Ownership) 자체를 수신 노드의 콜백 함수로 직접 이동(Move Semantics)시킨다. 이는 통신 지연에 수반되는 오버헤드를 O(1)의 상수 시간 메모리 레퍼런스 비용으로 수렴시키는 제로 카피(Zero-copy) 아키텍처이며, 초당 수백 번 연산되는 드론의 내부 제어 루프에서 치명적 레이턴시를 억제하는 유일한 해법이다.

0.3 결합도 통제와 런타임 유연성(Flexibility)의 분리

컴포넌트 런타임 모델의 또 다른 공학적 철학은 배포 환경과 실행 환경의 철저한 분리(Decoupling)에 있다. 소스 코드 레벨에서는 여전히 개별 노드들이 RMW의 토픽 채널이라는 명시적 프로토콜 체계를 신뢰하고 설계되기 때문에 모듈 간의 강한 결합(Tight Coupling)이 원천 배제된다. 코드를 한 줄도 수정하지 않고도 시스템 관리자는 런치(Launch) 환경 설정 파일만을 수정하여 특정 컴포넌트를 별개의 컨테이너 프로세스로 떼어내거나 하나로 합칠 수 있다.
비행 중 한 컴포넌트에서 심각한 메모리 오류가 발생했을 때 전체 프로세스 컨테이너가 죽는 페이탈 에러(Fatal Error)를 방지하기 위해 핵심 제어 노드를 독립 분리 시키고, 데이터 지연이 중요한 센서 병합단은 단일 프로세스로 압축하는 파악적인 동적 클러스터링(Dynamic Clustering) 구성 능력. 이것이 바로 ROS2 초기화 루틴 레벨에서 컴포넌트 통합 모델이 지니는 궁극적인 학제적 목표이다.