ROS2 핵심 통신 개념: 토픽 vs 서비스 vs 액션 완전 정리
로봇 소프트웨어 설계의 기초 — Topic · Service · Action 비교 가이드
로봇 소프트웨어를 개발할 때 노드(Node)들이 서로 데이터를 주고받는 방식은 시스템 설계의 핵심입니다. ROS2는 이를 위해 세 가지 통신 메커니즘을 제공합니다. 각 방식은 사용 목적과 동작 방식이 다르기 때문에, 상황에 맞게 올바른 메커니즘을 선택하는 것이 매우 중요합니다.
📡 1. 토픽 (Topic)
토픽은 ROS2에서 가장 기본적인 통신 방식입니다. 발행자(Publisher)가 특정 채널(토픽)에 데이터를 지속적으로 흘려보내면, 구독자(Subscriber)가 해당 채널을 구독하여 데이터를 받습니다.
이 구조는 단방향 비동기 스트림입니다. 발행자는 구독자가 몇 명인지, 데이터를 잘 받았는지 전혀 신경 쓰지 않습니다. TV 방송국이 전파를 쏘는 것과 같습니다.
대표적인 사용 사례
🔁 2. 서비스 (Service)
서비스는 요청(Request) / 응답(Response) 구조입니다. 클라이언트가 서버에 특정 요청을 보내면, 서버는 처리 결과를 단 한 번 응답으로 돌려줍니다. HTTP API와 매우 유사한 개념입니다.
핵심 특징은 동기적 통신이라는 점입니다. 클라이언트는 서버로부터 응답이 올 때까지 대기하기 때문에, 처리 시간이 긴 작업에는 적합하지 않습니다.
대표적인 사용 사례
⚙️ 3. 액션 (Action)
액션은 토픽과 서비스의 장점을 결합한 고급 통신 메커니즘입니다. 클라이언트가 목표(Goal)를 보내면, 서버는 작업을 수행하면서 중간 피드백(Feedback)을 지속적으로 전송하고, 완료 시 결과(Result)를 반환합니다.
또한 작업이 진행 중에도 취소(Cancel)가 가능하여, 시간이 오래 걸리는 작업을 안전하게 관리할 수 있습니다. 내부적으로는 토픽 3개와 서비스 2개의 조합으로 구성됩니다.
대표적인 사용 사례
🔍 통신 구조 다이어그램

📊 세 가지 통신 방식 비교표
구분📡 토픽 (Topic)🔁 서비스 (Service)⚙️ 액션 (Action)
| 통신 방향 | 단방향 | 양방향 | 양방향 |
| 통신 방식 | 비동기 | 동기 (블로킹) | 비동기 |
| 응답 여부 | 없음 | 즉각 1회 응답 | 피드백 + 최종 결과 |
| 작업 취소 | 불가 | 불가 | ✅ 가능 |
| 중간 피드백 | 지속 스트림 | 없음 | ✅ 있음 |
| 참여 주체 | Publisher / Subscriber | Client / Server | Client / Server |
| 적합한 작업 | 짧고 반복적 데이터 | 단순 요청-응답 | 장기 실행 작업 |
| 블로킹 여부 | 없음 | ⚠️ 위험 | 없음 |
| 내부 구현 | DDS Topic | DDS Service | Topic + Service 혼합 |
| 대표 예시 | 카메라, 라이다, IMU | 파라미터 설정, 모드 변경 | 내비게이션, 팔 제어 |
🧠 언제 무엇을 써야 할까?
📡 토픽을 쓸 때
데이터가 계속 반복적으로 발생하고, 일부 유실돼도 무방한 경우. 센서 스트림, 상태 모니터링처럼 "흘려보내면 되는" 데이터에 적합합니다.
🔁 서비스를 쓸 때
요청 한 번에 결과 한 번이 필요하고, 처리 시간이 짧은 경우. 파라미터 조회, 모드 전환처럼 즉각 응답이 보장되어야 할 때 사용합니다.
⚙️ 액션을 쓸 때
작업이 수 초~수 분 소요되고 진행 상황 모니터링이 필요한 경우. 목적지 이동, 매니퓰레이터 제어처럼 도중 취소 가능성도 고려해야 할 때 사용합니다.
✅ 마무리
ROS2의 토픽, 서비스, 액션은 단순히 API의 종류가 아니라 로봇 시스템의 실시간성과 안정성을 결정하는 설계 선택입니다. 잘못된 통신 방식을 선택하면 시스템 응답 지연, 불필요한 데이터 낭비, 혹은 작업 중단 여부를 알 수 없는 상황이 발생할 수 있습니다.
처음부터 각 메커니즘의 특성을 이해하고 올바르게 설계하는 것이 견고한 ROS2 로봇 시스템의 시작입니다.
'IT관련' 카테고리의 다른 글
| 정보처리기능사 → 프로그래밍기능사2026년 무엇이 달라졌나? (0) | 2026.03.17 |
|---|---|
| AI로 쓴 블로그, 구글·네이버 검색에서 유리할까 불리할까? (1) | 2026.03.16 |
| 블로그 글쓰기에 가장 뛰어난 AI는? 4가지 직접 써본 솔직 후기 (1) | 2026.03.16 |
| 앱 설치 없이 바로 시작하는 어린이 코딩! 코딩티딩 '어린이 스크래치' 소개 (0) | 2026.03.13 |
| [아두이노 초보 탈출] 5V 핀 vs 디지털 핀, 언제 어떤 걸 써야 할까? (0) | 2026.03.06 |