header-img
Info :
728x90


MQTT ๊ณต์‹ ๋กœ๊ณ 

MQTT๋ž€?

MQTT(Message Queueing Telemetry Transport)

2016๋…„ ๊ตญ์ œ ํ‘œ์ค€ํ™” ๋œ (ISO ํ‘œ์ค€ ISO/IEC PRF 20922) ๋ฐœํ–‰-๊ตฌ๋…(Publish-Subscribe) ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€ ์†ก·์ˆ˜์‹  ํ”„๋กœํ† ์ฝœ

  • ์ž‘์€ ์ฝ”๋“œ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ์ œํ•œ๋˜๋Š” ์›๊ฒฉ ํ†ต์‹ ์„ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœํ† ์ฝœ
  • ์ฆ‰, IoT์™€ ๊ฐ™์€ ์ œํ•œ ๋œ ํ˜น์€ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ „์†ก์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœํ† ์ฝœ
    • TCP/IP ํ”„๋กœํ† ์ฝœ ์œ„์—์„œ ๋™์ž‘ํ•˜์ง€๋งŒ ๋™์‹œ์— ๊ต‰์žฅํžˆ ๊ฐ€๋ฒผ์šฐ๋ฉฐ, ๋งŽ์€ ํ†ต์‹  ์ œ์•ฝ๋“ค์„ ํ•ด๊ฒฐํ•ด์คŒ
  • ๋‹จ, ๋ฉ”์„ธ์ง€๊ฐ€ ๊ฐ€๋ฒผ์šด ๋งŒํผ ๋ฉ”์„ธ์ง€ ์œ ํ˜•์ด๋‚˜ QoS(์„œ๋น„์Šค ํ’ˆ์งˆ)์—๋Š” ์ œ์•ฝ์ด ์กด์žฌ

MQTT ํŠน์ง•

1. ์—ฐ๊ฒฐ์ง€ํ–ฅ์ (Connection Oriented)

  • ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ์žฌ์ ‘์† ๊ฐ€๋Šฅ
  • Live ๋ผ๋Š” ํ•˜ํŠธ๋น„ํŠธ์™€ Topic ์— ๋ฐœํ–‰๋˜๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ณ  ๋ฉ”์„ธ์ง€ ์†ก์ˆ˜์‹ ์„ ํ•˜๊ฒŒ ๋จ

2. ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•œ ํ†ต์‹ 

  • MQTT์˜ ๋ฐœํ–‰-๊ตฌ๋… ๋ฉ”์‹œ์ง• ํŒจํ„ด์€ ์˜ค๋กœ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐœ์„ค๋œ Topic์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉด ํ•ด๋‹น Topic์„ ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋“ค์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.
  • 1:1, ๅคš:ๅคš ํ†ต์‹  ๋ชจ๋‘ ๊ฐ€๋Šฅ

3. QoS (Quality of Service)

  • 0 : ์ตœ๋Œ€ 1ํšŒ ์ „์†ก. Topic์„ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•  ๋ฟ ๋ณด์žฅ์€ ํ•˜์ง€ ์•Š์Œ. (๋ณด๋‚ธ ๋‹ค์Œ ์žŠ์–ด๋ฒ„๋ฆผ)
  • 1 : ์ตœ์†Œ 1ํšŒ ์ „์†ก. ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ๋ถˆํ™•์‹คํ•˜๋ฉด ์ •ํ•ด์ง„ ํšŸ์ˆ˜๋งŒํผ ์žฌ์ „์†ก.
    • ๋ฉ”์„ธ์ง€์˜ ํ•ธ๋“œ์…ฐ์ดํ‚น ๊ณผ์ •์„ ์—„๋ฐ€ํ•˜๊ฒŒ ์ถ”์ ํ•˜์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ ์ค‘๋ณต์˜ ์œ„ํ—˜์„ฑ ์กด์žฌ (ํ™•์ธ ์‘๋‹ต์„ ๊ฑฐ์น˜๋Š” ์ „๋‹ฌ)
  • 2 : ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”๊ตฌ๋œ ๋ฉ”์„ธ์ง€๋ฅผ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅ. ๋ฉ”์‹œ์ง€์˜ ํ•ธ๋“œ์…ฐ์ดํ‚น ๊ณผ์ •์„ ์ถ”์ .
    • ๋†’์€ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์˜ ํฌ์ƒ์ด ๋”ฐ๋ฅธ๋‹ค. ๋ณด์žฅ๋œ ์ „๋‹ฌ
  • ์ด ํ•„๋“œ๋Š” ๊ธฐ๋ฐ˜์ด ๋˜๋Š” TCP/IP ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์ฒ˜๋ฆฌ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ, MQTT ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž ๊ฐ„์—๋งŒ ์‚ฌ์šฉ๋จ
  • ๋ฉ”์„ธ์ง€๋Š” ๊ธ€์ž ์ˆ˜ ์ œํ•œ์ด ์—†์œผ๋ฏ€๋กœ, ๊ธด ๋ฉ”์„ธ์ง€๋‚˜ JSON ํฌ๋งท ๋˜๋Š” ํŒŒ์ผ๋„ ์ „์†ก์ด ๊ฐ€๋Šฅํ•จ.

 0~1 ์ •๋„์˜ QoS ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฉ”์„ธ์ง€ ์†์‹ค์˜ ์œ„ํ—˜์€ ์ƒ์œ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฐจ์›์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋„๋ฆฌ ์“ฐ์ž„

4. ๋ฉ”์„ธ์ง€ ์œ ํ˜•

์—ฐ๊ฒฐํ•˜๊ธฐ

: ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ, ๋…ธ๋“œ ๊ฐ„ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์—ฐ๊ฒฐ๋Š๊ธฐ

: MQTT ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ ์Šค์œ„ํŠธ ์„ธ์…˜์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆผ

๋ฐœํ–‰ํ•˜๊ธฐ

: MQTT ํด๋ผ์ด์–ธํŠธ์— ์š”์ฒญ์ด ์ „๋‹ฌ๋œ ์งํ›„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ์— ์ฆ‰์‹œ ๋ฐ˜ํ™˜

5. ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ์–ธ์–ด์˜ ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ ์ง€์›

C/C++/Java/Node.js/Python/Arduino ๋“ฑ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๋กœ ๋ธŒ๋กœ์ปค์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌ

MQTT ๋™์ž‘ ๊ตฌ์กฐ

Topic Wildcard

  • Single-Level Wildcard : +
    - myhome / groundfloor / + / temperature ์˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ
  • Multi-Level Wildcard : #
    - myhome / groundfloor / # ์˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ

ํ† ํ”ฝ ๊ตฌ์กฐ ๊ตฌ์„ฑ ์‹œ ์ฃผ์˜์ 

  1. ์ตœ์ƒ์œ„ ํ† ํ”ฝ์ด [/] ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋„๋ก : [/home/sensor/humid] ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ตœ์ƒ์œ„ ํ† ํ”ฝ์ด ์ด๋ฆ„์ด ์—†๋Š” ํ† ํ”ฝ์ด ๋˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  2. ํ† ํ”ฝ ์ด๋ฆ„์— ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ํ† ํ”ฝ ์ด๋ฆ„์€ ASCII ๋ฌธ์ž ๋งŒ ์‚ฌ์šฉ. (์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ฃผ์˜)
  4. [#] ์„ ์ด์šฉํ•˜์—ฌ ํ† ํ”ฝ ์ „์ฒด๋ฅผ ๊ตฌ๋…ํ•˜์ง€ ์•Š๋„๋ก. ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์‹ฌํ•  ๊ฒฝ์šฐ ๋ธŒ๋กœ์ปค/ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Œ.

MQTT ๋ธŒ๋กœ์ปค

MQTT ํ”„๋กœํ† ์ฝœ ๋ถ„์„๊ณผ ํ…Œ์ŠคํŠธ ๊ธ€ ์ฐธ์กฐ

WebSocket VS. MQTT

WebSocket์˜ ์žฅ์ 

  1. ์›น์†Œ์ผ“์€ HTML5 ์™€ ํ•จ๊ป˜ Web ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ฃผ๋ชฉ์ ์œผ๋กœ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น์†Œ์ผ“์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Œ. 
  2. ์ตœ์ดˆ ์—ฐ๊ฒฐ์— HTTP/S๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹  ํ™˜๊ฒฝ ๋“ฑ์— ์˜ํ–ฅ ์—†์ด ์•ˆ์ •์ ์ธ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฆฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. Server-Client ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Connection์— ๋Œ€ํ•œ ์ง์ ‘์  ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

MQTT์˜ ์žฅ์ 

  1. ๋ฐœํ–‰/๊ตฌ๋… ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋Œ€๋‹ค ์ „์†ก์ด ์šฉ์ด
  2. QoS(Quality of Service)๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋ณด์ฆ
  3. ๋ฉ”์„ธ์ง€ ์ „์†ก ํ›„ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ”๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋Š” ํŒจํ‚ท์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—(PUBACK) ์ „์†ก์— ์‹คํŒจํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์žฌ์ „์†ก ํ•  ์ˆ˜ ์žˆ์Œ
  4. ์ž‘์€ ํŒจํ‚ท ํฌ๊ธฐ๋กœ ์ธํ•ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๊ณ  ์ €์ „๋ ฅ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘์ด ๊ฐ€๋Šฅ

WebSocket vs MQTT ?

WebSocket์€ ๋” ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, MQTT๋Š” ๋” ๋†’์€ ๋ ˆ๋ฒจ์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•๋ก ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์€ ๋น„๊ตํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์ƒ์ด๋‹ค.
→ ์›น ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ WebSocket ๋Œ€์‹  MQTT๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ํ•„์š”ํ•œ ๊ฒƒ์ด๋ฉฐ, ๊ทธ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„์€ WebSocket ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ€๋ฒผ์šธ ๊ฒƒ

MQTT ๋Š” ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท(IoT)๋ฅผ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ... ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ IoT ์žฅ์น˜์™€ ์—ฐ๊ฒฐํ•˜๋„๋ก ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ

MQTT ๋Š” ๋””๋ฐ”์ด์Šค์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๊ณ , ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์ด ์•„๋‹ˆ๋ผ, device์™€ cloud ๊ฐ„ ์†ก์ˆ˜์‹ ์„ ํ•˜๋Š” ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค.
 HTTP ํ†ต์‹ ์€ ์š”์ฒญ-์‘๋‹ต ๊ธฐ๋ฐ˜์ด์–ด์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋จผ์ € ์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ์„œ๋ฒ„์™€ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•จ. ๋ฐ˜๋ฉด์— MQTT๋Š” ํด๋ผ์ด์–ธํŠธ ํ˜น์€ ์„œ๋ฒ„ ๋‘˜ ์ค‘ ๋ˆ„๊ตฌ๋‚˜ ํ†ต์‹ ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž + ๋””๋ฐ”์ด์Šค ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ์„ฑ๋Šฅ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ.. MQTT์˜ Publish/Subscribe ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•ด๋ณด๋Š” ๋“ฏ ? 

๋„์ž… ์‚ฌ๋ก€: Facebook Messenger

๋„์ž… ์‚ฌ๋ก€ : ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค

MQTT ์ ์šฉ์„ ํ†ตํ•œ ์ค‘๊ณ„์‹œ์Šคํ…œ ๊ฐœ์„ 

์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์˜ 'MQTT ์ ์šฉ์„ ํ†ตํ•˜ ์ค‘๊ณ„์‹œ์Šคํ…œ ๊ฐœ์„ ' ๊ธ€์—์„œ ์ ์šฉ ํšจ๊ณผ ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด๋ฉด ๊ฐ„๊ฒฐ, ์ •ํ™•์„ฑ, API ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐ ํŠธ๋ž˜ํ”ฝ ๋ฐฉ์ง€ ๋“ฑ์„ ์œ„ํ•ด ์†Œ์ผ“ํ†ต์‹  ๋Œ€์‹  MQTT ๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๋“ฏ ํ•˜๋‹ค.


์›น ๊ฐœ๋ฐœ์—์„œ๋Š” MQTT๊ฐ€ ๊ตณ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์—์„œ๋„
'์›น๊ณผ ์•ฑ์—์„œ ๋ชจ๋‘ ์„œ๋น„์Šค ์‹œํ‚ค๊ณ  ์‹ถ์€ ๋ฐ.. ์„œ๋น„์Šค ๊ทœ๋ชจ๊ฐ€ ํฐ ๊ฒฝ์šฐ' ์ฑ„ํƒ์„ ๋งŽ์ด ํ•˜๋Š” ๋“ฏ ํ•˜๋‹ค.
'+ ์ฑ„ํŒ… ๊ฐ™์€ ์–‘๋ฐฉํ–ฅ ์†Œํ†ต์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ์—

MES์—๋„ ์ด๊ฒŒ ํ•„์š”ํ•  ์ •๋„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋‚˜ ์‹ถ๊ธฐ๋Š” ํ•˜์ง€๋งŒ,
์กฐ๊ธˆ ๋” ์„œ๋ฒ„์— ๋ถ€ํ•˜์™€ ์ž‘์—… ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด MQTT๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์•ฝ๊ฐ„์˜ ์ƒ๊ฐ๊ณผ ํ•จ๊ป˜ MQTT ์ •๋ฆฌ๊ธ€์„ ๋งˆ์น˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 
728x90
๋”๋ณด๊ธฐ
BACKEND/๊ณต๋ถ€