Google Cloud Platform 에서 PUB/SUB 사용하기

Google Cloud Platform 에서 PUB/SUB 사용하기

Google Cloud Platform(GCP)에서 실시간으로 안정적인 메시징 및 데이터 스트리밍을 제공하는 글로벌 서비스가 Pub/Sub 이다.

1. GCP Pub/Sub 서비스 소개 

1.1 확장 가능한 메시징 미딜웨어

Cloud Pub/Sub는 실시간 메시징 서비스로 개별 응용 프로그램간에 메시지를 주고 받을 수 있다. 그리고 GCP 또는 인터넷의 다른 곳에 있는 시스템 또는 컴포넌트들을  분리하기 위하여 Cloud Pub/Sub을 활용할 수 있다. Cloud Pub/Sub는 1초에 100만건을 낮은 대기 시간에 '적어도 한 번은' 제공되도록 설계되어 있다고 한다.

1.2 모든 데이터에 연결

Cloud Pub/Sub을 사용하여 여러 소스로부터 데이터에 publish와 subscribe 한 후, Google Cloud Dataflow에 의한 데이터의 파악도 실시간으로 실행할 수 있다. Cloud Pub/Sub을 사용하면 분산 응용 프로그램 구성 요구산의 복잡한 종석성을 줄일 수 있다. Cloud Pub/Sub는 구글의 광고에서 GMail까지 구글 앱에 사용되는 동일한 메시징 기술이라고 한다.

1.3 GCP의 Pub/Sub 특징

  • 뛰어난 확장성
    • 기본적으로 1초에 1만건의 메시지를 보낼 수 있고, 요청에 따라 100만 건 이상을 보낼 수 있음
  • Push / Poll 전달
    • Subscribers이 인터넷 또는 방화벽 내에 위치 여부에 상관없이 유연한 전달 옵션들을 가짐
  • 암호화
    • 모든 메시지 데이터는 전송될 때나 저장될 때도 암호화 되어 안전하게 보호
  • 복제된 스토리지
    • 모든 메시지를 여러 영역의 여러 서버에 저장하여 'at least once' 메시지 전달이 제공되도록 설계
  • 메시지 큐
    • 1:1 통신 패턴을 지원하기 위해 단일 Topic과 Subscription을 사용하는 확장 가능한 메시지 큐 생성
  • 종단 간 응답 확인
    • 응용 프로그램 수준에서 명시적인 응답을 확인함으로써 신뢰할 수 있는 응용 프로그램을 쉽게 구축 가능
  • Fan-Out
    • 1:N 또는 N:N 통신 패턴들을 지원하기 위해 하나의 Topic 메시지를 publish하고, 다중의 subscriber들이 복사본들을 받음
  • REST API
    • 많은 프로그래밍 언어에서 API 라이브러들과 함께 JSON 메시지를 사용하는 간단하고 상태가 없는 인터페이스


2. GCP Pub/Sub 서비스 사용하기

GCP의 모든 기능들이 동일하게 프로젝트 기반에서 동작한다. 따라서 Pub/Sub 서비스를 사용할 때도 우선 프로젝트를 생성이 필요하다. (참고: https://mansoo-sw.blogspot.kr/2016/10/google-cloud-platform-comput-enginevm.html)

2.1 Google Cloud Access Token 생성

GCP에서는 특정 서비스를 사용하기 위해서는 Access Token이 필요한데, 이것은 GCP Console에서 쉽게 생성할 수 있다.

Google Cloud Access Token 생성은 API 관리자에서 생성할 수 있다. 아래 그림과 같이 대시보드에서 '사용자 인증 정보로 이동' 버튼을 누른다.

'사용자 인증 정보 만들기' 버튼을 눌러 '서비스 계정 키'을 선택한다.


사용자 인증 정보에서는 '서비스 계정' 타입을 설정할 수 있는데, 여기서는 'Compute Engine default service account'을 선택하고, '키 유형'은 JSON 파일형태로 설정 후 '생성' 버튼을 누른다. 

인증 정보의 종류는 'Google Cloud Pub/Sub API'을 선택하고, 아래 항목은 설정된 환경에 맞춰 선택한다.

마지막 단계에서 '완료' 버튼을 누르면 JSON 파일을 다운로드 받을 수 있다. AWS와 동일하게 생성된 JSON 파일은 한번만 다운로드 받을 수 있기 때문에 잘 관리해야 한다.


2.2 Topic 만들기

프로젝트가 생성되면 '제품 및 서비스' 버튼()'을 누른 후 '게시/구독' 항목을 선택한다. 그리고 '주제(Topic) 만들기'를 선택하여 '주제 만들기' 팝업 창에서 'topic' 이름을 설정하면 된다. Topic 이름은 메시지를 구분하는 ID로 메시지가 Publisher로부터 Subscriber에게 전달된다.



Topic 이름은 'twitter' 로 입력 후 생성했다.



메시지를 구독(Subscription)하려면 아래와 같이 Topic(주제) 선택, 그 다음에 '+새구독' 을 선택 후 subscription 이름을 입력한다. 생성된 subscription은 왼쪽 화면에서 '구독' 버튼을 누르면 subscription 항목들을 볼 수 있다.

Subscription 이름도 'twitter'로 했다.




2.3 Topic / Subscription 사용하기 

간단하게 Node.js을 이용하여 topic을 publish하거나 publish된 topic에 대해 subscribe 후 받을 수 있도록 한다.

Node.js을 사용하여 GCP Pub/Sub을 이용하려면 npm 툴을 사용하여 google-cloud/pubsub 모듈을 설치하야 한다.

[Node.js 설치 / Linux]
만일 Node.js가 설치되지 않았다면 다음과 같이 설치 한다. 
$ sudo apt install nodejs-legacy
$ sudo apt install npm

[Node.js 설치 / macOS]
$ brew install node

Node.js와 NPM이 설치되었다면 google-cloud/pubsub 모듈을 설치할 수 있다. 단지 npm 툴의 버전은 3.0 이상이 되어야 한다.

[google-cloud/pubsub 모듈 설치]
$ mkdir ~/gcp_test
$ cd ~/gcp_test
$ npm install --save @google-cloud/pubsub

그리고 '2.1 Google Cloud Access Token 생성' 에서 다운로드 받은 JSON 파일을 복사하거나, 경로를 확인한다. 다음 JavaScript 소스는 'twitter' subscription에 subscribe 후에 'message' 이벤트를 받으면 화면에 표시를 하고, 단 한번 'New message' 데이터로 topic을 publish 하는 예제이다.

ACK을 보내지 않기 때문에 메시지를 지속적으로 받게 된다.


[실행]
$ node pub-sub.js

3. 참고


댓글

이 블로그의 인기 게시물

C++로 프로그래밍할 때 인자 또는 리턴 값으로 std::vector 등 STL 데이터 타입 처리하는 좋은 방법

macOS가 갑자기 부팅이 되지 않을 경우 데이터 복구 또는 백업 방법

Git 저장소를 병합하는 방법(How to merge repositories in Git)