Linux์—์„œ MQTT Broker, Mosquitto ์„ค์น˜

๋ฐ˜์‘ํ˜•


MQTT๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋ ค ํ•˜์‹œ๋‚˜์š”?

๊ทธ๋ ‡๋‹ค๋ฉด, ๋จผ์ € ์•„๋ž˜์˜ ๊ธ€์„ ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


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



์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ MQTT์— ๋Œ€ํ•œ ๊ฐœ๋…๊ณผ ๊ฐ„๋‹จํ•œ ํŠน์ง•์„ ์†Œ๊ฐœํ•ด ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” MQTT Broker๋ฅผ ์„ค์น˜ํ•ด์„œ, ์ด๋ฅผ ๊ตฌ๋™ํ•ด๋ณด๊ณ  ์„œ๋น„์Šค๋ฅผ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. MQTT Broker์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ๊ทธ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด๊ณ  ๋ฌด๋‚œํ•œ mosquitto๋ฅผ ์„ค์น˜ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



Mosquitto ์„ค์น˜

๋ฆฌ๋ˆ…์Šค์—์„œ Mosquitto๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฆฌ๋ˆ…์Šค์˜ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์— ์žˆ๋Š” Mosquitto ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


$ sudo apt install mosquitto

ํ„ฐ๋ฏธ๋„์„ ์‹คํ–‰ํ•˜์—ฌ ์œ„ ๋ช…๋ น์–ด๋ฅผ ํƒ€์ดํ•‘ํ•ฉ๋‹ˆ๋‹ค. 


$ sudo systemctl status mosquitto.service

์„ค์น˜๊ฐ€ ๋๋‚ฌ์œผ๋ฉด ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ด…๋‹ˆ๋‹ค.



์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, ์œ„์™€ ๊ฐ™์ด MQTT v3.1 Broker๊ฐ€ ์‹คํ–‰์ด ๋  ๊ฒƒ์ด๋ฉฐ running ์ƒํƒœ์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.



Mosquitto ๊ธฐ๋ณธ ์„ค์ •

Broker๋ฅผ ์„ค์น˜ํ•˜์˜€์œผ๋‹ˆ ๊ฐ„๋‹จํ•œ ์„ค์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. MQTT Broker๋Š” Topic์„ ์„ ์ •ํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ Publish, Subscribe ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค. Broker๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


# vim /etc/mosquitto/mosquitto.conf 

vim ๋“ฑ์˜ ์—๋””ํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ mosquitto.conf ํŒŒ์ผ์„ ์—ด์–ด๋ด…๋‹ˆ๋‹ค.



๊ธฐ๋ณธ์ ์ธ ์„ค์ •์—๋Š” ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€, pid๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ pid ํŒŒ์ผ๊ณผ persistance ์˜ต์…˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. persistence๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์Šคํ† ๋ฆฌ์ง€ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ €์žฅ ํ˜•ํƒœ๋Š” ํŒŒ์ผ์ด ์•„๋‹Œ db ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” /var/lib/mosquitto ์—์„œ mosquitto.db ์˜ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.


๋ฐ”๊พธ๋ ค๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊พธ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


persistence true
persistence_location FILE_PATH
persistence_file FILE_NAME

์ถ”๊ฐ€๋กœ, ์ž๋™ ์ €์žฅ ๊ธฐ๋Šฅ ์˜ต์…˜๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋™ ์ €์žฅ์€ ์ž์ฃผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด, ๋””์Šคํฌ ๋ฆฌ์†Œ์Šค์— ๋ฌด๋ฆฌ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด์— ๋Œ€ํ•œ ์ฃผ๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์ €์žฅ ์ฃผ๊ธฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


persistence true
persistence_location FILE_PATH
persistence_file FILE_NAME

autosave_interval 3600

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒฝ์šฐ์— ์ €๋™ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ true ์ด์ง€๋งŒ, ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


persistence true
persistence_location FILE_PATH
persistence_file FILE_NAME

autosave_interval 3600
autosave_on_changes true

๊ทธ ์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋‹ˆ, ์•„๋ž˜์˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


mosquitto.conf



Publish / Subscribe

์„ค์น˜์™€ ์„ค์ •์„ ๋ชจ๋‘ ๋งˆ์ณค์œผ๋‹ˆ, ์ด์ œ ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Broker ๋ฅผ ์„ค์น˜ํ–ˆ์œผ๋ฏ€๋กœ, ์ด์ œ ์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ๋งŒ ์กด์žฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


$ sudo apt install mosquitto-clients

๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ mosquitto-clients ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜๊ฐ€ ๋๋‚ฌ์œผ๋ฉด ์ด์ œ Topic์„ ์ •ํ•ด์„œ, ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์•„๋ด…์‹œ๋‹ค. ์ €๋Š” NEONKID ๋ผ๋Š” Topic์„ ์ฃผ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


$ mosquitto_sub -h 127.0.0.1 -t NEONKID

h ์˜ต์…˜์€ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์— mosquitto๋ฅผ ์„ค์น˜ํ•˜์˜€์œผ๋ฏ€๋กœ 127.0.0.1์„ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค. ์ €๋Š” "NEONKID" ๋ผ๋Š” Topic์„ ์‚ฌ์šฉํ•œ๋‹ค ํ•˜์˜€์œผ๋ฏ€๋กœ t ์˜ต์…˜์— ์ž์‹ ์ด ์‚ฌ์šฉํ•  Topic์„ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 


๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ด ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Message๋ฅผ ๊ตฌ๋…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


$ mosquitto_pub -h 127.0.0.1 -t NEONKID -m "Hello Mosquitto !"

publish๋„ subscribe์™€ ์“ฐ๋Š” ์˜ต์…˜์€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ publish๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ์ž…์žฅ์ด๋ฏ€๋กœ, ์ „๋‹ฌํ•ด์•ผ ํ•  ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ m ์˜ต์…˜์„ ์ด์šฉํ•ด ๋‚ด๊ฐ€ ๋ณด๋‚ผ ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.



๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



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

์—ฌ๊ธฐ๊นŒ์ง€, Mosquitto ์„ค์น˜์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ๋ฐฉ๋ฒ•์€ Apache, nginx ๊ฐ™์€ ํฐ ์„œ๋ฒ„์— ๋น„ํ•ด ๊ธฐ๋Šฅ์ด ์ ์–ด ์–ด๋ ต์ง€๊ฐ€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์ •๋„ ๊ธฐ๋Šฅ์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์ ‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•œ MQTT ๋ฉ”์‹œ์ง€ ๊ตํ™˜์— ๋Œ€ํ•ด ์ ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments