오늘의 주제는 여러 센서 데이터를 다양한 MQTT 토픽으로 퍼블리시하고, Python으로 구독해 처리하기이다.
이건 실전 IoT에서 반드시 필요한 “다중 센서 처리” 흐름이라고 한다.
1개의 MQTT 브로커에서 여러 센서 데이터를 구분된 토픽으로 전송하고,
Python에서 이를 동시에 구독(Subscribe) 하여 각각 처리하는 구조를 다뤄보는 과정을 알아본다.
---
1. 전체 흐름
[센서 게이트웨이] → MQTT Publish
├── iot/sensor/temp → "Temp: 26"
├── iot/sensor/humid → "Humid: 45"
└── iot/sensor/door → "Open"
[Python 수신기] → 각 토픽에 Subscribe → 개별 처리
---
2. MQTT Publisher (Python 예시)
다음은 다중 토픽에 각각 다른 센서 데이터를 발행하는 코드 예시이다.
import time
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("localhost", 1883)
while True:
client.publish("iot/sensor/temp", "26")
client.publish("iot/sensor/humid", "45")
client.publish("iot/sensor/door", "Open")
print("Published sensor data")
time.sleep(5)
---
3. MQTT Subscriber (Python 예시)
이제 Python으로 모든 토픽을 구독하고,
각 토픽에 따라 분기 처리하는 방식으로 수신 코드를 구성해보자.
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code", rc)
# 모든 센서 토픽을 구독
client.subscribe("iot/sensor/#")
def on_message(client, userdata, msg):
topic = msg.topic
payload = msg.payload.decode()
if topic == "iot/sensor/temp":
print(f"[온도 센서] {payload} °C")
elif topic == "iot/sensor/humid":
print(f"[습도 센서] {payload} %")
elif topic == "iot/sensor/door":
print(f"[문 상태] {payload}")
else:
print(f"[기타] {topic}: {payload}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883)
client.loop_forever()
---
4. 결과 예시
실행 결과 예시 출력은 다음과 같다 :
[온도 센서] 26 °C
[습도 센서] 45 %
[문 상태] Open
모든 센서 데이터가 토픽 이름을 통해 자동 분류되고,
Python에서 쉽게 처리할 수 있다.
---
5. 확장 아이디어
센서가 10개, 100개가 되더라도 토픽 구조만 잘 정리되면 확장 가능
토픽 예: iot/sensor/DEVICEID/temp, iot/sensor/DEVICEID/status
구독 필터: iot/sensor/+/temp, iot/sensor/#
---
6. 내가 느낀 점
지금 이 구조는 단순한 실습이 아니라
현실적인 IoT 서비스 아키텍처의 핵심이다.
토픽으로 데이터를 잘 분리하고, Python으로 수신하고 분기하는 로직이 있으면
백엔드, DB, 대시보드 연동까지 바로 확장 가능하다.
---
7. 참고자료
HiveMQ - MQTT Topics Explained
https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/
EMQX - MQTT Wildcard Topics
https://www.emqx.com/en/blog/mqtt-topic-wildcard
'TIL > IoT Backend' 카테고리의 다른 글
FastAPI + SQLite 연동(센서 데이터 DB 저장) (0) | 2025.06.08 |
---|---|
FastAPI, IoT용 백엔드 서버 기초 (0) | 2025.06.07 |