โ 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
'๊ฐ์ธ ๊ณต๋ถ > IoT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
docker ์์ telegraf, influxdb(1.x) ์ปจํ ์ด๋ ์ฌ๋ ค์ mqtt ์ผ์ ๋ฐ์ดํฐ ์์งํ๊ธฐ (1) | 2024.11.27 |
---|---|
docker ์์ telegraf, influxdb(2.x) ์ปจํ ์ด๋ ์ฌ๋ ค์ mqtt ์ผ์ ๋ฐ์ดํฐ ์์งํ๊ธฐ (1) | 2024.11.26 |
node-red API์ Auth์ค์ (2) | 2024.09.30 |
[Node-red] flow ์์ฑ (0) | 2023.11.21 |