<aside> 💡 토픽(Topic)에 대한 설명은 ROS 2 Humble 공식 Docs의 자료를 사용합니다. 보다 자세한 내용은 아래 링크를 참고해 주세요.
Understanding topics — ROS 2 Documentation: Humble documentation
</aside>
ROS 2는 데이터를 **메시지(Message)**라는 이름으로 전송합니다. 자주 사용되거나 기본적인 형태의 메시지는 미리 만들어져 있어서, 가져와서 바로 사용할 수 있습니다. 만약, 원하는 형태의 메시지가 없다면 .msg 형태의 파일을 생성하여 custom 메시지를 사용할 수 있습니다.
**토픽(Topic)**은 데이터를 전송하는 **Publisher**와 데이터를 수신하는 **Subscriber**간의 단방향 메시지 전송 방법입니다. 센서의 측정 데이터와 같이 한방향으로 지속적인 데이터를 전송할 때 주로 토픽을 사용합니다.

토픽의 이름, 메시지 타입, 메시지로 구성되며, 예를 들어 LiDAR 센서에서 데이터를 전송하면 다음과 같이 구현될 수 있습니다.

토픽은 위 사진과 같이 1:1 이외에도 N:N으로 데이터를 주고받을 수 있습니다. 즉, 여러 노드에서 동일한 토픽으로 데이터를 전송하거나 수신할 수 있습니다.
<aside> 💡 서비스(Service)에 대한 설명은 ROS 2 Humble 공식 Docs의 자료를 사용합니다. 보다 자세한 내용은 아래 링크를 참고해 주세요.
Understanding services — ROS 2 Documentation: Humble documentation
</aside>
앞서 소개한 토픽은 단방향 통신 방법이기 때문에 센서의 데이터를 전송할 때는 편리하지만, 모터와 같은 액추에이터에 사용하기에는 작동 완료 여부를 알 수 없어 사용하기에는 적합하지 않습니다. 이럴 때는 **서비스(Service)**라는 이름의 양방향 메시지 전송 방법을 사용할 수 있습니다.

**서비스(Service)**는 서비스를 제공하는 **Server**와 **서비스를 호출하는 Client**로 구성됩니다. Client에서 Server로 데이터와 함께 서비스를 **요청(Request)**하면 Server에서는 데이터를 이용해 특정 동작을 수행한 후 결과 데이터로 **응답(Response)**합니다.
서비스도 토픽과 유사하게 서비스의 이름, 메시지 타입, 메시지로 구성되어 요청과 응답을 주고받습니다. 예를 들어 모터 속도를 설정하기 위한 서비스는 아래와 같이 구현할 수 있습니다.