리전 ID
REGION_ID
는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r
이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.
리전 ID에 대해 자세히 알아보세요.
Pub/Sub는 애플리케이션 사이에서 안정적인 다대다 비동기 메시징 기능을 제공합니다. 게시자 애플리케이션은 메시지를 주제로 보낼 수 있으며 다른 애플리케이션은 주제를 구독하여 메시지를 수신할 수 있습니다.
이 문서에서는 Cloud 클라이언트 라이브러리를 사용하여 Go 앱에서 Pub/Sub 메시지를 전송 및 수신하는 방법을 설명합니다.
기본 요건
- App Engine에서 Go용 'Hello, World!'의 안내를 따라 환경과 프로젝트를 설정하고 App Engine Go 앱의 구조에 대해 알아봅니다.
- 이 문서에 설명된 샘플 애플리케이션을 실행할 때 필요하므로 프로젝트 ID를 기록해 둡니다.
샘플 앱 클론
샘플 앱을 로컬 머신에 복사한 후
pubsub
디렉터리로 이동합니다.go get -d -v github.com/GoogleCloudPlatform/golang-samples/pubsub cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/appengine_flexible/pubsub
주제 및 구독 만들기
주제 및 구독을 만듭니다. 이때 Pub/Sub 서버가 요청을 전송할 엔드포인트를 지정해야 합니다.
gcloud pubsub topics create YOUR_TOPIC_NAME gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \ --topic YOUR_TOPIC_NAME \ --push-endpoint \ https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/pubsub/push?token=YOUR_TOKEN \ --ack-deadline 10
YOUR_TOKEN
을 무작위의 비밀 토큰으로 바꿉니다. 내보내기 엔드포인트에서 이 토큰을 사용해 요청을 확인합니다.환경 변수 설정
app.yaml
파일을 수정하여 주제 및 확인 토큰의 환경 변수를 설정합니다.코드 검토
샘플 앱은 Google Cloud Pub/Sub 클라이언트 라이브러리를 사용합니다.
샘플 앱은 구성에서
app.yaml
파일(PUBSUB_TOPIC
및PUBSUB_VERIFICATION_TOKEN
)에 설정한 환경 변수를 사용합니다.이 인스턴스에서 수신한 메시지는 슬라이스에 저장됩니다.
messages []string
pushHandler
함수는 푸시된 메시지를 수신하고 토큰을 확인하고 메시지를messages
슬라이스에 추가합니다.publishHandler
함수는 새 메시지를 주제에 게시합니다.로컬에서 샘플 실행
로컬에서 실행 시 Google Cloud CLI를 사용하여 Google Cloud API 사용을 위한 인증을 제공할 수 있습니다. 기본 요건의 설명대로 환경을 설정했다면 이 인증을 제공하는
gcloud init
명령어를 이미 실행한 것입니다.그런 다음 애플리케이션을 시작하기 전에 환경 변수를 설정합니다.
export GOOGLE_CLOUD_PROJECT=[your-project-id] export PUBSUB_VERIFICATION_TOKEN=[your-token] export PUBSUB_TOPIC=[your-topic] go run pubsub.go
푸시 알림 시뮬레이션
애플리케이션은 로컬에서 메시지를 보낼 수 있지만 로컬에서 푸시 메시지를 받지는 못합니다. 하지만 로컬 푸시 알림 엔드포인트에 HTTP 요청을 전송하면 푸시 메시지를 시뮬레이션할 수 있습니다. 샘플에는
sample_message.json
파일이 포함되어 있습니다.curl
또는httpie
클라이언트를 사용하여 HTTPPOST
요청을 보낼 수 있습니다.curl -H "Content-Type: application/json" -i --data @sample_message.json "localhost:8080/pubsub/push?token=[your-token]"
또는
http POST ":8080/pubsub/push?token=[your-token]" < sample_message.json
응답:
HTTP/1.1 200 OK Date: Tue, 13 Nov 2018 16:04:18 GMT Content-Length: 0
요청이 완료되면
localhost:8080
을 새로고침하고 수신 메시지 목록에서 메시지를 확인할 수 있습니다.App Engine에서 실행
gcloud
명령줄 도구로 App Engine에 데모 앱을 배포하려면app.yaml
파일이 있는 디렉터리에서 다음 명령어를 실행합니다.gcloud app deploy
이제
https://PROJECT_ID.REGION_ID.r.appspot.com
에서 애플리케이션에 액세스할 수 있습니다. 양식을 사용하여 메시지를 제출할 수 있지만 애플리케이션에서 어떤 인스턴스가 알림을 수신하는지 보장하지는 못합니다. 여러 메시지를 전송하고 페이지를 새로 고쳐 수신된 메시지를 확인할 수 있습니다.