MQTT ํ”„๋กœํ† ์ฝœ ๊ฐœ๋…๊ณผ ์ดํ•ด

๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”. ์š”์ฆ˜ ์กธ์—… ์ค€๋น„๊ฐ€ ํ•œ์ฐฝ์ด์–ด์„œ, (ํ•‘๊ณ„์ง€๋งŒ.. ใ…œใ…œ) ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์ž์ฃผ ๋ชป์“ฐ๊ฒŒ ๋˜๋Š”๊ตฐ์š”. 


MQTT ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. MQTT๋Š” ์ œ๊ฐ€ ํ˜„์žฌ ์กธ์—… ์ž‘ํ’ˆ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ธ๋ฐ์š”. ์ฒ˜์Œ์—๋Š” XMPP ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•˜๋ ค๊ณ  ํ•˜์˜€์œผ๋‚˜, ๊ต์ˆ˜๋‹˜์˜ ์กฐ์–ธ์œผ๋กœ MQTT ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.



MQTT๋Š” ๋ฌด์—‡์ผ๊นŒ, XMPP๋ž‘ ์ฐจ์ด๋Š”?

์ œ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ์—์„œ XMPP ๊ด€๋ จ ํฌ์ŠคํŠธ๋ฅผ ๋ณด์‹  ๋ถ„์ด์‹œ๋ผ๋ฉด, ์ด ๊ธ€๋„ ๋ฐ˜๋“œ์‹œ ์ฐธ๊ณ ํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ์ œ๊ฐ€ ์ฑ„ํŒ… ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด XMPP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. XMPP๋Š” ์˜ˆ์ „ Google Talk ๊ณผ Facebook Messenger ์—์„œ ์‚ฌ์šฉํ•œ ์ฑ„ํŒ… ํ”„๋กœํ† ์ฝœ๋กœ ํ˜„์žฌ๋Š” Hangouts ์„œ๋น„์Šค๋Š” XMPP์™€ ํ˜ธํ™˜๋˜๋Š” ์ž์ฒด ํ”„๋กœํ† ์ฝœ์„, Facebook Messenger๋Š” MQTT ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.


MQTT ํ”„๋กœํ† ์ฝœ์€ Message Queue TELEMETRY TRANSPORT ์˜ ์•ฝ์ž๋กœ, ํ†ต์‹  ์žฅ๋น„, ๋ชจ๋ฐ”์ผ, ์Šค๋งˆํŠธํฐ ๊ธฐ๊ธฐ์— ์ตœ์ ํ™”๋œ ๊ฐ€๋ฒผ์šด ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ๋กœ IoT ์žฅ๋น„์— ํ˜„์žฌ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. 


๋ฌผ๋ก  ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ์—๋Š” HTTP๋‚˜ HTTPS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, IoT์™€ ๊ฐ™์€ ๋ผ์ดํŠธ ์žฅ๋น„ (์ŠคํŽ™์ด ๋†’์ง€ ์•Š์€ ์žฅ๋น„)์— ๋Œ€ํ•ด์„œ ๋‹จ์ˆœ ๋ฉ”์‹œ์ง• ๊ตํ™˜์„ ์œ„ํ•ด ๋ฌด๊ฑฐ์šด ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ๋งŒํผ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 


XMPP ํ”„๋กœํ† ์ฝœ์˜ ๊ฒฝ์šฐ, ๋ฉ”์‹œ์ง• ๊ตํ™˜์œผ๋กœ ์ ์ ˆํ•˜์ง€๋งŒ, ๋ฉ”์‹œ์ง€์˜ ํฌ๊ธฐ์™€ ํ˜•ํƒœ๊ฐ€ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ xml ํŒŒ์ผ ํ˜•์‹์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ MQTT ์ž…๋‹ˆ๋‹ค.



MQTT (MQ Telemetry Transport)

MQTT๋Š” Broker Pattern์„ ์ฑ„ํƒํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ ๊ฒฝ๋Ÿ‰ํ˜• ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ๋กœ, 1999๋…„ IBM, Eurotech์—์„œ ๊ฐœ๋ฐœํ•˜์˜€๋‹ค๊ฐ€ ํ˜„์žฌ IBM์—์„œ ๋ฒ„์ „ 3.1.1 ๊นŒ์ง€ ๋‚ด๋†“์•˜์Šต๋‹ˆ๋‹ค.


Broker Pattern์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ HTTP, XMPP์™€ ๊ฐ™์ด Client-Server Model์„ ์ˆ˜์šฉํ•˜์ง€๋งŒ, ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ํ”„๋กœํ† ์ฝœ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•  ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ์ฃผ๊ณ , ์„œ๋ฒ„๋Š” ๋ˆ„๊ฐ€, ๋ˆ„๊ตฌ์—๊ฒŒ ์–ด๋–ค ๋ฉ”์‹œ์ง€๋ฅผ ์ค„ ๊ฒƒ์ธ์ง€ ๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„, ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ Broker Pattern์€ Broker ๋ผ๋Š” ์ค‘๊ณ„์ž๊ฐ€ ์ค‘๊ณ„ ์„œ๋ฒ„ ๋“ฑ์œผ๋กœ ์กด์žฌํ•˜๊ณ , ํ•ด๋‹น ์„œ๋ฒ„์—์„œ Topic (์ฃผ์ œ)๋ฅผ ์„ ์ •ํ•˜๊ณ , ํ•ด๋‹น Topic ์˜ ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. 



Broker Pattern์„ ๊ฐ„๋‹จํžˆ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด ๋ดค์Šต๋‹ˆ๋‹ค. ์Šค๋งˆํŠธํฐ์—์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—๊ฒŒ ์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์Šค๋งˆํŠธํฐ์—์„œ๋Š” ๋ธŒ๋กœ์ปค์—๊ฒŒ Topic๋ฅผ ๋˜์ ธ์ฃผ๊ณ , ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์Šค๋งˆํŠธํฐ์ด ๋งŒ๋“ค์–ด ๋†“์€ Topic ์„ ๊ตฌ๋…ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์˜ฌ ๋•Œ๋งˆ๋‹ค ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ, ์™ผ์ชฝ์— ์žˆ๋Š” Sensor Device ๋“ค๋„ ์ž์‹ ๋“ค์˜ Topic์„ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น Topic์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด์ง€์š”.


์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, 1 : 1 ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, 1 : N, N : N ํ†ต์‹ ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น Topic์„ ๊ตฌ๋…(Subscribe)ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ , ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰(Publish) ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ์ผ๋ฐ˜์ ์ธ ์ฑ„ํŒ… ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋น„ํ•˜๋ฉด ๊ต‰์žฅํžˆ ๋ฆฌ์†Œ์Šค๋ฅผ ๋œ ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.



MQTT ํŠน์ง• ์ •๋ฆฌ

์œ„์—์„œ ๊ฐ„๋‹จํ•œ ํŠน์ง•์„ ์„ค๋ช…ํ•ด ๋“œ๋ ธ๋“ฏ์ด MQTT๋Š” ์ผ์ •ํ•œ ์ฃผ์ œ๋ฅผ ๋†“๊ณ , ํ•ด๋‹น ์ฃผ์ œ๋ฅผ ์„œ๋ฒ„์— ์ž…๋ ฅํ•ด ์ฑ„ํŒ…ํ•˜๋Š” ํ†ต์‹  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ์—ฌ๋Ÿฌ ํŠน์ง•๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.


- ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ€๋ฒผ์šด ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ

- ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด ํ—ค๋” ํฌ๊ธฐ๋ฅผ ๋Œ€ํญ ์ค„์ด๊ณ , Payload ๋ฐ์ดํ„ฐ์— ์ค‘๋ฆฝ

- QoS ์ง€์›

- ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์„ ๋•Œ์˜ ๋ณด์ • ๊ธฐ๋Šฅ ์ œ๊ณต

- TLS/SSL ์ง€์› (X.509๋ฅผ ์ด์šฉํ•œ ์–‘๋ฐฉํ–ฅ ์ธ์ฆ ์ง€์›)

- ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐฉ์‹ ์ œ๊ณต

- ์˜คํ”ˆ ์†Œ์Šค


MQTT๋ฅผ ๋„์ž…ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ํฌ๊ฒŒ ๊ณ ๋ คํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด, ์•„๋งˆ ๋ณด์•ˆ ๋ฌธ์ œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. http, xmpp๋Š” TLS/SSL ๋“ฑ์„ ์‚ฌ์šฉํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. MQTT์—์„œ๋„ ์ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด, ์•ˆ์‹ฌํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.


ํ”„๋กœํ† ์ฝœ ์ž์ฒด๊ฐ€ ๊ฐ€๋ฒผ์›Œ์„œ IoT์— ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Raspberry PI ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ํฌํŒ…ํ•  ์ˆ˜ ์žˆ๊ณ , Windows ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.



MQTT Broker

MQTT๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ๊ณผ ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์žˆ๊ณ , ๊ทธ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘๊ณ„ํ•ด ์ค„ Broker๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. MQTT Broker์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


MQTT Broker list


Netty ๊ธฐ๋ฐ˜์—์„œ ๋™์ž‘ํ•˜๋Š” Mosquette, Eclipse์—์„œ ๊ฐœ๋ฐœํ•œ Paho ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด ์ค‘์—์„œ Mosquitto๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋งŽ์€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ณ , ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ œ์•ฝ์€ ์•„์ง ์กด์žฌํ•˜์ง€๋งŒ, MQTT๋ฅผ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ฐ€์žฅ ๋ฌด๋‚œํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ Facebook ์—์„œ๋„ Broker๋กœ Mosquitto๋ฅผ ์ฑ„ํƒํ•ด ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.



๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ MQTT์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ํ”„๋กœํ† ์ฝœ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ตœ๊ทผ์—๋Š” ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ํ”„๋กœํ† ์ฝœ์ด ๋„๋ฆฌ ์“ฐ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–˜๊ธฐํ•œ ์ฑ„ํŒ… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ผ์„œ๋“ค ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜, Push ์•Œ๋ฆผ ๋“ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Push ์•Œ๋ฆผ๋„ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ผ์„œ๋“ค ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜์—๋Š” ์ „๋ ฅ ํ•œ๊ณ„์™€ ์„ฑ๋Šฅ ํ•œ๊ณ„์น˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ „๋ ฅ์„ ๋งŽ์ด ์†Œ๋ชจํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ, IoT ์žฅ๋น„์—์„œ ๋ถˆ๋ฆฌํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด์ง€์š”.


๋งŒ์•ฝ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด, MQTT ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ์„ ํ•œ ๋ฒˆ ๊ถŒํ•ด๋ด…๋‹ˆ๋‹ค. 


Linux์—์„œ Mosquitto ์„ค์น˜


์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ธ€์„ ๋ณด์‹œ๋ ค๋ฉด ์œ„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments