임베디드 관련 카테고리/프로토콜

Paho 라이브러리란 무엇인가?

CBJH 2025. 1. 13.
728x90
반응형

Paho 라이브러리는 MQTT(Message Queuing Telemetry Transport) 프로토콜을 지원하는 클라이언트를 구현하기 위한 오픈소스 라이브러리입니다. Eclipse Foundation에서 제공하며, 경량 메시징 프로토콜을 통해 사물인터넷(IoT) 환경에서 주로 사용됩니다.

Paho는 다양한 언어(Python, Java, C 등)로 제공되며, 특히 Python 버전은 간단한 API와 이벤트 기반 프로그래밍으로 MQTT 메시지의 발행(Publish)과 구독(Subscribe)을 손쉽게 구현할 수 있습니다.


Paho의 주요 특징

<출처 : https://www.eclipse.org >

  1. 경량 프로토콜 지원
    • MQTT는 네트워크 대역폭이 제한적인 환경에서도 안정적으로 작동합니다.
  2. 멀티 프로토콜
    • TCP, WebSocket, TLS 등을 지원하여 다양한 환경에 적응 가능합니다.
  3. 이벤트 기반 프로그래밍
    • 연결, 메시지 수신, 연결 끊김 등의 이벤트를 처리하기 위한 콜백 함수(핸들러)를 제공합니다.
  4. QoS 지원
    • MQTT의 QoS(Quality of Service) 수준을 통해 메시지 전달의 신뢰성을 제어할 수 있습니다.

<출처 : https://blog.naver.com/PostList.naver?blogId=ghdalswl77>


주요 이벤트 핸들러 소개

Paho 라이브러리는 클라이언트와 브로커 간의 이벤트를 처리하기 위해 여러 가지 이벤트 핸들러를 제공합니다. 사용자는 필요에 따라 이러한 핸들러를 구현하여 이벤트를 처리할 수 있습니다.

1. on_connect

  • 설명: 클라이언트가 브로커에 성공적으로 연결되었을 때 호출됩니다.
  • 시그니처:
    def on_connect(client, userdata, flags, rc):
        pass
    
  • 파라미터:
    • client: 연결된 클라이언트 객체
    • userdata: 사용자 정의 데이터
    • flags: 연결 플래그 정보
    • rc: 연결 결과 코드 (0이 성공을 의미)

2. on_disconnect

  • 설명: 클라이언트가 브로커와의 연결이 끊어졌을 때 호출됩니다.
  • 시그니처:
    def on_disconnect(client, userdata, rc):
        pass
    
  • 파라미터:
    • client: 연결된 클라이언트 객체
    • userdata: 사용자 정의 데이터
    • rc: 연결 종료 코드 (0은 정상 종료)

3. on_message

  • 설명: 클라이언트가 브로커로부터 메시지를 수신했을 때 호출됩니다.
  • 시그니처:
    def on_message(client, userdata, msg):
        pass
    
  • 파라미터:
    • client: 연결된 클라이언트 객체
    • userdata: 사용자 정의 데이터
    • msg: 수신한 메시지 객체 (msg.topic과 msg.payload를 포함)

4. on_publish

  • 설명: 클라이언트가 브로커로 메시지를 성공적으로 발행했을 때 호출됩니다.
  • 시그니처:
    def on_publish(client, userdata, mid):
        pass
    
  • 파라미터:
    • client: 연결된 클라이언트 객체
    • userdata: 사용자 정의 데이터
    • mid: 메시지 ID

5. on_subscribe

  • 설명: 클라이언트가 브로커의 특정 토픽에 성공적으로 구독했을 때 호출됩니다.
  • 시그니처:
    def on_subscribe(client, userdata, mid, granted_qos):
        pass
    
  • 파라미터:
    • client: 연결된 클라이언트 객체
    • userdata: 사용자 정의 데이터
    • mid: 메시지 ID
    • granted_qos: 승인된 QoS 레벨 목록

6. on_unsubscribe

  • 설명: 클라이언트가 브로커의 특정 토픽에 대해 구독 해지했을 때 호출됩니다.
  • 시그니처:
    def on_unsubscribe(client, userdata, mid):
        pass
    
  • 파라미터:
    • client: 연결된 클라이언트 객체
    • userdata: 사용자 정의 데이터
    • mid: 메시지 ID

이벤트 핸들러 사용 예제

import paho.mqtt.client as mqtt

# 이벤트 핸들러 정의
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected successfully!")
        client.subscribe("test/topic")
    else:
        print(f"Connection failed with code {rc}")

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

def on_disconnect(client, userdata, rc):
    print("Disconnected from broker")

# 클라이언트 생성 및 이벤트 핸들러 등록
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect

# 브로커 연결
client.connect("broker.hivemq.com", 1883, 60)

# 이벤트 루프 시작
client.loop_forever()

 

Paho MQTT는 Python용 MQTT 클라이언트 라이브러리로, IoT 애플리케이션에서 MQTT 프로토콜을 통해 데이터를 게시하거나 구독할 수 있도록 지원합니다. 이 라이브러리는 다양한 이벤트 핸들러(콜백 함수)를 제공하여, 클라이언트의 상태나 메시지 처리에 대한 세부적인 제어를 가능하게 합니다.


Paho MQTT 주요 콜백 함수

Paho MQTT의 콜백 함수는 클라이언트가 브로커와 통신하거나 메시지를 처리할 때 호출됩니다. 

 

<출처 : https://velog.io/@yoju/posts>

 

콜백 함수 설정 방법

콜백 함수는 MQTT 클라이언트 인스턴스를 생성한 후 설정할 수 있습니다:

client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.on_publish = on_publish
client.on_subscribe = on_subscribe
client.on_unsubscribe = on_unsubscribe

결론

Paho는 강력한 MQTT 클라이언트 라이브러리로, 다양한 이벤트 핸들러를 통해 IoT 환경에서의 메시지 송수신을 효과적으로 관리할 수 있습니다. 이벤트 기반 프로그래밍을 활용하면 연결 상태와 메시지 흐름을 효율적으로 제어할 수 있으며, 이를 통해 안정적인 MQTT 애플리케이션을 구축할 수 있습니다.

댓글