글 / ROS 2 기초

ROS 2 토픽·서비스·액션 선택 기준

지속적으로 전송되는 값은 토픽, 단시간에 완료되는 요청은 서비스, 장시간 실행되고 취소가 필요한 작업은 액션으로 구분한다.

작성일 · 읽는 시간 2분 · ROS 2 Jazzy 기준

선택의 필요성

ROS 2 노드는 토픽, 서비스, 액션의 세 가지 방식으로 데이터를 송수신한다. 어느 방식으로도 값을 전송할 수는 있지만 방식마다 전제가 다르다. 적합하지 않은 방식을 선택하면 호출 측이 결과를 대기하며 정지하거나, 작업이 어디까지 진행되었는지 확인할 방법이 없어진다.

세 방식의 전제

  • 토픽: 발행자(publisher)가 발행한 값을 같은 이름을 구독하는 모든 노드가 수신한다. 응답은 없다.
  • 서비스: 클라이언트가 요청하고 서버가 결과를 반환하는 원격 호출이다. 클라이언트가 결과를 대기하므로 단시간에 완료되어야 한다.
  • 액션: 장시간 실행되는 원격 호출이다. 서버가 중간 경과를 전달하고, 클라이언트는 실행 도중에 취소할 수 있다.

토픽·서비스·액션 세 방식의 통신 형태 비교

이 차이는 정의 파일에도 나타난다. ---로 구분된 부분이 토픽은 하나, 서비스는 둘, 액션은 셋이다.

text정의 파일의 꼴
# 토픽 (.msg)
uint32 field1
string field2

# 서비스 (.srv): 요청, 응답
uint32 request
---
uint32 response

# 액션 (.action): 요청, 결과, 경과
int32 request
---
int32 response
---
int32 feedback

비교

토픽 서비스 액션
흐름 단방향으로 계속 요청 한 번, 응답 한 번 요청, 경과 여러 번, 결과
소요 시간 무관 짧아야 함 길어도 됨
수신 측 구독자 여럿 이름마다 서버 하나 이름마다 서버 하나
취소 없음 없음 있음
적합한 예 센서 값, 상태 값 조회, 짧은 계산 목표 지점까지 이동

선택 순서

  • 응답이 필요 없고 값이 지속적으로 발생하면 토픽을 선택한다.
  • 응답이 필요하고 단시간에 완료되면 서비스를 선택한다.
  • 완료까지 시간이 소요되거나 실행 도중에 중단할 수 있어야 하면 액션을 선택한다.

응답 필요 여부와 소요 시간으로 방식을 선택하는 순서

액션 하나에는 서비스 셋과 토픽 둘이 수반되므로 짧은 호출까지 액션으로 구현할 필요는 없다. 반대로 장시간 실행되는 작업을 서비스로 구현하면 클라이언트는 경과를 알지 못한 채 대기해야 한다.