[go] Go 언어를 사용하여 AWS SNS 토픽에서 메시지 구독하기

AWS SNS 토픽에서 메시지를 수신하고 처리하는 것은 애플리케이션에서 중요한 기능일 수 있습니다. Go 언어를 사용하여 AWS SNS 토픽에서 메시지를 구독하는 방법에 대해 알아보겠습니다.

1. AWS SDK 설치

먼저 Go 언어를 사용하여 AWS 리소스에 액세스하기 위해 AWS SDK를 설치해야 합니다. go get 명령어를 사용하여 SDK를 설치합니다.

go get github.com/aws/aws-sdk-go

2. AWS SNS 구독 생성

AWS 콘솔을 사용하여 SNS 토픽을 생성하고 해당 토픽에 구독을 추가합니다. 이 때, 구독 엔드포인트 URL을 애플리케이션의 엔드포인트로 설정합니다.

3. Go 코드 작성

이제 Go 언어로 메시지를 수신하는 코드를 작성해봅시다. 아래는 AWS SNS 메시지를 처리하는 간단한 예제 코드입니다.

package main

import (
	"fmt"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/sns"
	"github.com/aws/aws-sdk-go/service/sqs"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	// AWS 세션 생성
	sess := session.Must(session.NewSessionWithOptions(session.Options{
		SharedConfigState: session.SharedConfigEnable,
	}))

	// SNS 서비스 클라이언트 생성
	svc := sns.New(sess)

	// 구독 ARN 설정
	subscriptionArn := "arn:aws:sns:us-west-2:123456789012:MyTopic:9555f071-1e3d-42fb-b8db-03f7fe5d3c89"

	// 메시지 핸들러 정의
	messageHandler := func(msg *sns.Message) {
		fmt.Println("Received message: " + aws.StringValue(msg.Message))
	}

	// 구독 생성
	resp, err := svc.Subscribe(&sns.SubscribeInput{
		Endpoint:              aws.String("http://example.com/my-endpoint"), // 애플리케이션 엔드포인트 URL
		Protocol:              aws.String("http"), // 프로토콜 (http 또는 https)
		TopicArn:              aws.String("arn:aws:sns:us-west-2:123456789012:MyTopic"),
	})

	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(resp)

	// 프로세스 종료를 위한 시그널 처리
	signals := make(chan os.Signal, 1)
	signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)

	// 프로세스 종료 시, 구독 삭제
	go func() {
		<-signals
		svc.Unsubscribe(&sns.UnsubscribeInput{
			SubscriptionArn: aws.String(subscriptionArn),
		})
		os.Exit(1)
	}()

	// 계속해서 실행
	select {}
}

위 코드에서 http://example.com/my-endpoint는 애플리케이션의 엔드포인트 URL로 대체되어야 합니다.

4. 코드 실행

코드를 작성하고 특정 엔드포인트 URL로 메시지를 보내어 테스트합니다. 메시지가 성공적으로 처리되면 구독이 올바르게 설정된 것입니다.

이제 Go 언어를 사용하여 AWS SNS 토픽에서 메시지를 구독하는 방법에 대해 이해하게 되었습니다. 필요에 따라 코드를 수정하여 실제 애플리케이션에 통합할 수 있습니다.

References

이제 Go 언어를 사용하여 AWS SNS 토픽에서 메시지를 구독하는 방법에 대해 알아보았습니다. 원하는 경우 이 코드를 기반으로 더 복잡한 시나리오에 맞게 확장할 수 있습니다.