C#

MQTT Protocol 의 특징 및 사용

검은고양이개발자 2024. 2. 27. 15:02
반응형

MQTT 


 

 MQTT(MQ Telemetry Transport)는 경량 메시징 프로토콜로, 네트워크에 연결된 장치들 간의 효율적인 통신을 위해 설계되었습니다. 이 프로토콜은 IoT(Internet of Things) 및 M2M(Machine-to-Machine) 통신에서 널리 사용되며, 낮은 대역폭, 제한된 네트워크 리소스, 불안정한 네트워크 연결과 같은 제약 사항을 고려하여 개발되었습니다.

MQTT는 클라이언트-브로커-서버 모델을 따르며, 주로 발행-구독(pub-sub) 패턴을 사용하여 메시지를 전달합니다. 이 패턴은 여러 클라이언트가 메시지를 발행하고 해당 메시지를 구독하는 브로커를 통해 효율적으로 전달되는 것을 의미합니다.

 

특징


MQTT의 주요 특징은 다음과 같습니다:

  1. 경량성: MQTT는 간단하고 경량적인 프로토콜로, 메시지 헤더 크기가 작고 TCP/IP 연결을 최소화하여 대역폭을 절약합니다.
  2. 유연성: MQTT는 다양한 네트워크 및 플랫폼에서 사용할 수 있도록 설계되었습니다. 휴대폰, 임베디드 장치, 서버 등 다양한 환경에서 동작할 수 있습니다.
  3. 안정성: 불안정한 네트워크 연결에서도 메시지 전달을 보장하기 위해 QoS(Quality of Service) 레벨을 제공합니다. QoS 레벨은 메시지 전달의 신뢰성을 조절하는 데 사용됩니다.
  4. 확장성: MQTT는 수천 개의 동시 연결을 지원하며, 브로커 및 클라이언트 간의 효율적인 통신을 보장합니다.
  5. 보안성: MQTT는 TLS/SSL과 같은 보안 프로토콜을 지원하여 데이터의 안전한 전송을 보장합니다.
  6. 쉬운 구현: MQTT 클라이언트 및 브로커의 오픈 소스 구현이 다양하게 제공되며, 쉽게 사용할 수 있습니다.

 

 

MQTT는 위와 같이 Publisher , Broker, Subscriber의 역할로 나누어 작동이 됩니다.

Publisher에서는 Broker로 Publish 하고

Subscriber에서는 Broker에게 Subscribe 한 뒤에 Publish 받을 수 있습니다.

 

MQTT Broker 프로그램


여기서 MQTT  Broker의 역할을 해주는 프로그램은 여러 종류가 있는데 이에 대해 알아보겠습니다.

각각의 프로그램은 다양한 기능과 특성을 제공하며, 사용 사례 및 요구 사항에 따라 선택할 수 있습니다.

아래에는 널리 사용되는 MQTT 브로커 프로그램과 각각의 장단점을 소개합니다.

  1. Mosquitto
    • 장점:
      • 오픈 소스이며 무료로 사용할 수 있습니다.
      • 경량이며 빠르게 실행됩니다.
      • 다양한 플랫폼에서 동작합니다.
      • 안정적이고 신뢰성이 높습니다.
    • 단점:
      • 고급 기능이 상대적으로 제한적일 수 있습니다.
      • 대규모 및 고성능 요구 사항에는 적합하지 않을 수 있습니다.
  2. EMQ
    • 장점:
      • 분산 아키텍처를 지원하여 확장성이 뛰어납니다.
      • 높은 처리량과 대규모 연결을 지원합니다.
      • 클러스터링 및 고가용성 기능을 제공합니다.
      • 다양한 보안 기능을 제공합니다.
    • 단점:
      • 설정 및 관리가 다소 복잡할 수 있습니다.
      • 자원 사용량이 많을 수 있습니다.
  3. HiveMQ
    • 장점:
      • 높은 성능과 확장성을 제공합니다.
      • 클러스터링 및 로드 밸런싱을 지원하여 고가용성을 보장합니다.
      • 상용 및 오픈 소스 라이선스 모두 제공됩니다.
      • 엔터프라이즈 환경에 적합합니다.
    • 단점:
      • 상용 라이선스의 경우 비용이 발생할 수 있습니다.
      • 초보자에게는 다소 복잡할 수 있습니다.
  4. RabbitMQ
    • 장점:
      • 메시지 큐 시스템의 표준으로 널리 사용됩니다.
      • AMQP(Advanced Message Queuing Protocol) 및 MQTT 프로토콜을 모두 지원합니다.
      • 다양한 플러그인과 기능을 제공합니다.
      • 엔터프라이즈 환경에서 안정성이 높습니다.
    • 단점:
      • 설정 및 관리가 다소 복잡할 수 있습니다.
      • 경량 프로토콜인 MQTT에 비해 무겁고 자원을 많이 소모할 수 있습니다.

 

 

Mosquitto 사용

 

공식 사이트에서 Mosquitto 를 다운로드 후 mosquitto 가 있는 폴더 경로에서 mosquitto 명령어를 사용하든가

mosquitto -c "C:\Program Files\mosquitto\mosquitto.conf <- 이와 같이 절대 경로를 사용하여 mosquitto를 실행시킵니다.

 

프로젝트에서는 Nuget에서 MQTTnet 다운로드 하여 사용할 수 있습니다.

var mqttService = host.Services.GetRequiredService<MqttService>();

// MQTT 브로커 연결
await mqttService.ConnectAsync("IsOneSoft","localhost");

// 메시지 발행
await mqttService.PublishAsync("Test", "I'm Jg");

// 토픽 구독
await mqttService.SubscribeAsync("Test");

 

위와 같은 방법으로 연결 및 메시지를 발행, 구독 할 수 있습니다. 

 

 

MQTT Explorer를 다운로드 하여 메시지가 잘 전달되는 걸 확인할 수 있습니다.

반응형