23.2.3 글로벌 패키지 명명 규칙 및 네임스페이스 격리 표준 규격

ROS2는 단일 로컬 환경을 넘어 수많은 벤더와 오픈소스 커뮤니티가 코드를 교류하고 재사용하는 거대한 글로벌 메타 운영체제(Meta Operating System)를 지향한다. 이러한 분산 환경에서 개별적으로 개발된 수천 개의 소프트웨어 모듈이 하나의 워크스페이스나 시스템 상에 융합될 때 가시성이 확보되지 않으면 심각한 이름 충돌(Name Collision) 결함이 발생할 수 있다. 이에 ROS2는 자원 병합 시의 런타임 및 컴파일 타임 오류를 방지하기 위하여 매우 엄격한 패키지 명명 규칙(Naming Convention)과 네임스페이스 격리(Namespace Isolation) 표준 규격을 강제한다.

1. Ament 패키지 명명 표준 컨벤션

ROS2 Ament 빌드 시스템에 편입되기 위해서는 대상 소프트웨어가 ROS 향상 제안(ROS Enhancement Proposal, REP)에서 정의한 명명 규칙 식별자 기준을 반드시 충족해야 한다. ros2 pkg create 명령어는 실행 즉시 입력받은 문자열을 정규 표현식으로 검사하여 다음의 표준 명명 규격 이탈 여부를 사전에 판별한다.

  1. 어휘 세트 공간(Lexical Set): 오직 소문자 알파벳(a-z), 숫자(0-9), 그리고 단일 언더스코어(_)만을 허용한다. 대문자나 하이픈(-), 기타 특수 기호는 파일 시스템 플랫폼(Windows, Linux, macOS) 간의 대소문자 구분 정책 차이로 인한 포팅 문제를 유발하므로 원천적으로 배제된다.
  2. 선두 문자 제한(Starting Character): 숫자로 시작하는 식별자는 C/C++ 및 Python 언어 생태계에서 유효한 변수명이나 모듈명으로 인정되지 않으므로, 패키지 이름은 반드시 영문 소문자 알파벳으로 시작해야 한다.
  3. 연속된 조합 금지(Consecutive Sequence): 언더스코어가 두 개 이상 연속으로 배치되는 것(__)은 허용되지 않는다. 이는 C++ 컴파일러 구현체가 내부 매크로나 예약어 처리를 위해 이중 언더스코어를 취급하는 규약과 충돌할 여지를 사전 차단하기 위함이다.

2. 언어 생태계별 네임스페이스 격리 동역학

의미론적으로 올바른 네이밍을 수행했음에도 불구하고, 실제 소스 코드가 결합하는 링커(Linker) 단계나 스크립트 런타임 시에 중복 현상이 발생하는 것을 막기 위해 철저한 논리적, 물리적 디렉터리 격리가 동반된다.

2.1 C++ 환경의 글로벌 헤더 오염 방지 (ament_cmake)

ament_cmake를 기반으로 빌드되는 C++ 패키지는 공개 헤더(Public header) 폴더 구조에서 네임스페이스 오염 방지 표준을 준수해야 한다.
동일한 워크스페이스 내 다수의 패키지가 util.hpptypes.h와 같은 보편적인 이름의 헤더를 가질 경우, 전역 인클루드 경로(Global include path)가 뒤섞여 콜리전이 발생한다. 이를 위해 Ament는 include/ 디렉터리 내부에 반드시 패키지 이름과 동일한 중간 디렉터리(include/<package_name>/)를 삽입하여 소스를 구성하도록 강제한다.
따라서 다른 노드에서 해당 헤더를 참조할 때는 #include "my_package/util.hpp" 형태로 선언되어 헤더 출처의 네임스페이스가 문법적으로 명확하게 종속된다.

2.2 Python 모듈의 글로벌 인터프리터 보호 (ament_python)

Python 인터프리터는 시스템 환경 변수(PYTHONPATH) 시스템을 통해 모듈을 탐색한다. 만약 패키지 내부의 파이썬 파일들이 루트 위치에 노출될 경우 전역 파이썬 시스템 패키지들이나 타 ROS2 패키지와 이름 공간을 공유하게 되어 섀도잉(Shadowing) 버그를 유발한다.
이러한 현상을 차단하기 위해 ament_python은 패키지 루트 위치에서 src/와 같은 일반적인 명칭 대신 패키지 이름 자체를 디렉터리로 사용하는 모듈 래퍼 구성을 취한다. 예를 들어 my_python_pkg라는 패키지는 그 자체가 모듈이 되는 형식을 따르며, 이는 from my_python_pkg.module import function 방식의 안전한 동적 바인딩 모델로서 Python 시스템 전반의 격리성을 완벽하게 보장한다.