MQTT 프로토콜

Delphi, C++Builder 및 .NET용 네이티브 MQTT 3.1.1 및 MQTT 5.0 클라이언트예요. WebSocket 또는 원시 TCP 위에서 QoS 0/1/2, 보관 메시지, 최종 유언, 토픽 별칭, 공유 구독을 갖춘 발행-구독 메시징을 제공해요.

MQTT 서브프로토콜 클라이언트

Delphi / .NET 런타임이 실행되는 모든 곳에서 동작하는 일급 MQTT 구현이에요 — 데스크톱 서비스부터 모바일 기기까지, 표준을 준수하는 모든 MQTT 브로커와 통신해요.

컴포넌트 클래스

TsgcWSPClient_MQTT

표준

MQTT 3.1.1 & MQTT 5.0

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

Standard / Professional / Enterprise

MQTT 3.1.1 & 5.0의 모든 기능

MQTT의 와이어 레벨 기능 전부예요 — 단순한 발행과 구독에 그치지 않아요.

QoS 0, 1 & 2

Fire-and-forget, 최소 1회, 정확히 1회 전달을 모두 지원해요. QoS 2의 4단계 핸드셰이크(PUBLISH → PUBREC → PUBREL → PUBCOMP)는 재시도 / 감사 로직을 위해 이벤트로 완전히 노출돼요.

WebSocket 또는 원시 TCP

Client 속성에 TsgcWebSocketClient를 연결하면 WebSocket 위에서 MQTT를 실행하거나, 1883 / 8883 포트의 네이티브 MQTT TCP 전송을 사용할 수 있어요 — 동일한 컴포넌트, 동일한 API예요.

보관 메시지

발행을 retained로 표시하면 브로커가 마지막 값을 이후 구독자에게 전달해요. Publish 호출마다 retain을 켜거나 끌 수 있어요.

Last Will & Testament

LastWillTestament에 토픽과 페이로드를 등록하면 클라이언트가 비정상적으로 끊겼을 때 브로커가 이를 발행해요 — 디바이스 오프라인 이벤트를 알리는 표준 방식이에요.

와일드카드 구독

+(단일 레벨)와 #(다중 레벨) 와일드카드를 사용하는 토픽 필터를 지원해요: sensors/+/temperature 또는 devices/#.

MQTT 5 속성

세션 만료, 수신 최대치, 최대 패킷 크기, 토픽 별칭 최대치, 요청-응답 정보, 사용자 속성 등 — 모두 ConnectProperties, PublishProperties, SubscribeProperties로 접근할 수 있어요.

토픽 별칭

MQTT 5에서는 클라이언트(및 브로커)가 반복 발행 시 긴 토픽 이름을 2바이트 정수 별칭으로 대체할 수 있어요 — 빈번한 텔레메트리 스트림에서 큰 절감 효과를 얻을 수 있어요.

공유 구독

MQTT 5의 $share/<group>/<topic>은 들어오는 메시지를 구독자 그룹에 라운드 로빈으로 분배해요 — 수평적 워커 풀 구성의 기본 요소예요.

요청 / 응답

MQTT 5의 ResponseTopicCorrelationData 속성으로 발행-구독을 비동기 RPC로 활용할 수 있어요 — 별도의 프레이밍 없이 이벤트에 내장돼 있어요.

강화된 인증

AuthenticationMethod / AuthenticationData가 포함된 MQTT 5 AUTH 패킷으로 SCRAM 방식의 챌린지를 수행할 수 있어요 — Auth를 호출하고 OnMQTTAuth를 처리하세요.

Keep-alive & WatchDog

HeartBeat가 조정 가능한 간격으로 PINGREQ를 전송해요. WatchDog은 지수 백오프로 자동 재연결하며 구독을 재개해요.

OpenSSL 또는 SChannel TLS

8883 포트에서 MQTTS(원시 TCP+TLS) 또는 443 포트에서 WSS를 클라이언트 인증서와 함께 실행해요. TLSOptions.IOHandler로 OpenSSL(크로스 플랫폼) 또는 SChannel(Windows 커널 TLS)을 선택할 수 있어요.

MQTT가 빛나는 영역

가벼운 프레이밍, 낮은 오버헤드, 상태 기반 세션 덕분에 MQTT는 이런 시나리오의 기본 선택지예요.

IoT 텔레메트리

센서가 keep-alive가 적용된 MQTT 세션으로 온도, 진동, GPS, 배터리 측정값을 스트리밍해요 — 불안정한 LTE/Cat-M/NB-IoT 회선에서도요.

커넥티드 차량 & 플릿

차량 추적기, OBD 게이트웨이, EV 충전소를 위한 QoS 1 양방향 명령 채널이에요 — 발행을 잃지 않고 재연결 후 재개할 수 있어요.

산업 / SCADA

OPC-UA 폴링을 이벤트 기반 발행-구독으로 대체해요. 토픽 별칭과 공유 구독으로 수천 개의 PLC와 필드 디바이스까지 확장돼요.

스마트 홈 & 건물

조명, HVAC, 잠금 장치, 점유 센서가 Mosquitto 또는 Home Assistant를 통해 통신해요 — Delphi 클라이언트도 임베디드 노드처럼 손쉽게 통합돼요.

클라우드 IoT 플랫폼

동일한 컴포넌트가 AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud, EMQX와 통신해요 — X.509 클라이언트 인증서 또는 SAS 토큰을 사용해요.

웹 / 브라우저 대시보드

RabbitMQ Web-MQTT(15675 포트)의 MQTT-over-WebSocket으로 동일한 브로커가 단일 TLS 포트로 Delphi 클라이언트와 JS 대시보드 양쪽에 푸시할 수 있어요.

모바일 푸시 & 프레즌스

iOS/Android의 장기 MQTT 세션에 Last Will을 결합하면 벤더 종속 없이 프레즌스와 가벼운 푸시를 구현할 수 있어요.

마이크로서비스 팬아웃

중앙 브로커를 통해 생산자와 소비자를 분리해요. 공유 구독으로 Delphi 워커 서비스 풀에 작업을 라운드 로빈으로 분배해요.

모든 주요 MQTT 브로커와 호환

사양을 준수하는 클라이언트예요 — 고객이 실제로 운영하는 브로커들로 검증됐어요.

AWS IoT Core

X.509 클라이언트 인증서, WebSocket 위 SigV4, AWS IoT 브로커 할당량을 지원해요. 전용 AWS IoT 페이지를 참고하세요.

Azure IoT Hub

디바이스 SAS 토큰, 트윈/메서드 토픽, DPS 프로비저닝을 지원해요. Azure IoT Hub 페이지를 참고하세요.

HiveMQ & HiveMQ Cloud

전체 MQTT 5 속성 영역, 공유 구독, 강화된 인증, HiveMQ Cluster를 지원해요.

Mosquitto

오픈 소스 레퍼런스 브로커예요 — TCP 또는 WebSocket을 통해 MQTT 3.1.1 및 5.0을 모두 지원해요.

EMQX

공유 구독, 룰 엔진, Kafka 브리지를 갖춘 대규모 확장 가능 브로커예요. 별도 변경 없이 사용할 수 있어요.

RabbitMQ Web-MQTT

15675 포트의 MQTT-over-WebSocket 플러그인이에요 — 브라우저 + Delphi 대시보드 조합의 표준 페어링이에요.

VerneMQ

Erlang/OTP 기반의 클러스터형 MQTT 브로커예요 — MQTT 3.1.1 및 5.0 모드 모두 테스트 스위트를 통과해요.

ActiveMQ & Artemis

Apache ActiveMQ에 내장된 MQTT 리스너와 Artemis 브로커예요 — AMQP, STOMP, JMS와 멀티 프로토콜로 공존해요.

컴포넌트를 배치하고 몇 가지 속성만 설정하면 끝

TsgcWebSocketClient와 TsgcWSPClient_MQTT를 짝지어 OnMQTTConnect / OnMQTTPublish를 연결한 뒤 Subscribe와 Publish를 호출하세요.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'www.esegece.com';
  WSClient.Port := 15675;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := WSClient;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  WSClient.Active := True;
end;

procedure TForm1.MQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: string;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  MQTT.Subscribe('sensors/temperature/#');
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ': ' + aText);
end;

// 보관된 QoS 1 메시지 발행
MQTT.Publish('sensors/temperature/room1',
  '{"value":22.5,"unit":"C"}', mtqsAtLeastOnce, True);
// uses: sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client
TsgcWebSocketClient *WSClient = new TsgcWebSocketClient(this);
WSClient->Host = "www.esegece.com";
WSClient->Port = 15675;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = WSClient;
MQTT->Authentication->Enabled  = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";

MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;

WSClient->Active = true;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + ": " + aText);
}

MQTT->Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", mtqsAtLeastOnce, true);
using esegece.sgcWebSockets;

var WSClient = new TsgcWebSocketClient();
WSClient.Options.Parameters = "/ws";

var MQTT = new TsgcWSPClient_MQTT();
MQTT.Client = WSClient;
MQTT.Authentication.Enabled  = true;
MQTT.Authentication.UserName = "sgc";
MQTT.Authentication.Password = "sgc";
MQTT.HeartBeat.Enabled  = true;
MQTT.HeartBeat.Interval = 5;

MQTT.OnMQTTConnect += (conn, session, code, name, props) => MQTT.Subscribe("sensors/temperature/#");
MQTT.OnMQTTPublish += (conn, topic, text, props) => Console.WriteLine(topic + ": " + text);

WSClient.Host = "www.esegece.com";
WSClient.Port = 15675;
WSClient.Active = true;

MQTT.Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", TmqttQoS.mtqsAtLeastOnce, true);

사양 & 참고 자료

이 컴포넌트가 구현하는 프로토콜의 공인된 원문 자료예요.

문서 & 데모

컴포넌트 레퍼런스로 바로 이동하고, 바로 실행 가능한 데모 프로젝트를 받고, 평가판을 다운로드하세요.

온라인 도움말 — Protocol_MQTT 이 컴포넌트의 전체 속성, 메서드, 이벤트 레퍼런스예요.
데모 프로젝트 — Demos\Protocols\MQTT 바로 실행 가능한 예제 프로젝트예요. sgcWebSockets 패키지에 포함돼 있어요 — 아래에서 평가판을 다운로드하세요.
기술 문서 (PDF) 기능, 빠른 시작, Delphi · C++ Builder · .NET 코드 샘플, 그리고 원문 자료 참조 — 이 컴포넌트 전용이에요.
사용자 매뉴얼 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 매뉴얼이에요.

MQTT를 시작할 준비가 되셨나요?

무료 평가판을 다운로드하고 몇 분 만에 IoT 메시징 솔루션 구축을 시작하세요.