๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/IoT

MQTT

by syLim___ 2023. 11. 27.
728x90

 

โœ… MQTT๋ž€?

 

 -  IoT ๋””๋ฐ”์ด์Šค๋“ค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” publish/subscribe ๋ฉ”์‹œ์ง€ ์ „์†ก ํ”„๋กœํ† ์ฝœ

 - ๊ฒฝ๋Ÿ‰์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 - ๋ฉ”์‹œ์ง€ ํ˜•์‹์ด Binary format์ด๋ผ์„œ ํŒจํ‚ท ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๊ณ , ์ „์†ก์ด ๋น ๋ฅด๊ณ , ์˜ค๋ฒ„ํ—ค๋“œ๋‚˜ ์ „๋ ฅ์†Œ๋ชจ๊ฐ€ ์ ๋‹ค.

 - ๊ทธ๋ž˜์„œ ์„ผ์„œ๋‚˜ IoT ์žฅ์น˜์ฒ˜๋Ÿผ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ์ €์ „๋ ฅ ์žฅ์น˜๋ผ๋ฆฌ์˜ ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

 

 

โœ… Publish-Subscribe & ๋ธŒ๋กœ์ปค ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง• ๋ชจ๋ธ

 - MQTT๋Š” Pub/Sub ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ์˜ ์ผ์ข…์ด๋‹ค.

 - MQTT ํ”„๋กœํ† ์ฝœ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ธŒ๋กœ์ปค ๊ธฐ๋ฐ˜ ๋ชจ๋ธ(Publisher - broker - subscribers ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ)์„ ๋”ฐ๋ฅธ๋‹ค.

 

๐Ÿฅ Topic

 - ๋ชจ๋“  MQTT ๋ฉ”์‹œ์ง€์—๋Š” topic์ด๋ผ๋Š” ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

 - ํ† ํ”ฝ์€ ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ๊ฐ ๊ณ„์ธต์€ '/'๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

 

๐Ÿฅ MQTT Broker & MQTT Client

- MQTT Client์—๋Š” publisher์™€ subscriber๊ฐ€ ์žˆ๋‹ค.

- MQTT Publisher

    -๋ฉ”์‹œ์ง€๋ฅผ MQTT broker์—๊ฒŒ ์ „์†กํ•œ๋‹ค.

- MQTT Broker

    - Publisher์™€ subscriber ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž์ด๋‹ค.

    - ๋ฐœ์‹ ์ž๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„์„œ ์ ์ ˆํ•œ ์ˆ˜์‹ ์ž๋“ค์—๊ฒŒ ์ „์†กํ•ด์ค€๋‹ค.

    - MQTT Publisher๊ฐ€ ๋ณด๋‚ด์ฃผ๋Š” MQTT ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค.

    - ์–ด๋–ค MQTT Subscriber๊ฐ€ ์–ด๋–ค ํ† ํ”ฝ์„ ๊ตฌ๋…ํ–ˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋”ฐ.

- MQTT Subscriber

    - ์ž์‹ ์ด ๊ตฌ๋…ํ•˜๊ณ ์ž ํ•˜๋Š” ํ† ํ”ฝ์„ MQTT Broker์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.

๐Ÿฅ Publish & Subscribe

 - MQTT ๋ฉ”์‹œ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ(publisher)์— ์˜ํ•ด ํŠน์ • ํ† ํ”ฝ์— ๊ฒŒ์‹œ๋˜๊ณ ,

    ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒŒ์‹œ๋˜๋ฉด ๋ธŒ๋กœ์ปค๋Š” ํŠน์ • ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ(subscriber)์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

 - ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ† ํ”ฝ์— ๊ฒŒ์‹œ๋  ์ˆ˜ ์žˆ๊ณ ,

    ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 - ์—ฌ๋Ÿฌ ๊ตฌ๋…์ž๊ฐ€ ํ•˜๋‚˜์˜ ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 - ํ† ํ”ฝ์„ subscribeํ•  ๋•Œ์—๋Š” ์™€์ผ๋“œ์นด๋“œ(#,+)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 - ์˜ˆ์‹œ )

    topic = "town/house/kitchen"

 

     #์€ ํ•˜์œ„ ์ˆ˜์ค€ ๋ชจ๋“  ํ† ํ”ฝ๊นŒ์ง€ ํฌํ•จ, +์€ ๊ฐ™์€ ๊ณ„์ธต์˜ ๋ชจ๋“  ํ† ํ”ฝ

 - "town/#" ----> "town/house", "town/house/kitchen", "town/house/bathroom" ๊ตฌ๋…
 - "town/+" ----> "town/house" ๊ตฌ๋…
 - "town/+/kitchen" ----> "town/house/kitchen" ๊ตฌ๋…

 

๐Ÿฅ Broker

 - MQTT์—์„œ๋Š” Publisher์™€ Subscriber๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ํ†ต์‹ ํ•˜๋ฏ€๋กœ ํšจ์œจ์ ์ด๋‹ค.

 - Publisher์™€ subscriber๋Š” ์„œ๋กœ์˜ ์กด์žฌ๋ฅผ ๋ชจ๋ฅด๋ฉฐ ์ง์ ‘ ํ†ต์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 - ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๋ผ๋ฆฌ๋Š” ์„œ๋กœ์˜ IP์ฃผ์†Œ์™€ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์•Œ ํ•„์š”๋„ ์—†๋‹ค.

 

 - Publisher - subscribers ๋Š” ์ œ3์˜ ์š”์†Œ์ธ broker๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜์–ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

 

 

โœ… MQTT Qos(Quality of Service) levels

 

 - MQTT์—์„œ๋Š” 3๊ฐ€์ง€ ์ˆ˜์ค€์˜ QoS ์˜ต์…˜์„ ์ง€์›ํ•œ๋‹ค.

 

๐Ÿฅ  QoS 0

 - ๋ฉ”์‹œ์ง€๋ฅผ "ํ•œ ๋ฒˆ๋งŒ" ์ „์†กํ•œ๋‹ค.

 - ๋ฉ”์‹œ์ง€๋Š” ํ™•์ธ ์—†์ด ์ „์†ก๋˜๋ฉฐ, ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.

 - ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์†์‹ค๋˜์–ด๋„ ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 - ์ „๋ ฅ์†Œ๋ชจ๊ฐ€ ๊ฐ€์žฅ ์ ๋‹ค.

 

๐Ÿฅ QoS 1

 - ๋ฉ”์‹œ์ง€๋ฅผ "์ตœ์†Œ ํ•œ ๋ฒˆ" ์ „์†กํ•œ๋‹ค.

 - ํด๋ผ์ด์–ธํŠธ(publisher)๋Š” ๋ธŒ๋กœ์ปค์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ณ , ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ํ™•์ธ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

 - ์ง€์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์œผ๋ฉด(timeout ๋ฐœ์ƒํ•˜๋ฉด), ๋ฉ”์‹œ์ง€๋ฅผ ์žฌ์ „์†กํ•œ๋‹ค.

 - ๋ฉ”์‹œ์ง€ ์†์‹ค์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๊ณ , ๊ตฌ๋…์ž(subscriber)๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘๋ณต์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿฅ QoS 2

 - ๊ตฌ๋…์ž(subscriber)๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ "์ •ํ™•ํžˆ ํ•œ ๋ฒˆ" ๋ฐ›๊ฒŒ๋” ์ „์†กํ•œ๋‹ค.

 - ํด๋ผ์ด์–ธํŠธ(publisher)๊ฐ€ ๋ธŒ๋กœ์ปค์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ ,

    ๋ธŒ๋กœ์ปค๋Š” ๊ตฌ๋…์ž(subscriber)๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ํ™•์ธ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.

 - ํ™•์ธ ๊ณผ์ •์ด 2๋ฒˆ ํ•„์š”ํ•˜๋ฏ€๋กœ, ์ „์ฒด flow๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๊ณ  ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 - ๋ฉ”์‹œ์ง€ ์†์‹ค๊ณผ ์ค‘๋ณต ์ „์†ก์ด ๋ชจ๋‘ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

โœ… MQTT Message persistency options

 

 - MQTT persistency ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋„คํŠธ์›Œํฌ๋‚˜ ์„œ๋ฒ„ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ฉ”์‹œ์ง€ ์†์‹ค ์—†์ด ์ „์†ก๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค.

 

 - ์˜ต์…˜์€ ๋‹ค์Œ 3๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๋กœ ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿฅ  Non-persistent

 - ๋””ํดํŠธ ์˜ต์…˜์ด๋‹ค.

 - ๋ฉ”์‹œ์ง€๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š์•„์„œ, ๋„คํŠธ์›Œํฌ๋‚˜ ์„œ๋ฒ„ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค๋œ๋‹ค.

 

๐Ÿฅ Queued persistent

 - ๋ฉ”์‹œ์ง€๊ฐ€ subsciber์—๊ฒŒ ์ „์†ก๋  ๋•Œ๊นŒ์ง€ ์„œ๋ฒ„์— ์ €์žฅ๋œ๋‹ค.

 - ํด๋ผ์ด์–ธํŠธ(subscriber)๊ฐ€ ์˜คํ”„๋ผ์ธ์ธ ๊ฒฝ์šฐ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

 

๐Ÿฅ Persistent with acknowledgement

 - ๋ฉ”์‹œ์ง€๊ฐ€ subsciber์—๊ฒŒ ์ „์†ก๋˜๊ณ , subsciber๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹  ํ™•์ธ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์„œ๋ฒ„์— ์ €์žฅ๋œ๋‹ค.

 - Subscriber๊ฐ€ ์ˆ˜์‹  ํ™•์ธ ์‘๋‹ต์„ ํ•˜์ง€ ์•Š์œผ๋ฉด, ์‘๋‹ตํ•  ๋•Œ๊นŒ์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ์žฌ์ „์†กํ•œ๋‹ค.

 

 

 - Persistency๊ฐ€ ๋ณด์žฅ๋ ์ˆ˜๋ก ๋ฉ”์‹œ์ง€ ์ €์žฅ๊ณต๊ฐ„ ๋“ฑ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์š”๊ตฌ๋˜๋ฏ€๋กœ, ์˜์†์„ฑ๊ณผ ์„ฑ๋Šฅ ๊ฐ„ tradeoff๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

 

 

 

โœ… Reference

https://www.hivemq.com/mqtt/

728x90