❗MQTT 이론
https://radiant515.tistory.com/647
❗MQTT 브로커 서버 구축하기
해당 포스팅에서는 브로커로 AWS EC2를 사용할 예정이다.
sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo systemctl status mosquitto
sudo systemctl enable mosquitto
EC2의 보안 그룹에서 MQTT 통신을 위한 포트 번호 1883을 열어준다.
❗mosquitto 설정 파일 수정
sudo nano /etc/mosquitto/mosquitto.conf
listener 1883 0.0.0.0
allow_anonymous true
외부 통신을 위해 EC2에 설치한 mosquitto를 외부에서 제한 없이 접근하기 위해 설정을 수정해 준다.
sudo systemctl restart mosquitto
sudo systemctl status mosquitto
설정을 변경했기에 서비스를 재시작한다.
❗EC2 내 통신 테스트
mosquitto_sub -h 127.0.0.1 -t /test
응답을 받고자하는 ip와 토픽에 구독 명령을 먼저 실행한다.
mosquitto_pub -h 127.0.0.1 -t /test -m "Hello"
새로운 터미널에서 로컬과 토픽을 지정하고 메시지를 발행한다.
구독 명령을 실행했던 터미널로 돌아가서 확인하면 Hello라는 메시지가 도착한 것을 볼 수 있다!
❗로컬 테스트
EC2를 MQTT의 브로커로 사용하고 윈도우에서 메시지를 구독, 발행하는 과정이다.
pip install paho-mqtt
새로운 프로젝트 생성 후 패키지를 설치한다.
# sub.py
import paho.mqtt.client as mqtt
# 브로커 주소 및 토픽 설정
broker_address = "IP" # EC2 인스턴스의 공인 IP 주소
topic = "test/topic"
# 메시지를 수신할 때 호출되는 콜백 함수
def on_message(client, userdata, message):
print(f"Received message: {message.payload.decode('utf-8')}")
# MQTT 클라이언트 생성
client = mqtt.Client()
# 메시지 수신 콜백 함수 설정
client.on_message = on_message
# 브로커에 연결
client.connect(broker_address, 1883, 60)
# 토픽 구독
client.subscribe(topic)
print(f"Subscribed to topic '{topic}' on broker '{broker_address}'")
# 메시지 수신 대기 (blocking)
client.loop_forever()
#pub.py
import paho.mqtt.client as mqtt
# MQTT 브로커 설정
broker_address = "ip" # EC2 인스턴스의 공인 IP 주소
topic = "test/topic"
# MQTT 클라이언트 생성
client = mqtt.Client()
# 브로커에 연결
client.connect(broker_address, 1883, 60)
# 메시지 발행
message = "Hello from EC2!"
client.publish(topic, message)
# 연결 종료
client.disconnect()
print(f"Message '{message}' published to topic '{topic}'")
python sub.py
python pub.py
EC2 테스트 때와 마찬가지로 sub.py인 구독을 먼저 실행 후 pub.py를 실행한다. sub.py가 실행되는 순간 EC2에 존재하는 MQTT 브로커에 '/test/topic'이란 경로로 구독을 한다. pub.py가 실행되면 EC2의 브로커에 '/test/topic' 경로로 "Hello from EC2!"라는 메시지를 보내게 되고, 메시지를 받은 브로커는 '/test/topic' 경로에 구독해둔 기기에 받은 메시지를 전달하게 된다.
728x90
반응형
'🔻DevOps > Networking' 카테고리의 다른 글
[ngrok] ngrok 개념 및 사용법 (0) | 2024.08.18 |
---|---|
[MQTT] MQTT 개념 및 아키텍처 (0) | 2024.08.15 |