본문 바로가기
프로그래밍

IoT(사물인터넷) 프로그래밍 : MQTT 활용

by 이음코드 2024. 12. 11.
반응형

IoT(사물인터넷, Internet of Things)는 다양한 장치와 센서들이 인터넷을 통해 연결되어 데이터를 주고받는 기술을 의미합니다. IoT 기술의 중심에는 데이터를 효율적으로 교환하고 관리하기 위한 통신 프로토콜이 있습니다.

그중 MQTT(Message Queuing Telemetry Transport)는 경량 메시징 프로토콜로 IoT환경에서 널리 사용되고 있습니다. 이번 글에서는 MQTT의 개념, 특징, 동작 방식 그리고 실제 프로그래밍 활용 사례를 다루겠습니다.

 

1. MQTT란 ?

MQTT는 IBM에서 개발된 경량 메시징 프로토콜로 주로 제한된 대역폭과 낮은 전력 소비가 중요한 환경에서 사용됩니다. 이는 발행/구독(Publish/Subscribe) 모델을 기반으로 작동하며, IoT 디바이스 간의 신뢰할 수 있는 데이터 전송을 보장합니다.

1) MQTT 주요 특징

  • 경량성 : 소규모 데이터 패킷으로 네트워크 부담을 줄임
  • 발행/구독 모델 : 메시지를 특정 주제(Topic)에 발행하고 이를 구독한 클라이언트가 메시지를 수신
  • QoS (Quality of Service) : 데이터 전송의 신뢰성을 보장하는 3단계 Qos 레벨 제공
  • 지속 연결 : 클라이언트와 브로커 간 지속적인 연결 유지
  • 저전력 : 배터리 기반 IoT 디바이스에 적합

2) MQTT의 주요 구성 요소

  • 브로커 (Broker) : 메시지를 관리하고 클라이언트 간 데이터 교환을 중개
  • 퍼블리셔 (Publisher) : 특정 주제(Topic)에 메시지를 발행
  • 서브스크라이버(Subscriber) : 관심있는 주제를 구독하고 메시지를 수신
  • 클라이언트 (Client) : 퍼블리셔와 서브스크라이버 역할을 수행

2. MQTT의 동작 방식

MQTT는 주제(Topic)를 기반으로 발행/구독 모델을 사용하여 데이터 전송을 관리합니다. 이 과정은 다음과 같은 단계로 이루어집니다.

  1. 클라이언트 연결 : 클라이언트가 브로커에 연결 요청을 보냅니다.
  2. 구독 요청 : 클라이언트가 특정 주제를 구독합니다.
  3. 메시지 발행 : 퍼블리셔가 주제에 메시지를 발행합니다.
  4. 메시지 전달 : 브로커가 해당 주제를 구독한 모든 클라이언트에게 메시지를 전달합니다.
  5. 연결 유지 : 클라이언트와 브로커 간 지속적인 연결을 유지합니다.

3. MQTT의 QoS 수준

MQTT는 데이터 전송의 신뢰성을 보장하기 위해 3가지 Qos(Quality of Service) 수준을 제공합니다.

  • Qos 0 (At most once) : 메시지가 한 번만 전송되며, 수신 여부는 보장되지 않음
  • Qos 1 (At least once) : 메시지가 최소 한 번 전송되며, 중복 메시지가 발생할 수 있음
  • Qos 2 (Exactly once) : 메시지가 정확히 한 번 전송됨

4. MQTT 프로그래밍 : 기본 구성과 예제

1) 개발 환경 설정

MQTT 프로그래밍을 시작하려면 다음 도구를 준비해야 합니다.

  • MQTT 브로커 :Mosquitto, HiveMQ 등의 브로커 설치
  • 라이브러리 : Python의 paho-mqtt, Node.js의 mqtt.js 등
  • IoT 디바이스 : Raspberry Pi, ESP32 등

2) Python을 이용한 MQTT 기본 예제

  • 설치
pip install paho-mqtt
  • 퍼블리셔 코드
import paho.mqtt.client as mqtt

broker_address = "test.mosquitto.org"
topic = "home/temperature"

client = mqtt.Client()
client.connect(broker_address)

# 메시지 발행
message = "Temperature: 25°C"
client.publish(topic, message)
print(f"Published: {message} to topic {topic}")
  • 서브스크라이버 코드
import paho.mqtt.client as mqtt

def on_message(client, userdata, message):
    print(f"Message received: {message.payload.decode()} on topic {message.topic}")

broker_address = "test.mosquitto.org"
topic = "home/temperature"

client = mqtt.Client()
client.connect(broker_address)

# 메시지 수신 콜백 설정
client.on_message = on_message

# 주제 구독
client.subscribe(topic)
client.loop_forever()

 

5. MQTT 활용 사례

1) 스마트 홈

  • 온도, 조명, 도어락 제어와 같은 장치를 제어하고 모니터링
  • 예 : 온도 센서에서 데이터를 발행하고 스마트폰 앱에서 이를 구독하여 제어

2) 산업 자동화

  • 공장 설비의 상태를 실시간으로 모니터링하고 제어
  • 예 : 기계 작동 상태를 MQTT로 발행하여 중앙 서버에서 구독

3) 차량 텔레매틱스

  • 차량 상태 데이터를 실시간으로 전송
  • 예 : 차량의 GPS데이터를 MQTT를 통해 서버로 전송

6. MQTT의 장점과 한계

1) 장점

  • 저전력, 저대역폭 환경에 적합
  • 데이터 전송의 신뢰성을 보장하는 QoS 지원
  • 발행/구독 모델로 유연한 데이터 전달

2) 한계

  • 보안 취약점 : 기본적으로 암호화가 없으므로 TLS/SSL 설정이 필요
  • 브로커 의존성 : 브로커에 문제가 생기면 시스템 전체가 영향을 받을 수 있음

7. 결론

MQTT는 IoT 환경에서 경량 메시징 프로토콜로 강력한 성능을 발휘합니다. 발행/구독 모델, QoS지원 등으로 IoT 디바이스 간 효율적인 데이터 전송이 가능하며 스마트 홈, 산업 자동화 등 다양한 분야에서 활용되고 있습니다. 

반응형