[go] Go 언어를 활용한 MQTT 통신 구현

본 문서에서는 Go 언어를 사용하여 MQTT(MQ Telemetry Transport) 프로토콜을 이용한 통신을 구현하는 방법에 대해 알아보겠습니다. MQTT는 경량화된 발행/구독(Publish/Subscribe) 메시징 프로토콜로, IoT(Internet of Things) 및 M2M(Machine to Machine) 통신 등에 주로 활용됩니다. Go 언어는 효율적인 동시성(concurrency) 처리와 네트워크 통신을 지원하여 MQTT 클라이언트를 개발하는 데 적합한 언어입니다.

1. MQTT 클라이언트 라이브러리 설치

먼저, Go 언어를 사용하여 MQTT 통신을 구현하기 위해 github.com/eclipse/paho.mqtt.golang 패키지를 설치해야 합니다. 아래 명령을 사용하여 패키지를 설치합니다.

go get github.com/eclipse/paho.mqtt.golang

2. MQTT 클라이언트 구현

다음으로, 아래의 예시 코드를 참고하여 MQTT 클라이언트를 구현할 수 있습니다. 이 예시 코드는 MQTT 브로커에 연결하고 메시지를 발행하는 간단한 예제입니다.

package main

import (
	"fmt"
	"os"
	"time"

	MQTT "github.com/eclipse/paho.mqtt.golang"
)

func main() {
	broker := "tcp://mqtt.eclipse.org:1883"
	opts := MQTT.NewClientOptions().AddBroker(broker)
	opts.SetClientID("go-mqtt-example")

	client := MQTT.NewClient(opts)
	if token := client.Connect(); token.Wait() && token.Error() != nil {
		fmt.Println(token.Error())
		os.Exit(1)
	}

	topic := "test/topic"
	message := "Hello, MQTT!"
	token := client.Publish(topic, 0, false, message)
	token.Wait()

	client.Disconnect(250)
}

위 예시 코드는 github.com/eclipse/paho.mqtt.golang 패키지를 이용하여 MQTT 클라이언트를 생성하고, 브로커에 연결한 후 메시지를 발행하는 과정을 보여줍니다.

3. MQTT 메시지 수신

MQTT 클라이언트에서 메시지를 수신하기 위해서는 Subscribe 함수를 사용하여 원하는 토픽을 구독해야 합니다. 아래는 메시지를 수신하는 예시 코드입니다.

func onMessageReceived(client MQTT.Client, message MQTT.Message) {
	fmt.Printf("Received message: %s from topic: %s\n", message.Payload(), message.Topic())
}

func main() {
	// ... (이전 예시 코드 생략)

	topic := "test/topic"
	if token := client.Subscribe(topic, 0, onMessageReceived); token.Wait() && token.Error() != nil {
		fmt.Println(token.Error())
		os.Exit(1)
	}

	// ...
}

위의 코드에서 onMessageReceived 함수는 새로운 메시지가 도착하면 호출되는 메시지 핸들러 함수입니다. Subscribe 함수를 통해 test/topic 토픽을 구독하고, 메시지가 도착할 때마다 onMessageReceived 함수가 호출됩니다.

마무리

본 문서에서는 Go 언어를 사용하여 MQTT 통신을 구현하는 간단한 방법을 살펴보았습니다. Go 언어의 풍부한 라이브러리와 동시성 처리 기능을 활용하여 안정적이고 효율적인 MQTT 클라이언트를 개발할 수 있습니다.

더 많은 기능 및 세부 옵션들을 적용하여 MQTT 클라이언트를 확장하고, 다양한 IoT 및 M2M 기기와의 통신에 활용할 수 있습니다.

관련 라이브러리 및 자세한 기능에 대해서는 Paho MQTT 등의 공식 문서를 참고하시기 바랍니다.