Sub / Pub Model?
Sub/pub 모델, 즉 Subscriber / Publisher 모델은 구독 클라이언트와 발행 클라이언트 간의 통신 모델이다.
일반적인 Server / Client 모델은 한쪽은 서버의 역할을, 한쪽은 클라이언트의 역할을 하게 된다.
일반적으로 클라이언트가 서버에 데이터를 요청하고, 서버가 해당 데이터를 클라이언트에 전송하는 식의 방식이 사용된다.
Sub/pub 모델은 이와 조금 다르다.
클라이언트는 데이터를 보내는 입장이 될 수 있고, 혹은 데이터를 받는 입장, 혹은 동시에 두 입장을 소화해 낼 수도 있다.
실생활의 예를 한번 들어보자.
내가 신문 읽기를 좋아하여, 신문 구독(Subscribe) 을 신청하였다.
예를 들어 조선일보(Topic) 와 한겨레 신문(Topic) 을 구독 신청했다고 하자.
그럼 조선일보와 한겨레는 기사를 발행(Publish) 하면, 그 신문은 신문 배달원(Broker) 에 의하여 나에게 도착하게 된다.
여기서 살짝 다른 점은, 나는 신문을 발행할 수 없다는 것인데, MQTT에서는 내가 발행하는 사람이 될 수도 있다.
MQTT 용어
이미지 출처 : http://www.hardcopyworld.com/ngine/aduino/wp-content/uploads/sites/3/2016/01/0912embmqtt01.png
위에서 나왔듯이, MQTT Sub/Pub 모델에서 가장 핵심적인 용어들은 Subscribe, Publish, Broker, Topic이다.
Subscribe는 말그대로 구독이다.
내가 관심 있는, 내가 받아야 할 Topic 들을 선택하고, 해당하는 정보를 받게 된다.
Publish는 역시 발행이다.
발행할 Topic에 정보를 발행한다.
Broker 의 역할이 아주 중요하다.
Subscriber 는 Broker에 자신이 받을 Topic 들에 대한 정보를 요청한다.(subscribe)
Broker는 메모리에 topic별로 subscribe하는 client의 정보를 갖고 있다가,
Publisher 가 해당 topic으로 데이터를 전송하면 구독하고 있던 client 전원에게 데이터를 전달해준다.(publish)
Topic 별로 데이터를 주고받는다는 것이 중요하다.
Subscriber가 weather, time 이라는 Topic을 구독하겠다고 신청하면
Publisher가 weather, person, address 를 발행하면 weather의 정보만 Broker를 통해서 전달되게 된다.
Broker는 Topic을 관리해주고 구독과 발행을 총괄한다고 보면 되겠다.
Topic의 구분
이미지 출처 : 기록이 안되어있음 ..
토픽이 아무래도 무수히 많이 존재할 텐데, 이를 구분하는 것도 당연히 중요하다.
토픽을 구분하는 것은 위의 그림에서 볼 수 있듯이 슬래쉬(/) 로 구분한다.
마치 트리 구조처럼 아래로 내려가는 형식이다.
또한 특별한 키워드가 존재하는데, 바로 와일드카드 이다.
와일드카드는 토픽에 특별한 기능을 추가해주는데, + , * 의 두가지가 있다.
예를 들어 Subscriber가 위의 사진에서 /sensors/NODE_NAME/temperature/CPU 에 대해 구독하도록 하였다면,
그 Subscriber는 해당 토픽에 관한 내용만 받아들일 수 있다.
그러나 /sensors/NODE_NAME/temperature/* 이런식으로 와일드카드를 사용하여 구독한다면
Harddisk, CPU, Memory 정보를 모두 받을 수 있다.
즉 * 와일드 카드는 같은 부모 노드를 가진 형제노드 전부를 동시에 구독할 수 있게 해준다.
하지만 단말노드(자식 노드가 없는 경우)에만 해당한다.
만약 자식 노드가 있다면, + 와일드 카드를 사용하여야 한다.
예를 들어 위의 NODE_NAME에 해당하는 부분이 node1, node2 가 있다고 하자.
즉 sensors/node1/temperature/... 가 있고, sensor/node2/temperature/... 가 있다고 하자.
이 경우에 node1과 node2 둘다 받을때에는 단말노드가 아니므로 *를 사용하는 것이 아니라 +를 사용하여야 한다.
sensors/+/temperature/CPU 이런식으로 토픽을 지정해두면
node1의 CPU 온도와 node2의 CPU 온도 둘다 받을수 있게 된다.
기초 모델 끝