## 0.1 rclcpp 네이티브 컴파일 환경과 rclpy 인터프리터 환경 간 실행 컨텍스트 차이점
ROS2의 클라이언트 라이브러리는 구동되는 언어의 기저 런타임 특성에 따라 실행 컨텍스트(Execution Context) 생성과 동시성(Concurrency) 제어 방식에서 본질적인 구조적 차이를 나타낸다. 시스템 자원의 한계가 뚜렷한 자율 비행 드론과 같은 로보틱스 플랫폼에서 애플리케이션의 물리적 구동 환경을 이해하는 것은 퍼포먼스 튜닝방벽을 극복하는 필수적인 학술적 전제이다. 가장 대표적인 프론트엔드 환경인 rclcpp(C++)와 rclpy(Python)는 각각 네이티브 컴파일 환경과 인터프리터 환경을 기반으로 하며, 다음과 같은 핵심적 차이를 내포한다.
0.1.1 네이티브 바이너리의 메모리 공간과 스레딩 (rclcpp)
rclcpp 모델은 사전(Ahead-Of-Time, AOT) 컴파일 방식에 의해 타겟 아키텍처(예: x86_64, ARM64)에 종속적인 기계어 バイ너리로 변환된다. 따라서 rclcpp 노드의 실행 컨텍스트는 운영체제(OS)가 프로세스에게 할당하는 순수 메모리 공간(Text, Data, Heap, Stack 영역)과 직접 대응된다.
스레딩 측면에서 rclcpp 이그제큐터(Executor)는 완전한 병렬성(Parallelism)을 발휘할 수 있다. 다중 스레드 이그제큐터(Multi-threaded Executor)를 사용할 경우, C++ 표준 라이브러리의 std::thread 혹은 pthread를 통해 운영체제의 커널 스레드(Kernel Thread)와 1:1 매핑되어 실행된다. 이는 센서 데이터 융합(Sensor Fusion)이나 행렬 연산과 같이 연산 집약적(CPU-bound)인 콜백 함수 연산을 물리적 다중 코어에서 동시에 처리할 수 있음을 의미하며, 연산 지연 없는 하드웨어 실시간성(Real-time Constraints) 준수에 유리하다.
0.1.2 Python C-API와 전역 인터프리터 잠금 (rclpy)
반면 rclpy는 CPython 인터프리터라는 가상 머신(Virtual Machine) 위에서 구동되는 실행 컨텍스트를 지닌다. rclpy 노드가 퍼블리싱이나 서브스크립션을 수행할 때, 실제 네이티브 동작은 C언어로 구현된 RCL(ROS Client Library)로 전달되어야 하므로 ctypes 또는 Python C-API 확장을 통한 FFI(Foreign Function Interface) 경계 교차(Boundary Crossing) 오버헤드가 필수적으로 발생한다. 메모리상의 객체 역시 Python 고유 객체에서 C 구조체로, C 구조체에서 Python 고유 객체로 빈번하게 역/직렬화(Serialization/Deserialization)되어야 한다.
가장 치명적인 구조적 차이는 동시성 처리 한계에 있다. CPython 런타임에는 하나의 가상 머신 내에서 단 하나의 스레드만이 Python 바이트코드를 실행할 수 있도록 통제하는 전역 인터프리터 잠금(GIL, Global Interpreter Lock)이 존재한다. 이로 인해 rclpy에서 MultiThreadedExecutor를 사용하더라도 네트워크 IO와 같은 입출력 한정(I/O-bound) 작업에 대해서는 동시성(Concurrency) 이점을 누릴 수 있으나, 단일 프로세스 내에서는 CPU 연산의 진정한 병렬(Parallel) 처리가 불가능하다.
0.1.3 통신 최적화와 메모리 공용화 패러다임의 제한
실행 컨텍스트의 차이는 프로세스 오버헤드 최적화 기술의 적용 범위에도 영향을 미친다. rclcpp는 프로세스 내 통신(Intra-process Communication)을 활성화할 경우 메모리의 소유권 개념(예: std::unique_ptr)을 활용하여 데이터의 복사 없이 포인터 전달만으로 퍼블리셔와 서브스크라이버 간의 무비용(Zero-copy) 데이터 송수신을 구현할 수 있다. 반면 rclpy 환경 내에서는 Python 메모리 관리 구조(Reference Counting 및 Garbage Collection)와 엄격한 GIL 정책으로 인해 완벽한 무비용 IPC(Inter-Process Communication)나 컴포넌트 단위의 메모리 융합을 구현하는 데 극복해야 할 학술적 한계점이 존재한다. 따라서 rclpy는 시스템 생태계의 고수준 정책(Policy) 결정 알고리즘이나 오프라인 학습에 주로 배치되고, 제어 주기가 민감한 위치 제어 루프나 데이터 파이프라인에는 rclcpp를 배치하는 혼합 아키텍처가 널리 채택된다.