27.1 ROS2 클라이언트 라이브러리 계층화 아키텍처

ROS2 (Robot Operating System 2)의 시스템 구조는 분산 컴퓨팅 및 통신 미들웨어를 효율적으로 추상화하여 제공하기 위해 명확한 계층화 아키텍처(Layered Architecture)를 채택한다. 이는 운영체제(OS), 벤더 특화 네트워크 미들웨어, 다수의 프로그래밍 언어 인터페이스가 혼재된 복잡한 시스템 내에서 일관된 런타임 동작 환경을 보장하기 위한 필수적인 설계 원칙에 기반한다. 클라이언트 라이브러리의 계층 구조는 크게 하부 네트워크 및 통신 미들웨어를 추상화하는 계층, C 언어 기반의 공통 런타임 인터페이스 계층, 그리고 최상위 사용자 공간의 언어별 바인딩 계층으로 구분된다.

0.1 프론트엔드 언어 바인딩 (Language-Specific Client Libraries)

최상위 계층은 개별 프로그래밍 언어의 고유한 문법적 특성과 객체 지향 패러다임에 최적화된 프론트엔드 클라이언트 라이브러리(Client Libraries)로 구성된다. 공식적으로 지원되는 대표적인 라이브러리는 C++ 기반의 rclcpp와 Python 기반의 rclpy이다. 해당 계층은 개발자가 노드(Node) 객체 생성, 퍼블리셔(Publisher)와 서브스크라이버(Subscriber) 정의, 서비스(Service) 및 액션(Action) 모듈 구현을 직관적으로 수행할 수 있도록 고수준의 언어 종속적 API(Application Programming Interface)를 제공한다. 예를 들어, rclcpp는 현대 C++ 표준의 템플릿(Template), 스마트 포인터(Smart Pointer), 그리고 동시성 프로그래밍 패턴을 활용하여 자료 구조의 무결성과 메모리 안전성을 관리한다. 반면 rclpy는 Python 환경에서 GIL(Global Interpreter Lock)을 고려한 동시성 모델을 채택하여 애플리케이션 레벨의 유연성을 제공한다.

0.2 ROS 클라이언트 공통 런타임 (RCL, ROS Client Library)

언어 종속적 인터페이스의 하단에는 모든 상위 계층 라이브러리가 공유하는 필수 공통 로직 모듈인 RCL(ROS Client Library) 계층이 존재한다. 순수 C 언어로 구현된 RCL은 특정 상위 언어에 종속되지 않는 런타임 기능 집합을 제공한다. 글로벌 파라미터 관리 체계, 노드의 라이프사이클 전역 제어 인터페이스, 시간 인지(Time Abstraction) 메커니즘, 실행 루프 관리자, 그리고 이벤트 기반 콜백 큐잉(Callback Queuing) 컨트롤러와 같은 핵심 기능이 단일 코드 베이스로 통합 구현되어 있다. RCL 계층은 개별 언어별 클라이언트 라이브러리를 개발할 때 발생할 수 있는 코드 중복을 억제하고 상호 호환성과 동작의 일관성을 확보하는 중추적 역할을 담당한다. 새로운 언어(예: Rust, Java) 환경의 클라이언트 라이브러리가 추가되더라도, 이들은 모두 단일 RCL C 인터페이스(C-API)를 호출하여 동작하게 되므로 구조적 안정성을 공유한다.

0.3 미들웨어 추상화 인터페이스 (RMW, ROS Middleware)

RCL 계층 아래에는 네트워크 기저 계층의 다양성을 흡수하고 통합하기 위한 RMW(ROS Middleware) 인터페이스 체계가 위치한다. RMW 계층은 DDS(Data Distribution Service)나 RTPS(Real-Time Publish-Subscribe) 프로토콜을 수행하는 다양한 하부 통신 구현체들과 상위 RCL 시스템을 이어주는 표준 추상화 브리지이다. 이 설계 덕분에 ROS2 구조는 특정 미들웨어 벤더(예: eProsima Fast DDS, RTI Connext DDS, Eclipse Cyclone DDS 등)의 구현에 강하게 결합되지 않는다. 시스템 운영자는 컴파일 타임 혹은 실행 환경 설정(환경 변수) 수준에서 백엔드 네트워크 모듈을 동적으로 스왑(Swap)할 수 있다. RMW는 다형성을 제공하기 위해 다수의 하위 구현 패키지들을 선택적으로 로드하도록 규격화된 헤더 파일 집합으로 관리되며, 응용 소프트웨어 계층의 코드를 수정하지 않고도 통신 프로토콜 백엔드를 변경할 수 있는 유연성을 제공한다.

0.4 계층 간 데이터 직렬화 및 제어 흐름 동역학

상위 계층 애플리케이션에서 메시지를 발행(Publish)하는 경우, 제어 프로세스와 데이터 처리 흐름은 하향식으로 전개된다. rclcpprclpy 계층에서 언어 고유 의 객체 상태로 저장된 메시지는, RCL 계층으로 전달되면서 공용 메시징 C 메모리 구조체 규약으로의 딥 카피 혹은 참조 직렬화 절차를 겪게 된다. 그 직후 RMW 인터페이스 계층을 통과하여 특정 벤더가 요구하는 직렬화 포맷(예: CDR 포맷)에 맞추어 변조되고 하부 네트워크 하드웨어를 향해 송출된다. 역방향의 데이터 수신 스트림 역시 동일 계층을 거슬러 오르며 언어 의존적 객체로 복원된다. 이 강력한 계층화 시스템을 통해 기능 요구와 비기능 성능 요구 사이의 복잡도를 분리 제어할 수 있다.