프로젝트 소개

# wolfMQTT wolfMQTT는 임베디드 시스템과 리소스가 제한된 환경을 위해 설계된, C로 작성된 작고 효율적인 MQTT 클라이언트 구현입니다. wolfSSL 라이브러리와 통합되어 TLS 1.3을 포함한 강력한 TLS 지원을 제공합니다. ## 주요 기능 - **MQTT v3.1.1 및 v5.0 지원**: QoS 0-2, LWT(Last Will and Testament), 그리고 AUTH 패킷, 사용자 속성, 서버 연결 해제, 이유 코드, 토픽 별칭 등 다양한 v5 기능에 대한 완전한 사양 지원. - **MQTT-SN 지원**: UDP를 통해 동작하며, OASIS MQTT-SN v1.2 사양을 기반으로 하는 저대역폭 센서 네트워크용. - **포스트 양자 지원을 포함한 TLS 1.3**: wolfSSL과 함께 빌드하여 ML-KEM-768 및 ML-DSA-65와 같은 포스트 양자 알고리즘을 지원하는 안전한 통신이 가능합니다. - **경량 브로커**: 임베디드 환경에 적합한 간단한 MQTT 브로커를 포함하며, 선택적 TLS 및 WebSocket 전송을 통해 v3.1.1과 v5.0 클라이언트를 모두 지원합니다. - **WebSocket 지원**: 표준 또는 보안 WebSocket을 통해 MQTT 브로커에 연결합니다. - **멀티 플랫폼**: Linux, macOS, Windows(Visual Studio), MinGW, Zephyr RTOS, Arduino에서 빌드 가능합니다. - **논블로킹 및 멀티스레드 동작**: 향상된 동시성과 성능을 위한 선택적 기능. ## 빌드 ### Mac/Linux/Unix 1. `./autogen.sh` (GitHub에서 복제한 경우) 2. `./configure` (옵션은 `./configure --help` 참조) 3. `make` 4. `sudo make install` ### Windows Visual Studio 먼저 wolfSSL을 빌드한 후, `wolfmqtt.sln` 솔루션을 열고 동일한 아키텍처로 빌드합니다. ### CMake ``` mkdir build && cd build cmake .. -DWITH_WOLFSSL=/prefix/to/wolfssl/install/ cmake --build . ``` ### vcpkg `./vcpkg install wolfmqtt`로 설치합니다. ## 아키텍처 라이브러리는 세 가지 주요 구성 요소로 이루어져 있습니다: 1. **mqtt_client**: MQTT 클라이언트 작업(연결, 발행, 구독 등)을 위한 최상위 애플리케이션 인터페이스. 2. **mqtt_packet**: 모든 MQTT 패킷 유형에 대한 패킷 인코딩/디코딩을 처리합니다. 3. **mqtt_socket**: 선택적으로 TLS를 래핑하고 플랫폼별 네트워크 콜백을 사용하는 전송 계층. ## 예제 - **mqttclient**: 다양한 MQTT v5 기능을 갖춘 일반 클라이언트 예제. - **mqttsimple**: 표준 BSD 소켓을 사용하는 독립 실행형 클라이언트. - **nbclient**: 논블로킹 I/O 예제. - **firmware**: 서명된 이미지 발행 및 검증을 포함한 펌웨어 업데이트 예제. - **Azure IoT Hub**: Azure IoT Hub 연결을 위한 예제. - **AWS IoT**: TLS 클라이언트 인증서 인증을 사용하는 AWS IoT 예제. - **Watson IoT**: IBM Watson IoT Platform 예제. - **sn-client**: 센서 네트워크용 MQTT-SN 클라이언트 예제. - **multithread**: 멀티스레드 발행 및 메시지 대기를 보여줍니다. - **pub-sub**: 빠른 테스트를 위한 간단한 발행 및 구독 예제. - **websocket**: WebSocket 클라이언트 예제. ## 브로커 호환성 Adafruit IO, AWS, Azure, flespi, HiveMQ, IBM WIoTP, Mosquitto, Paho MQTT-SN Gateway, VerneMQ, EMQX와 함께 테스트되었습니다. ## 포스트 양자 MQTT 지원 `--enable-dilithium --enable-mlkem`으로 wolfSSL을 빌드한 후, wolfMQTT를 정상적으로 빌드합니다. `mqttclient` 예제에서 `-Q` 옵션을 사용하여 포스트 양자 그룹(예: `SecP384r1MLKEM768`)을 지정합니다. ## WebSocket 지원 `--enable-websocket`으로 빌드하고 `libwebsockets`를 설치합니다. 예제는 선택적 TLS 및 상호 인증과 함께 WebSocket을 통해 브로커에 연결합니다. ## 브로커 `--enable-broker`로 빌드하면 경량 MQTT 브로커가 포함됩니다. 자세한 내용은 `BROKER.md`를 참조하십시오. ## 추가 옵션 - 로깅을 위한 `--enable-debug` 또는 `--enable-debug=verbose`. - 논블로킹 I/O를 위한 `--enable-nonblock`. - 멀티스레딩을 위한 `--enable-mt`. - MQTT v5 지원을 위한 `--enable-v5`. - MQTT-SN 지원을 위한 `--enable-sn`. - libcurl의 easy 소켓 인터페이스를 백엔드로 사용하기 위한 `--enable-curl`. - 멀티스레딩 및 논블로킹을 사용한 스트레스 테스트를 위한 `--enable-stress`. 자세한 내용은 [wolfMQTT 매뉴얼](https://www.wolfssl.com/documentation/manuals/wolfmqtt/wolfMQTT-Manual.pdf)을 참조하십시오.