# ROS2 : Node : 역할

#### Node의 개념과 중요성

ROS2(로봇 운영 체제 2, Robot Operating System 2)에서 Node는 로봇 소프트웨어의 기본 구성 요소이다. Node는 ROS2 환경에서 독립적으로 실행되는 최소 단위의 실행 단위로, 로봇의 특정 기능을 담당하는 소프트웨어 모듈로 구성된다. 각 Node는 특정 작업을 수행하기 위해 다른 Node와 통신하며, 이를 통해 복잡한 로봇 시스템을 구축할 수 있다.

Node는 분산 시스템에서 중요한 역할을 담당한다. 분산 시스템에서는 각 컴포넌트가 독립적으로 실행되고 통신을 통해 협업하여 시스템 전체의 기능을 수행한다. ROS2에서 Node는 이 컴포넌트의 역할을 하며, 시스템의 모듈화, 확장성, 유지보수성에 기여한다.

#### Node의 역할

Node는 다양한 역할을 수행하며, 이 역할은 ROS2의 통신 메커니즘에 따라 다르게 나타난다. 주요 역할에는 메시지 송신자(Publisher), 메시지 수신자(Subscriber), 서비스 제공자(Service Server), 서비스 클라이언트(Service Client), 액션 서버(Action Server), 액션 클라이언트(Action Client)가 있다.

**메시지 송신자(Publisher)**

Node는 토픽(topic)을 통해 메시지를 다른 Node에 송신할 수 있다. 이때 메시지를 송신하는 Node는 Publisher 역할을 담당한다. Publisher는 특정 토픽에 메시지를 게시하며, 해당 토픽에 관심 있는 모든 Subscriber에게 메시지가 전달된다. 이 방식은 일대다 통신을 가능하게 하며, 여러 Node가 동시에 정보를 수신하도록 지원한다.

**메시지 수신자(Subscriber)**

메시지를 수신하는 Node는 Subscriber 역할을 한다. Subscriber는 특정 토픽을 구독하여 해당 토픽의 메시지를 받을 수 있다. 이 과정에서 Node는 실시간으로 데이터를 처리하거나, 수신된 데이터를 바탕으로 추가 작업을 수행할 수 있다. Publisher와 Subscriber는 비동기적으로 동작하여, 시스템의 유연성을 높인다.

**서비스 제공자(Service Server)**

Node는 서비스 요청을 처리하는 Service Server로도 동작할 수 있다. 서비스는 요청-응답 구조를 가지며, 클라이언트가 요청을 보내면 서버는 해당 요청을 처리하고 응답을 반환한다. 이는 동기식 통신 방식으로, 특정 작업을 수행할 때 확정적인 결과가 필요한 경우에 사용된다.

**서비스 클라이언트(Service Client)**

Service Client는 서비스 요청을 보내는 역할을 한다. Service Client는 특정 Service Server에게 작업을 요청하며, 요청에 대한 응답을 기다린다. 이 구조는 복잡한 작업을 단순화하고, Node 간의 작업 분리를 명확하게 한다.

**액션 서버(Action Server)**

Action Server는 긴 시간 동안 수행되는 작업을 처리하는 역할을 한다. 액션은 서비스와 비슷하지만, 진행 상태를 중간중간 확인하거나 취소할 수 있는 기능이 추가된다. 이를 통해, 긴 작업을 세밀하게 제어할 수 있다.

**액션 클라이언트(Action Client)**

Action Client는 액션을 요청하는 역할을 한다. 이 클라이언트는 작업의 진행 상황을 모니터링하고, 필요시 작업을 중단할 수 있다. 액션 클라이언트는 Action Server와의 비동기 통신을 통해 긴 작업을 효율적으로 관리한다.

#### Node 간 통신의 중요성

ROS2에서 Node 간의 통신은 시스템의 핵심이다. Node는 토픽, 서비스, 액션을 통해 서로 데이터를 주고받으며, 이를 통해 시스템의 복잡한 동작이 가능해진다. 각 Node는 독립적으로 실행되면서도 서로 긴밀하게 연결되어 있어, 시스템 전체가 조화롭게 작동한다. 이 통신 메커니즘을 이해하는 것은 ROS2 기반 로봇 시스템을 설계하고 구현하는 데 필수적이다.

***

관련 자료:

* Programming Robots with ROS2, O'Reilly Media, 2020.
* Mastering ROS for Robotics Programming, Packt Publishing, 2018.
