Google Cloud의 PubSub은 Message Queue 플랫폼입니다. 대표적인 Message Queue 서비스로는 Kafka
와 RabbitMQ
가
있습니다
다음 두 서비스와 비교해서 장점은 별다른 설정없이 손쉽게 이용하여 대용량 메시지들을 처리할 수 있습니다
좀 더 자세한 내용을 알고 싶으면 공식 문서를 참고해주세요
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.js
나 Python
으로
Pub/Sub
에 데이터를 넣고 불러오는 예제를 통해서 해보도록 하겠습니다. 간단히 말해서 메시지가 유실이 되면 안되는
실시간 데이터들을 Pub/Sub으로 보내면 얘가 알아서 핸들링을 해줍니다
이에 관련된 많은 API들이 지원되기 때문에
Message Provider에서 Pub/Sub으로 메시지를 던지기만 하면 됩니다