์์ ์ํผ์ ๊ฐ์ ์ ๋ฆฌํ OSI ๋ชจ๋ธ๊ณผ TCP/IP ์ ๋ฆฌ๋ MQTT๋ฅผ ์ํจ์ด์๋ค.
1. MQTT(๋ฉ์์ง ํ์ ํ ๋ ๋ฉํธ๋ฆฌ ํธ๋์คํฌํธ, Message Queuing Telemetry Transport)๋?
- ์ฐ์ , Telemetry Transport์ ๋ํด ์์๋ณด์๋ฉด, ์ ์ก์ ์ ์ก์ธ๋ฐ.. ํ ๋ ๋ฉํธ๋ฆฌ ์ด๊ฒ ํฉ์ฑ์ด์ด๋ค.
- ์๊ฒฉ์ ์๋ฏธํ๋ 'Tele'์ ์ธก์ ์ ์๋ฏธํ๋ 'Metry'์ ํฉ์ฑ์ด๋ก ์๊ฒฉ์ง์ ์ํ๋ฅผ ๊ฐ์ ๋ฐ ์ ์ดํ๊ธฐ ์ํด ๊ธฐ๊ณ๊ฐ ๊ฐ์ข ๋ฐ์ดํฐ๋ฅผ ๋์งํธ ์ ํธ๋ก ๋ฐ๊ฟ์ ์๊ฒฉ์ผ๋ก ์ก์์ ํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ฆ, ์ ์ด์ M2M(Machine-to-Machine)์ ์ํ ํ๋กํ ์ฝ์ธ ์ ์ด๋ค. ๋ํ, ์์ฆ์ ์ฌ๋ฌผ์ธํฐ๋ท์๋ ์ฐ์ด๋ ๊ฒฝ๋ ๋ฉ์ธ์ง ์ ์ก ํ๋กํ ์ฝ์ด๋ค.
- ์ํคํผ๋์๋ฅผ ๋ณด๋ฉด MQTT๋ฅผ 7๊ณ์ธต์ 7๋ฒ์งธ์ธ ์์ฉ๊ณ์ธต์ผ๋ก ๋ถ๋ฅ๋ฅผ ํด๋์๋๋ฐ, ์ฌ์ค No TCP/IP ํ๊ฒฝ์์๋ ์ธ ์ ์๋ค๋ณด๋, ๊ฒฝ๋์ ๊ธฐ๊ธฐ์ ํต์ ์ ํ ๋๋ MQTT๊ฐ ๊ธฐ๊ธฐ์ชฝ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ญํ ๋ ํ๋ ํ๋กํ ์ฝ์ด๋ผ ๋ด๋ ๋ ๊ฒ ๊ฐ๋ค.
2. ๋ฐํ-๊ตฌ๋ ๋ชจ๋ธ (Pub/Sub Model)
- MQTT๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐํ-๊ตฌ๋ ๋ชจ๋ธ์ธ๋ฐ, ์ด๋ ๋ฐํํ๋ ๋ฐํ ํด๋ผ์ด์ธํธ์ ๊ตฌ๋ ํด๋ผ์ด์ธํธ ๊ฐ์ ํต์ ๋ชจ๋ธ์ด๋ค.
- ๋น๋๊ธฐ ๋ฉ์์ง ํจ๋ฌ๋ค์์ด๋ฉฐ, ๋ฐ์ ์์ ๋ฉ์์ง๋ ์์ ์๊ฐ ํน์ ๋์ด ์์ง ์๋ค. ๋์ ๋ฐํ๋ ๋ฉ์์ง๋ ์ ํด์ง ๋ฒ์ฃผ์ ๋ฐ๋ผ ๊ตฌ๋ ์ ์ ์ฒญํ ์์ ์์๊ฒ ์ ๋ฌ๋๋ค. ์์ ์๋ ๋ฐํ์์ ๋ํ ์ง์์ด ์์ด๋ ์ํ๋ ๋ฉ์์ง๋ง์ ์์ ํ ์ ์๋ค.
- observer model๊ณผ ๋น์ทํ์ง๋ง ํฐ ์ฐจ์ด๋ ๋ฐํ ๊ตฌ๋ ๋ชจ๋ธ์๋ broker๊ฐ ์๋ค๋ ์ ์ด๋ค.
- ๊ณต๊ฐ๋ถ๋ฆฌ : ๊ฒ์์์ ๊ฐ์ ์๊ฐ ์๋ก๋ฅผ ์ ํ์๊ฐ ์๋ค. (์๋ฅผ ๋ค์ด IP์ฃผ์๋ผ๋ ์ง ํฌํธ๋ผ๋ ์ง)
- ์๊ฐ ๋์ปคํ๋ง : ๊ฒ์์์ ๊ฐ์ ์๋ฅผ ๋์์ ์ฐ๊ฒฐํ ํ์๊ฐ ์๋ค.
- ๋๊ธฐํ ๋์ปคํ๋ง : ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ๋ฐ๋ ๋์ ๋ ๊ตฌ์ฑ ์์์ ๋ํ ์์ ์ด ์ค๋จ๋์ง ์๋๋ค.
(1) ์๋ ์์
- Subscriber๋ Broker์๊ฒ ์์ ์ด ๋ฐ์ Topic๋ค์ ๋ํ ์ ๋ณด๋ฅผ ์์ฒญํ๋ค.(Subscribe)
- Broker๋ ๋ฉ๋ชจ๋ฆฌ์ Topic๋ณ๋ก subscribeํ๋ client์ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋ค๊ฐ, Publisher๊ฐ ํด๋น Topic์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ฉด ๊ตฌ๋ ํ๊ณ ์๋ client ์ ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ค๋ค.(Publish)
- ํ๋ง๋๋ก, ๋ฐํ์๊ฐ ๋ฐํํ ๊ฑฐ๋ฅผ ๋ชฝ์ฌ ๋ฐํํ๋ฉด, ๋ธ๋ก์ปค๋ ๋ฐํํ ํ ํฝ๋ค์ ๋ณด๊ณ ์๋ง๊ฒ ํํฐ๋งํด์ ๊ตฌ๋ ์์๊ฒ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ธ๋ก์ปค๋ ๋ค์ด์ค๋ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ํํฐ๋งํด์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ๋ ์์๊ฒ ๋ฐฐํฌํ๋ค.
(2) Topic
- ํ ํฝ์ ๋ฌธ์์ด(UTF)๋ก ๊ตฌ์ฑ๋์ด์๊ธฐ ๋๋ฌธ์ /๋ฅผ ์ด์ฉํ์ฌ ํธ๋ฆฌ๊ตฌ์กฐ์ฒ๋ผ ํํฅ์์ผ๋ก ๊ด๋ฆฌํ ์ ์์ด์, ๋๋์ ์ผ์ ๊ธฐ๊ธฐ๋ค์ ๊ด๋ฆฌํ ๋ ํจ์จ์ ์ด๋ค.
- ์์ผ๋์นด๋ : ํ ํฝ์ ์๋ ์ฅ์ธ๋ฐ, + ์ * ๊ฐ ์๋ค ๋ง์ฝ์ ๊ตฌ๋ ์๊ฐ ์์ ์ฌ์ง์์ building/first/* ์ฒ๋ผ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ ํ๋ฉด restaurant์ bathroom์ ํ์ ์ ๋ณด๊น์ง ๋ค ๋ฐ์๊ฐ ์ ์๋ ๊ฒ์ด๋ค. ์ฆ, * ์ด ์์ผ๋ ์นด๋๋ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ์ง ํ์ ๋ ธ๋ ์ ๋ถ๋ฅผ ๋์์ ๊ตฌ๋ ํ ์ ์๊ฒ ํด์ค๋ค. ํ์ง๋ง ์ด ์์๊ฐ ํ๋ฆฐ์ ์ ์์๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ(๋จ๋ง๋ ธ๋)์๋ง ์ธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ์ temperature์ Humidity๊ฐ ์์ผ๋ฉด * ์ด๊ฑธ ์ธ์ ์๋ค.
- ๋ง์ฝ์ /first ๋ถ๋ถ์ ํ์ ํด๋์ ๋๊ฐ์ ๊ฒฝ๋ก๋ก /second๊ฐ ์๋ค๊ณ ์ณ๋ณด๋ฉด ์ด๊ฒฝ์ฐ building/+/restaurant/temperature ๋ฅผ ํ๋ฉด ์ฒซ๋ฒ์งธ ๋๋ฒ์งธ ์๋น์ ์จ๋๋ฅผ ๋ค ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
3. QoS (Quality of Service)
- ์๋น์ค์ ์ง์ ๋ณด์ฅํด์ฃผ๋ ๋ ๋ฒจ์ ์๋ฏธํ๋๋ฐ, 3๋ ๋ฒจ๋ก ๋์ด์๋ค.
- ๋คํธ์ํฌ ์ฅ์ ๋ ์์ฉ ํ๋ก๊ทธ๋จ ๋ค์ ์์ ๋ฐ ๊ธฐํ ์์์น ๋ชปํ ์ํฉ์์ ์์ ์์ ๋์ด๊ธฐ ์ํด ์ถ๊ฐ ์ง์์ฑ ๋ฐ ์ฌ์ ์ก ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค.
- Level 0 : ๋ฉ์์ง๋ ํ๋ฒ๋ง ์ ๋ฌ๋๋ฉฐ ์ ๋ฌ์ ์ฑ๊ณต์ฌ๋ถ๋ ํ์ธํ์ง ์๋ ๋ ๋ฒจ์ด๋ค. ํ๋ฒ์ ์ ์ก์ด ์ฑ๊ณตํ์ง ์์ผ๋ฉด ์คํจํ ์ํ๋ก ๋์ด๋๋, ์ฌ์ค์ QoS ๋ณด์ฅ์ ํ์ง ์๋ ๋ ๋ฒจ์ด๋ค.
- Level 1 : ๋ฉ์์ง๋ ์ต์ ํ๋ฒ ์ด์ ์ ๋ฌ๋๋ฉฐ, ๋ฐํ์์๊ฒ PUBACK์ ์ ๋ฌํ์ฌ, ์ฑ๊ณต์ฌ๋ถ๋ฅผ ์๋ฆฐ๋ค.
****์ด ๋ ๋ฒจ์์ ๊ตฌ๋ ์์๊ฒ ์ค๋ณต ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์๋ ์๋๋ฆฌ์ค
1. ๋ฐํ์๊ฐ ๋ธ๋ก์ปค์๊ฒ ์ ์์ ์ผ๋ก ๋ณด๋ธ๋ค
2. ๋ธ๋ก์ปค๋ ๋ฐ์ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ์์๊ฒ ์ ์์ ์ผ๋ก ๋ณด๋ธ๋ค. (๊ตฌ๋ ์๋ ๋ฉ์์ง 1ํ ๋ฐ์)
3. ๋ธ๋ก์ปค๋ ๋ฉ์์ง๋ฅผ ๋ณด๋์ผ๋ฏ๋ก PUBACK์ ๋ฐํ์์๊ฒ ๋ณด๋ธ๋ค.
4. ๊ทธ๋ฌ๋ PUBACK์ด ์ ๋ฌ ์ค์ ์ฌ๋ผ์ก๋ค. (LOSS ๋ฐ์)
5. ๋ฐํ์๋ PUBACK์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ, ์๊ฐ์ด ์ง๋์ ์ ์ก์ด ์คํจํ ์ค ์๊ณ ๋ค์ ๋ธ๋ก์ปค์๊ฒ ๋ณด๋ธ๋ค. (Duplicate Publish)
6. ๋ธ๋ก์ปค๋ ๋ฉ์์ง์ ๊ดํ ์ ๋ณด๋ฅผ ์ง์ ๊ธฐ ๋๋ฌธ์, ์ฒ์ ๋ฐ๋ ๋ฉ์์ง์ธ ์ค ์๊ณ ๋ค์ ๊ตฌ๋ ์์๊ฒ ๋ณด๋ธ๋ค. (๊ตฌ๋ ์ ๋๊ฐ์ ๋ฉ์์ง 2๋ฒ์งธ ๋ฐ์)
7. ๋ค์ PUBACK์ ๋ณด๋ด๊ณ , ์ ์์ข ๋ฃ๋๋ค.
8. ๋ฐํ์๊ฐ PUBACK์ ๋ฐ๊ณ , ํต์ ์ ์ข ๋ฃ๋๋ค.
- Level 2 : PUBACK์ ๊ณผ์ ์ 3Way Handshaking์ผ๋ก ๋ฐ๊ฟ์ผ๋ก์จ ์ ํํ 1๋ฒ๋ง ๊ฐ๋๋ก ๊ตฌํํ์๋ค. ๋ค๋ง, ์ด ๊ณผ์ ์ ํต์ ์ค๋ฒํค๋๋ฅผ ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์ ๊ผญ ์์ค์ด๋ ๋ณต์ ๊ฐ ํ์ฉ๋๋ฉด ์๋ ๋ ์ฌ์ฉํ๋ฉด ์ข์ ์ต์ ์ด๋ค.
*****์๋ ์๋๋ฆฌ์ค
1. ๋ฐํ์ ๋ฉ์์ง ๋ธ๋ก์ปค์๊ฒ ๋ณด๋
2. ๋ธ๋ก์ปค๊ฐ ๊ตฌ๋ ์์๊ฒ ๋ฉ์์ง ์ ๋ฌํ๋ค. (๊ตฌ๋ ์ ๋ฉ์์ง 1๋ฒ ์ ๋ฌ๋ฐ์)
3. Broker๊ฐ Publisher์๊ฒ PUB Recevied๋ฅผ ๋ณด๋ธ๋ค.
4. PUBREC์ด ๋ถ์ค๋์ด Publisher๊ฐ ๋ค์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋, Broker๋ ๋ฉ์์ง๋ฅผ ์ด๋ฏธ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ Subscriber์๊ฒ ๋ค์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ง ์๊ณ PUBREC๋ฅผ ๋ค์ ๋ณด๋ธ๋ค.
5. Publisher๋ PUBREC๋ฅผ ๋ฐ์ผ๋ฉด, ์ด์ ์์ผ Publish Release ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
6. PUBREL์ด loss๋๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์๋ค. ๋ธ๋ก์ปค๋ ์ด๋ฏธ ๋ณด๋๋ค๋ ์ฌ์ค์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ก ๋ณด๋ด์ง ์๋๋ค.
7. PUB REL์ ๋ฐ์ผ๋ฉด, ์ด์ ์์ผ ๋ฉ์์ง๋ฅผ ์ญ์ ํ๋ค.
8. ๋ฉ์์ง๋ฅผ ์ ์ ์ข ๋ฃํ์์ผ๋ฏ๋ก PUBCOMPLETE๋ฅผ ๋ณด๋ธ๋ค.
4. MQ broker
(1) Mosquitto ์๊ฐ
- C๊ธฐ๋ฐ, ํด๋ฌ์คํฐ๋ง์ด ์๋๋ MQ broker์ด๋ค.
- ๋ธ๋ฆฌ์ง ํ๋กํ ์ฝ์ ํตํด ๋ธ๋ก์ปค๋ฅผ ์๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
- ์ผ์ ์๊ฐ ํจํท์ด ์์ค๋ฉด ํํธ๋นํธ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ธฐ ์์ํ๊ณ , ๋ฉ์ธ์ง๊ฐ ์์ค๋ฉด ๋์ด๋ฒ๋ฆฐ๋ค๋๋ฐ, ์ด๋ถ๋ถ์ ํ์ฌ ์ฝ๋ ๊น๋ณด๋ฉด์ ์ข ๋ ์ดํดํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
- ์ฌ๋ด์ด์ง๋ง ๋๋๊ฒ๋ ์ํ์น ์นดํ์นด๋ MQ broker๋ค ใ ใทใท
(2) ์ธ์ ์ฒ๋ฆฌ
- ํด๋ผ์ด์ธํธ๊ฐ MQTT ๋ธ๋ก์ปค์ ์ฐ๊ฒฐํ๋ฉด ์ง์์ ์ธ์ ์ ์์ฒญํ ์ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ง์์ ์ธ์ ์ ์์ฒญํ ๊ฒฝ์ฐ ๋ธ๋ก์ปค๋ ํด๋ผ์ด์ธํธ์ ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ํด๋ผ์ด์ธํธ์ ์ธ์ ์ ๋ณด์๋ ๋ค์์ด ํฌํจ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ๊ตฌ๋
- ์์ง ์ฒ๋ฆฌ๋์ง ์์ ๋ชจ๋ QoS 1/2 ๋ฉ์์ง
- ํด๋ผ์ด์ธํธ๊ฐ ์คํ๋ผ์ธ ์ํ์์ ๋์น ๋ชจ๋ QoS 1/2 ๋ฉ์์ง
(3) ํํธ๋นํธ
- MQTT CONNECT ๋ฉ์์ง๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฉ์์ง ๊ตํ ์ฌ์ด์ ์ต๋ ์๊ฐ ์ข ๋ฃ๋ฅผ ์ง์ ํ ์์๋ keepAlive ๊ฐ (์ด)์ ํฌํจํ๋ค. ์ด๋ก ์ธํด keepAlive ๊ฐ์ด ๊ฐ์ 150 %๋ฅผ ์ด๊ณผํ๋ฉด ๋ธ๋ก์ปค๊ฐ ๋ฐ ๊ฐ๋ฐฉ ์ฐ๊ฒฐ์ ๊ฐ์งํ๊ณ (์ด๋ฏธ ์ฐ๊ฒฐ์ด ๋๊ธด) ํด๋ผ์ด์ธํธ์ ๋ํ ์ฐ๊ฒฐ์ ๋ซ์ ์ ์๋ค. ๋ฐ๋ผ์ ๋ธ๋ก์ปค์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ์ฐ๊ฒฐ์ด ์ฌ์ ํ ์ค์ ๋์ด ์๊ณ ๋ค๋ฅธ ๋ฉ์์ง ๊ตํ์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๋ keepAlive ๊ฐ๊ฒฉ ๋ด์์ PINGREQ ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค๋ก ๋ณด๋ธ๋ค. ๋ธ๋ก์ปค๋ PINGRESP ๋ฉ์์ง๋ก ์๋ตํ๋ค. ๋ชจ๋ ํด๋ผ์ด์ธํธ๋ ์ฐ๊ฒฐ์ keepAlive ๊ฐ์ ์ง์ ํ๋ฉฐ ์ต๋ ๊ฐ์ 65535 ์ด (18 ์๊ฐ 12 ๋ถ 15 ์ด)์ด๋ค.
(4) MQTT control Packet ๊ตฌ์กฐ
- DUP๋ PUBLISH ์ ์ด ํจํท์ ์ค๋ณต ์ ๋ฌ์ ๋ํ๋ด๊ณ , QoS๋ PUBLISH ์๋น์ค ํ์ง์ ๋ํ๋ด๋ฉฐ RETAIN์ PUBLISH ํ๋๊ทธ ์ ์ง๋ฅผ ๋ํ๋ธ๋ค.
- Flag๋? ๋ฌด์์ธ๊ฐ๋ฅผ ๊ธฐ์ตํด์ผ ํ๊ฑฐ๋ ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์๊ฒ ์ฝ์๋ ์ ํธ๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํ ์ฉ๋๋ก ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ๋ฏธ๋ฆฌ ์ ์๋ ๋นํธ๋ฅผ ์๋ฏธ. (์: ACK ์๋ตํ๋๊ทธ)
5. ๊ฐ์ด ์ฐ๋ ํ๋ก๊ทธ๋จ
(1) paho
- ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ๋ MQTT ํด๋ผ์ด์ธํธ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์จ, ๋ธ๋ก์ปค ๊ธฐ๋ฅ์ ์๊ณ ๊ตฌ๋ , ๋ฐํ ํด๋ผ์ด์ธํธ ์์ฑ์ ์ํ ๊ธฐ๋ฅ์ด ์๋ค.
6. ์์ฉ ์์