PHP 환경에서 MQTT 브로커와 효율적으로 통신할 수 있는 경량 라이브러리를 소개합니다. IoT 환경에서 실시간 데이터 교환이 필요한 경우 유용하게 활용할 수 있습니다.
라이브러리 개요
해당 라이브러리는 MQTT 프로토콜을 순수 PHP로 구현한 클라이언트 도구입니다. 별도의 확장 모듈 설치 없이 PHP 7.0 이상 환경에서 즉시 사용 가능하며, 주요 MQTT 기능을 모두 지원합니다.
핵심 기능
- 토픽 구독: 특정 토픽 패턴을 감시하여 메시지 수신
- 메시지 발행: 지정한 토픽으로 데이터 전송
- 연결 유지: 장시간 지속적인 세션 관리
- QoS 레벨: 0, 1, 2 단계의 메시지 전송 보장 수준 지원
기술적 특징
- 직관적인 인터페이스 설계로 학습 곡선 최소화
- Linux, Windows, macOS 등 다양한 운영체제 호환
- 외부 의존성 없이 독립 실행 가능
- 사용자 정의 콜백 등록으로 유연한 메시지 처리
- PSR-2/PSR-4 표준 준수로 코드 품질 보장
설치 및 기본 사용법
의존성 설치
composer require tokudu/php-mqtt-client
클라이언트 인스턴스 생성
<?php
require_once 'vendor/autoload.php';
use Tokudu\PhpMqttClient\Client;
$brokerUrl = 'tcp://broker.hivemq.com:1883';
$mqtt = new Client($brokerUrl);
?>
브로커 연결
<?php
try {
$mqtt->connect();
} catch (Exception $err) {
error_log("연결 실패: " . $err->getMessage());
exit(1);
}
?>
메시지 발행 예제
<?php
$targetTopic = 'factory/sensors/temperature';
$payload = json_encode([
'device_id' => 'TH-001',
'value' => 23.5,
'unit' => 'celsius',
'timestamp' => time()
]);
$mqtt->publish($targetTopic, $payload, 1);
?>
토픽 구독 및 수신 처리
<?php
$subscriptionTopic = 'factory/sensors/#';
$mqtt->subscribe($subscriptionTopic, function ($receivedTopic, $data) {
$decoded = json_decode($data, true);
printf("[%s] %s: %.1f%s\n",
date('Y-m-d H:i:s'),
$decoded['device_id'] ?? 'unknown',
$decoded['value'] ?? 0,
$decoded['unit'] ?? ''
);
});
// 메시지 루프 실행 (비동기 수신 대기)
$mqtt->loop();
?>
연결 종료
<?php
$mqtt->disconnect();
?>
실전 활용 시나리오
스마트 팩토리 환경에서 센서 데이터 수집, 홈 자동화 시스템의 상태 모니터링, 위치 기반 서비스의 실시간 추적 등 다양한 분야에서 적용할 수 있습니다. 특히 기존 PHP 기반 웹 인프라와 IoT 장치 간의 브리지 역할로 활용하면 효과적입니다.