💻CS

[CS] Pub/Sub 모델과 MQTT(Mosquitto)

이줭 2022. 6. 26. 13:00
728x90

Pub-Sub 모델은 비동기 메시징 패러다임으로, Pub-Sub 모델에서 Publisher의 메시지는 특별한 수신자가 정해져 있지 않다. publish 된 메시지는 정해진 범주에 따라, 각 범주에 대한 Subscribe를 신청한 Subscriber에게 전달된다. Subscriber는 Publisher에 대한 정보 없이도 원하는 메시지만 수신할 수 있다.

https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c

 

MQTT는 아래와 같이 동작한다.

 

https://sakshambhatla.wordpress.com

위의 그림을 보면 MQTT Broker가 존재하고 Publish와 Subscribe가 존재한다. 

 

Publisher가 Hi! 라는 메시지를 보내면 Subscriber가 Broker를 통해 메시지를 받는 구조로 " /hello/world/ " 토픽을 구독하지 않은 Subscriber는 메시지를 받을 수 없다.

 

MQTT의 특징으로는 Broker를 통한 통신, QoS가 있다.

 

먼저, Broker를 통한 통신으로 위의 그림에서 봤듯이 Publisher가 발행한 메시지를 해당 토픽을 구독하는 Subscriber들이 받을 수 있고, 일대일 또는 일대다 통신이 모두 가능하다.

다음으로 QoS(Quality of Service)는 0, 1, 2 레벨로 구성되어 있는데 각 레벨은 아래와 같다.

 

0 : 최대 1회 전송, 토픽을 통한 메시지를 전송할 뿐 Subscriber가 받는 것은 보장하지 않는다.

1 : 최소 1회 전송, Subscriber가 메세지를 받았는지 불확실하다면 정해진 횟수만큼 재전송한다.

2 : Subscriber가 최소 1번 메시지를 받을 수 있도록 보장한다.

 

0에 가까울수록 메시지 처리에 대한 부하가 줄어들지만 메시지 손실에 대한 위험이 높아지고, 2에 가까울수록 손실 위험은 줄어들지만 메시지 처리 부하가 늘어난다. 보통 0~1 정도의 QoS 레벨이 널리 쓰이며, 손실의 위험은 상위 애플리케이션 차원에서 관리하는 방법으로 쓰인다.

 

참고 : https://2kindsofcs.tistory.com/6

https://deneb21.tistory.com/416

https://underflow101.tistory.com/22

728x90

'💻CS' 카테고리의 다른 글

[CS] DB 트랜잭션 격리 수준 (Transaction Isolation Levels)  (0) 2022.07.05
[CS] DB Index  (0) 2022.07.03
[CS] CORS?  (0) 2022.06.25
[CS] Session vs Cookie  (0) 2022.06.22
[CS] 토큰 기반 인증과 JWT  (0) 2022.06.19