느슨한 연결의 장점
듣는 쪽이 하나 늘면 보내는 쪽 코드를 고쳐야 할까?
직접 부르면
받는 쪽을 모두 알아야 한다면
보내는 쪽이 받는 쪽을 하나하나 직접 불러야 한다고 해 봅시다. 받는 쪽이 하나 늘 때마다 보내는 쪽 코드를 고쳐야 합니다. 받는 쪽 이름이 바뀌어도 마찬가지입니다.
/logger, /display, /recorder는 설명을 위해 붙인 이름입니다.
토픽을 사이에
보내는 쪽은 토픽 이름만 압니다
토픽을 쓰면 퍼블리셔는 토픽에 올리기만 하고, 서브스크라이버는 토픽에서 받기만 합니다. 서로를 몰라도 됩니다. 이렇게 서로 덜 묶인 관계를 느슨한 연결(loose coupling)이라고 합니다.
더하기
듣는 쪽은 언제든 붙습니다
실행 중인 시스템에 구독자를 새로 붙여도 /teleop_turtle은 아무것도 바꾸지 않습니다. 5편에서 칠 ros2 topic echo도 이렇게 붙는 구독자 하나입니다.
/_ros2cli_26646은 echo 명령이 만든 노드의 이름이고, 숫자는 그때그때 다릅니다.
바꿔 끼우기
보내는 쪽도 바꿔 끼웁니다
같은 토픽에 같은 타입의 메시지만 보내면, 키보드 노드든 명령 한 줄(6편)이든 직접 짠 파이썬 노드(6강 8편)든 거북이는 똑같이 움직입니다. /turtlesim의 코드는 하나도 고치지 않습니다.
/my_driver는 6강에서 만들 노드에 붙인 예시 이름입니다.
켜는 순서
누가 먼저 켜져도 됩니다
노드는 켜질 때 같은 네트워크의 다른 노드를 스스로 찾아냅니다(1강 5편). 그래서 구독자가 먼저 켜져 있다가 나중에 퍼블리셔가 켜져도, 그때 이어집니다. 하나를 껐다 다시 켜도 다시 이어집니다.
이어지기 전에 보낸 메시지는 받지 못합니다.
대가
대신 받았는지는 모릅니다
퍼블리셔는 누가 듣는지 모르는 만큼, 메시지가 도착했는지도 모릅니다. 구독자가 하나도 없어도 그대로 보내고, 메시지는 그냥 사라집니다. 답이 꼭 필요한 일에는 서비스(7강)를 씁니다.
메시지를 어떻게 건넬지 정하는 규칙(QoS)은 11강에서 봅니다.
다음 편