IoT (사물 인터넷) 분야에서 많이 사용 되는 통신 프로토콜인 MQTT에 대해 아시나요?
1. MQTT 프로토콜이란?
MQTT는 Message Queue Telemetry Transport의 약자로, 메시지 기반의 경량 메시징 프로토콜입니다. 네트워크 대역폭이 제한된 환경에서도 작동하도록 설계되었으며, 인터넷 of Things (IoT) 및 M2M(기계 간 통신) 분야에서 주로 사용됩니다. MQTT는 Publish/Subscribe 모델을 기반으로 하며, 메시지 브로커를 중심으로 동작합니다.
2. MQTT 프로토콜을 사용하는 이유는?
MQTT 프로토콜은 다음과 같은 이유로 널리 사용됩니다.
경량성: MQTT는 TCP/IP 기반의 프로토콜보다 작고 경량적인 프로토콜이며, 따라서 대역폭이 제한된 환경에서도 작동할 수 있습니다.
신뢰성: MQTT는 메시지 전송에 대한 신뢰성을 보장하기 위해 QoS(Quality of Service) 레벨을 지원합니다. 즉, 메시지 전송 시 중복 전송이나 데이터 손실을 방지하고, 전송 속도와 대역폭을 조절할 수 있습니다.
유연성: MQTT는 Publish/Subscribe 모델을 기반으로 하므로, 여러 클라이언트가 동일한 메시지를 수신할 수 있습니다. 또한, 클라이언트가 원하는 시간에 메시지를 수신할 수 있도록 지원합니다.
보안성: MQTT는 TLS(Transport Layer Security)를 지원하여 데이터를 암호화하고 보안을 강화할 수 있습니다.
MQTT 프로토콜의 장단점은 무엇인가요?
장점
경량성과 효율성: 메시지 전송이 작은 패킷으로 이루어져 대역폭이 제한된 환경에서도 작동할 수 있습니다.
유연성: Publish/Subscribe 모델을 기반으로 하므로, 여러 클라이언트가 동일한 메시지를 수신할 수 있습니다.
신뢰성: QoS(Quality of Service) 레벨을 지원하여 중복 전송이나 데이터 손실을 방지하고, 전송 속도와 대역폭을 조절할 수 있습니다.
보안성: TLS(Transport Layer Security)를 지원하여 데이터를 암호화하고 보안을 강화할 수 있습니다.
단점
MQTT는 실시간성이 중요한 애플리케이션에 적합하지 않을 수 있습니다. 메시지 전송 속도가 다른 프로토콜에 비해 느릴 수 있습니다.
서버 요구사항: MQTT 브로커를 운영하려면 일정한 하드웨어와 네트워크 대역폭이 필요합니다.
MQTT 브로커를 제대로 구성하지 않으면 보안 위협에 노출될 수 있습니다.
또한, MQTT 프로토콜은 기존의 HTTP/HTTPS 프로토콜과 비교해서 보안성이 낮은 HTTP/HTTPS 프로토콜에 비해 약간 더 높은 보안성을 제공하지만, 최신의 보안 기술과 비교했을 때는 아직 미흡합니다. 따라서 민감한 데이터를 다루는 애플리케이션에서는 추가적인 보안 장치를 도입해야 합니다.
코드 예시
MQTT.js를 사용하여 브라우저에서 MQTT를 사용하는 방법
구독
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', () => {
client.subscribe('myTopic')
})
client.on('message', (topic, message) => {
console.log(message.toString())
})
test.mosquitto.org 라는 MQTT 브로커에 연결하고 myTopic이라는 주제를 구독합니다. 구독이 성공적으로 이루어지면, message 이벤트가 발생하면서 새로운 메시지가 도착할 때마다 해당 콜백이 호출됩니다. 이 콜백에서는 메시지를 콘솔에 출력합니다.
발행
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', () => {
client.publish('myTopic', 'Hello MQTT')
})
test.mosquitto.org 라는 MQTT 브로커에 연결하고 myTopic이라는 주제로 Hello MQTT라는 메시지를 발행합니다. 발행이 성공적으로 이루어지면, 해당 메시지가 브로커를 통해 모든 구독자에게 전달됩니다.
'개발 지식' 카테고리의 다른 글
[개발 지식] SQL 인젝션(Injection)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.06.12 |
---|---|
[개발 지식] var와 let에 대하여 | 민민의 하드디스크 - 티스토리 (0) | 2023.05.11 |
[개발 지식] 연산자 "=="와 "==="의 차이 | 민민의 하드디스크 - 티스토리 (0) | 2023.05.09 |
[개발 지식] 환경 변수란 ?? | 민민의 하드디스크 - 티스토리 (0) | 2023.05.02 |
[개발 지식] Java와 JavaScript의 차이는?? | 민민의 하드디스크 - 티스토리 (0) | 2023.05.02 |