❗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
_니지