Google Cloud의 PubSub은 Message Queue 플랫폼입니다. 대표적인 Message Queue 서비스로는 KafkaRabbitMQ가 있습니다

다음 두 서비스와 비교해서 장점은 별다른 설정없이 손쉽게 이용하여 대용량 메시지들을 처리할 수 있습니다

좀 더 자세한 내용을 알고 싶으면 공식 문서를 참고해주세요


PubSub 구성

  • Topic : Message Provider 로부터 발생하는 Message를 받는 역할
  • Subscription : Topic이 정리해준 데이터를 가져오기 위한 역할로 용도별로 여러개를 가질 수 있습니다. (하나의 토픽으로 부터 데이터를 받기 때문에 동일한 데이터를 받음)


형태

  • Message
    • 실제 데이터가 들어갑니다
  • Message Attribute
    • Key-Value 형태의 메타 데이터가 들어갑니다

특징

  • 읽어들일때 순서를 보장하지 않습니다
  • 클라이언트가 메시지를 받은 뒤에 ACK를 보내지 않으면(기본 10초 이내), 해당 메시지는 다시 Pub/Sub으로 되돌어가고 최소 10분 ~ 최대 7일까지 보관됩니다
  • Subscriber가 Topic으로부터 가져오는 방법 말고도 Subscriber로 직접 보내는 방법도 지원합니다

사전 준비

로컬에서 API를 사용하기 위해서 설정을 해 주어야 하는 부분들

gcloud sdk 설치 후 인증받기

우선 Google Cloud SDK(=gcloud) 설치하기를 참고하여 gcloud 설치를 먼저 해줍니다

그 다음 gcloud auth login을 터미널에 입력을 해줍니다

그럼 아래와 같이 브라우저가 뜨면서 구글 계정을 선택하는 화면이 나오는데, 해당 프로젝트 계정을 클릭합니다

그럼 다음과 같이 권한 요청이 나오는데, 허용을 누릅니다


서비스 계정키를 다운 받아서 .bashrc에 등록하기

GCP 서비스를 이용하기 위한 서비스 계정 키를 얻기 위해 Google Cloud Console에서 메뉴 - API 및 서비스 - 서비스 계정을 누릅니다

아래와 같이 나오면 우측에 메뉴를 누르고 키 만들기를 누릅니다

그럼 아래와 같이 JSON 또는 P12를 선택하라고 하는데 여기서는 JSON을 선택하고 생성 버튼을 누릅니다

그럼 자동으로 Local로 다운로드 받아지게 됩니다

(한번밖에 다운로드 되지 않기 때문에 잘 보관해야 합니다)

그 다음 vi ~/.bashrc를 입력을 합니다. (다른 쉘을 쓰면 거기에 맞는걸 열어줍니다)

아래의 105번 라인과 같이 위에서 다운받은 서비스 계정 키의 경로를 GOOGLE_APPLICATION_CREDENTIALS에 넣어줍니다

## Google Cloud
export GOOGLE_CLOUD_SDK_PATH=/Users/jungwoon/google-cloud-sdk
export PATH=$PATH:$GOOGLE_CLOUD_SDK_PATH/bin
export GOOGLE_APPLICATION_CREDENTIALS=/Users/jungwoon/GoogleCredential/bigquerybyjw.json

실습

Google Cloud Console에 들어갑니다

메뉴에서 게시/구독을 선택합니다

(Pub/Sub이 번역이 되니 게시/구독이 되었네요)

그럼 아래와 같은 화면이 나오는데, 주제 만들기를 누릅니다

(만약 API 설정이 안되어 있다면 API 설정을 먼저 합니다)

주제 이름을 넣고 생성버튼을 누릅니다

그럼 다음과 같이 생성이 되는데 여기서 오른쪽의 메뉴 버튼을 눌러서 새 구독을 누릅니다

그럼 해당 토픽에 대한 구독이 생성됩니다

아래와 같은 화면이 나오면 구독 이름을 넣고 만들기 버튼을 누릅니다

그럼 아래와 같이 좌측의 구독을 눌렀을때 생성된 구독을 확인할 수 있습니다

이번에는 간단한 테스트를 위해서 메시지를 보내보겠습니다

주제에서 메뉴를 누르고 메시지 게시를 누릅니다

임의로 Hello World란 메시지를 입력하고 게시를 하도록 하겠습니다

확인을 위해서 Google Cloud Shell 활성화를 클릭합니다

(메시지를 UI에서 바로 확인은 불가합니다)

다음과 같이 터미널이 나타나면, 아래 명령어를 입력합니다

$ gcloud pubsub subscriptions pull [구독 이름]

여기서는 제가 구독이름을 test로 했기 때문에 gcloud pubsub subscriptions pull test를 입력했습니다

그럼 아래와 같이 먼저 입력한 Hello World란 메시지를 볼 수 있습니다


마무리

사실 이 정도만 가지고 어디서 어떻게 써야할지 모르겠지만, 다음번 Pub/Sub 포스팅에서는 Node.jsPython으로 Pub/Sub에 데이터를 넣고 불러오는 예제를 통해서 해보도록 하겠습니다. 간단히 말해서 메시지가 유실이 되면 안되는 실시간 데이터들을 Pub/Sub으로 보내면 얘가 알아서 핸들링을 해줍니다 이에 관련된 많은 API들이 지원되기 때문에 Message Provider에서 Pub/Sub으로 메시지를 던지기만 하면 됩니다