31.2 ROS2 토픽, 서비스, 액션 파일 포맷 구문 분석 및 데이터 구조 모델링
ROS2 미들웨어는 노드 간의 정보 교환 패턴을 크게 연속 스트리밍(Topic), 동기적 질의응답(Service), 비동기적 장기 실행(Action)의 세 가지 디자인 패러다임으로 추상화한다. 개발자는 각 패러다임의 특성에 부합하는 네트워크 페이로드를 조형하기 위해, 서로 다른 시퀀스 분할 규칙을 가진 전용 IDL 파일 포맷(.msg, .srv, .action)을 작성해야 한다. 본 절에서는 이 세 가지 인터페이스 규격의 구문적(Syntactic) 특성을 해부하고, 각각의 포맷이 어떠한 제어 공학적 지향점을 내재하고 있는지 데이터 구조 모델링 관점에서 분석한다.
1. 메시지 포맷(.msg)과 단일 상태 벡터(State Vector) 지향성
가장 직관적인 데이터 규약인 메시지(.msg) 파일은 토픽(Topic) 퍼블리셔와 서브스크라이버 간의 단방향 브로드캐스트에 사용된다. .msg 파일은 내부적으로 어떠한 분할선 구문도 지니지 않는 단일 리스트 형태 공간으로 정의된다.
이러한 단일 블록 설계는 시간의 흐름에 따라 연속적으로 변동하는 ‘상태(State)’ 자체에만 초점을 맞추는 로보틱스 센서 퓨전 이론을 충실히 반영한 것이다. 예컨대 자율 주행의 기반이 되는 Odom(Odometry) 데이터 모델을 구성할 때, .msg 파일 내에는 현재의 시공간 위치(Pose)와 진행 속도(Twist)가 캡슐화되어 선언된다. 수신자 측의 존재 여부와 무관하게 무상태성(Stateless)을 지닌 채 끊임없이 생성 및 폐기되는 휘발성 데이터 스트림을 구축하는 데 있어, 부가적인 상태 코드나 트랜잭션 식별자 없이 콤팩트(Compact)하게 압축된 단일 .msg 구조는 가장 이상적인 네트워크 대역폭 효율성을 제공한다.
2. 서비스 포맷(.srv)의 이중 분할 질의응답 패러다임
서비스(.srv) 파일 포맷은 클라이언트와 서버 사이의 동기식, 혹은 일회성 비동기 질의응답 형태를 묘사하기 위해 고안되었다. 파일의 내부 구문은 정확히 세 개의 하이픈(---)으로 구성된 하나의 분할선을 기점으로, 상단부(Request)와 하단부(Response)로 완벽히 양분된다.
이 이원적(Bipartite) 모델은 객체 지향 프로그래밍의 원격 프로시저 호출(RPC) 또는 함수 시그니처 형식을 데이터 계층으로 끌어내린 것이다. 상단부는 서버 함수로 전파될 매개변수(Arguments) 역할을, 하단부는 함수 연산의 출력값(Return Types) 역할을 담당한다. 센서 초기화, 캘리브레이션(Calibration) 파라미터 주입, 자율 비행 모드 변경(SetMode) 등 제어 시스템의 상태 전이(State Transition)를 유발하는 결정론적 인스트럭션(Instruction) 텔레메트리를 설계할 때, 응답 성공 여부 필드가 강제 결속(Binding) 가능한 .srv 포맷은 트랜잭션의 원자성(Atomicity)을 보장하는 최적의 디자인 패턴이다.
3. 액션 포맷(.action)의 삼원 비동기(Tripartite Asynchronous) 분할
액션(.action) 파일 포맷은 웨이포인트(Waypoint) 비행이나 객체 추적과 같은 장기 실행 태스크(Long-Running Task)의 전체 수명 주기를 제어 관장하기 위한 극한의 구문 확장형이다. 내부적으로 두 개의 분할선(---)을 포함하여, 상단부터 각각 목표(Goal), 결과(Result), 피드백(Feedback)으로 계층화된 3단계 레이아웃 규칙을 채택한다.
이 삼원 분할 구조는 복합 상태 기계(State Machine)의 통신 아키텍처를 완벽하게 모사한다. Goal 영역은 초기 비행 좌표 배열 등의 착수 파라미터를, Result 영역은 수 분 이후 연산 종료 시점에 산출되는 종단 요약 보고서를 정의한다. 가장 혁신적인 하단 Feedback 영역은 그 중간 수명 주기 내내 서버가 클라이언트로 발산(Streaming)할 실시간 잔여 거리 오차나 장애물 접근 변수를 정의한다. 컴파일 과정에서 이 단일 파일은 무려 3개 이상의 하위 .msg와 .srv 컴포넌트로 해체 및 역참조(Dereferencing)되며, 개발자로 하여금 단일 파일 내에서 복잡한 비동기 스레드 파이프라인의 생명주기를 직관적으로 통찰할 수 있는 모델링 추상화를 선사한다.
4. 파일 시스템 컨벤션 및 어휘 규칙 맵핑 매커니즘
ROS2 패키지 컴파일러가 이러한 다형성 IDL 파일들을 파싱하기 위해서는 파일 시스템 상의 엄밀한 배치와 명명법(Naming Convention)을 따라야 한다. .msg, .srv, .action 파일들은 패키지 루트 디렉토리 산하에 동일한 이름표를 가진 각각의 분리된 폴더(msg/, srv/, action/) 내에 격리 배치되는 것이 공학적 표준이다.
파일명은 반드시 파스칼 표기법(PascalCase, 예: DroneStatus.msg)을 따르도록 엄격히 통제되며, 반대로 파일 내부에 기술되는 단일 변수명은 모두 소문자 기반의 스네이크 표기법(snake_case)으로 작성된다. 이러한 규칙은 단순한 가독성 확보 차원을 떠나, 코드 제너레이션 파이프라인이 파스칼 표기법을 C++의 클래스 구조체나 객체 타입(Object Type)으로 치환하고, 스네이크 표기법을 내부 멤버 변수(Member Variable)로 강제 캐스팅(Casting)할 때 구문 분석 오작동을 원천 통제하기 위한 컴파일러 디자인 팩터(Compiler Design Factor)로써 기능한다.