Functions, 이벤트, 트리거를 사용해 이벤트 기반 앱을 빌드하는 방법
Krishna Chytanya Ayyagari
Generative AI Field Solutions Architect
* 본 아티클의 원문은 2021년 10월 20일 Google Cloud 블로그(영문)에 게재되었습니다.
오늘날 많은 개발자들이 이벤트 기반 아키텍처(EDA)를 사용하여 앱을 설계하고자 합니다. 이 소프트웨어 아키텍처 패러다임은 이벤트 생성, 인식, 사용, 반응을 촉진합니다. 느슨하게 결합된 소프트웨어 구성요소와 서비스 사이에 이벤트를 전송하는 애플리케이션과 시스템을 설계하고 구현하는 데 최적인 아키텍처 패러다임입니다.
Google Cloud의 서비스로서의 기능(FaaS) 제품인 Cloud Functions를 사용하면 이벤트와 트리거를 활용하여 이벤트 기반 애플리케이션을 빌드할 수 있습니다. 이벤트는 데이터베이스 내 데이터 변경사항, 스토리지 시스템에 추가된 파일 또는 생성된 새로운 가상 머신 인스턴스 등 개발자가 작업할 클라우드 환경 내에서 발생하는 모든 종류의 활동이나 요소를 의미합니다. 이벤트가 발생하면 트리거를 통해 함수를 호출할 수 있습니다. Cloud Functions는 서버 관리 없이 코드를 실행할 수 있고 이벤트와 트리거에서 작동할 수 있는 확장 가능하고 사용한 만큼만 지불하는 서비스로서의 기능(FaaS)을 제공합니다.
이 블로그에서는 Cloud Functions, 이벤트, 트리거를 사용하여 확장 가능한 이벤트 기반 애플리케이션을 빌드하는 방법을 설명합니다. 최근 뉴스 이벤트의 예시를 통해 아키텍처를 설명하고 Cloud Functions, 이벤트, 트리거, Natural Language API를 사용하여 사람, 위치, 조직, 이벤트, 소비재 등 알려진 모든 항목에 대한 항목 감정 메타데이터 저장소를 빌드하는 단계별 절차를 살펴겠습니다.
그러면 이 저장소를 사용하여 뉴스 내 다양한 항목에 대해 표현된 감정이 긍정적인지 부정적인지 판단할 수 있습니다. 예를 들어 2021년 10월 12~14일까지 진행된 Google Cloud Next ‘21에서는 다양한 Google Cloud 제품이 논의됐습니다. 논의된 제품에 대한 여러 언론이나 개발자 블로그의 반응을 파악하는 것은 이벤트의 전체적인 효과를 이해하는 데 중요한 정보가 될 수 있습니다.
Cloud Functions, 이벤트, 트리거 이해하기
예시를 살펴보기 전에 아키텍처의 다양한 구성요소를 알아보겠습니다.
이벤트는 데이터베이스 내 데이터 변경사항, 스토리지 시스템에 추가된 파일 또는 생성된 새로운 가상 머신 인스턴스 등 개발자가 작업해야 할 수 있는 클라우드 환경 내에서 발생하는 모든 종류의 활동이나 요소를 의미합니다. Cloud Functions는 다음과 같은 환경에서 발생하는 이벤트를 지원합니다.
- HTTP
- Cloud Storage
- Cloud Pub/Sub
- Cloud Firestore
- Firebase(실시간 데이터베이스, Cloud Storage, 애널리틱스, 인증)
- Cloud Logging
예를 들어 Cloud Pub/Sub 주제에 새 메시지가 게시되거나 Cloud Storage 버킷컷에 변경사항이 발생하면 작업을 트리거할 수 있는 이벤트가 생성될 수 있습니다. 이벤트가 발생하면 애플리케이션 상태가 변경될 수 있습니다. 예를 들어 고객이 제품을 구매하면 제품 상태가 '재고 있음'에서 '판매됨'으로 변경됩니다.
이러한 기본 이벤트 소스 외에도 기타 많은 소스에서 Cloud Build 알림이나 Cloud Scheduler 작업 같은 메시지를 Pub/Sub를 통해 제공할 수 있습니다.
Cloud Functions에는 HTTP 함수와 이벤트 기반 함수 등 두 가지 유형이 있습니다. 또한 이벤트 기반 함수는 작성된 Cloud Functions 런타임에 따라 백그라운드 함수 또는 CloudEvent 함수일 수 있습니다.
HTTP 함수
HTTP 함수는 표준 HTTP 요청에서 호출될 수 있습니다. 이 HTTP 요청을 보낸 클라이언트는 동기식으로 응답을 기다리고 HTTP 함수는 GET, PUT, POST, DELETE, OPTIONS 같은 일반 HTTP 요청 메서드의 처리를 지원할 수 있습니다.
이벤트 기반 함수
Cloud Functions는 이벤트 기반 함수를 사용하여 Pub/Sub 주제의 메시지 또는 Cloud Storage 버킷의 변경사항과 같은 클라우드 인프라의 이벤트를 처리할 수 있습니다. Cloud Functions는 두 가지 하위 유형의 이벤트 기반 함수를 지원합니다.
- 백그라운드 함수: Node.js, Python, Go, 자바 Cloud Functions 런타임용으로 작성된 이벤트 기반 함수를 백그라운드 함수라고 합니다. 자세한 내용은 백그라운드 함수 작성을 참조하세요.
- CloudEvent 함수: .NET, Ruby, PHP 런타임용으로 작성된 이벤트 기반 함수를 CloudEvent 함수라고 합니다. 자세한 내용은 CloudEvent 함수 작성을 참조하세요.
백그라운드 함수와 CloudEvent 함수 같은 이벤트 기반 함수는 Pub/Sub 주제의 메시지, Cloud Storage 버킷의 변경사항 또는 Firebase 이벤트 같은 이벤트에 반응하여 Cloud Functions가 간접적으로 호출될 때 사용될 수 있습니다.
CloudEvent 함수는 백그라운드 함수와 개념적으로 유사합니다. 두 유형의 함수에서 주된 차이점은 CloudEvent 함수가 CloudEvents라는 업계 표준 이벤트 형식을 사용한다는 것입니다. 또 다른 차이점은 Cloud Functions가 다른 컴퓨터 플랫폼에서 재생산될 수 있는 HTTP 요청을 사용하여 CloudEvent 함수를 직접 호출할 수 있다는 점입니다. 이러한 차이점 덕분에 CloudEvent 함수를 컴퓨팅 플랫폼 간에 원활하게 이전할 수 있습니다.
이 블로그에서는 CloudEvent 함수를 통해 Cloud Functions을 사용하여 이벤트 기반 아키텍처를 만드는 방법을 설명하는 데모를 만들어 보겠습니다.
이벤트 기반 아키텍처(EDA)의 이해
이벤트 기반 아키텍처(EDA)는 이벤트 생성, 인식, 사용, 반응을 촉진하는 소프트웨어 아키텍처 패러다임입니다. 이 아키텍처 패러다임은 느슨하게 결합된 소프트웨어 구성요소와 서비스 사이에 이벤트를 전송하는 애플리케이션과 시스템을 설계하고 구현하는 데 최적입니다.
예시를 통해 종합적으로 살펴하기
이 예시는 Cloud Functions(이벤트 기반), Cloud Scheduler, Google Cloud 머신러닝 API 같은 관리형 서비스를 사용하여 RSS 피드 콘텐츠를 분석하는 서비스를 빌드하는 이벤트 기반 아키텍처의 구축에 초점을 둡니다.
목표
이 예시를 통해 머신러닝 API를 사용하여 매일 일정한 간격으로 RSS 피드와 항목 감정 분석을 수집하고, 분석하고, 저장해 보겠습니다. 항목 분석과 감정 분석이 결합된 항목 감정 분석은 텍스트 내에서 항목에 대해 표현되는 감정(긍정적 또는 부정적)을 판단하려고 시도합니다. 이 분석은 다음과 같은 경우에 유용합니다.
- 블로그나 뉴스 기사에 언급된 제품, 회사 또는 인물 등 모든 항목을 확인하려는 경우
- 항목에 대해 어떤 감정이 표현됐는지 파악하려는 경우
데이터 엔지니어링팀은 이러한 사용 사례를 바탕으로 뉴스에서 가장 많이 언급된 항목과 그에 대한 감정 같은 최근 트렌드를 살펴서 해당 항목이 시장에서 어떻게 인식되는지 파악할 수 있습니다.
아키텍처:
위 아키텍처는 RSS 피드를 수집하자마자 분석할 수 방법에 대한 워크플로를 보여줍니다. 로직은 다음과 같습니다.
- STEP 1: 하나의 RSS 피드 링크에는 하나 이상의 URL이 있습니다. 함수를 작성하여 RSS 피드 링크의 URL을 파싱하고 큐에 저장합니다.
- STEP 2: 1단계의 큐에서 URL을 하나씩 읽고 웹페이지 콘텐츠를 다운로드하는 함수를 작성합니다. 모든 웹페이지 콘텐츠를 영구 스토리지에 저장합니다.
- STEP 3: 마지막으로, 2단계의 영구 스토리지에 저장된 웹페이지 콘텐츠를 읽고, 분석하고, 결과를 또 다른 영구 스토리지 대상에 쓰는 또 따른 함수를 작성합니다.
다음은 Google Cloud 관리형 서비스를 사용하여 위에 설명한 단계를 빌드하는 단계별 프로세스입니다.
- STEP 1: Cloud Scheduler가 샘플 메시지를 Pub/Sub에 작성합니다. 이 이벤트가 발생하면 바로 시작하도록 구성된 클라우드 함수를 호출합니다.
위와 같은 구성에 따라 매일 오전 5시(PDT)에 메시지를 Pub/Sub 주제에 작성합니다.
- STEP 2: RSS 피드에는 하나 이상의 웹페이지 URL이 있습니다. 1단계에서 Pub/Sub에 작성된 메시지가 RSS 피드의 콘텐츠를 다운로드하고 콘텐츠에서 웹페이지 URL 목록을 파싱하는 클라우드 함수를 트리거합니다. 그러면 해당 URL이 추가 처리를 위해 또 다른 Pub/Sub 주제에 작성됩니다.
위와 같은 구성에 따라 Pub/Sub 트리거를 통해 스케줄러 이벤트가 도착하는 오전 5시에 Cloud Functions가 실행되기 시작합니다.
다음은 C#, .NET core 3.1로 작성되어 RSS 피드를 파싱하고 거기에서 웹페이지 URL을 수집하는 새플 코드입니다.
함수 publishMessageWithRetrySettingsAsync
는 여기에서 찾을 수 있습니다.
- STEP 3: 2단계에서 Pub/Sub에 작성된 URL이 웹페이지 텍스트를 다운로드하고 텍스트를 Cloud Storage 버킷에 작성하는 새 클라우드 함수를 트리거합니다.
위와 같은 구성에 따라, 2단계에서 RSS 피드로부터 수집되어 Pub/Sub에 작성된 웹페이지 URL별로 클라우드 함수가 실행됩니다.
다음은 Python 3.9로 작성되어 웹페이지 텍스트를 다운로드하고 Cloud Storage에 저장하는 샘플 코드입니다. 웹페이지를 파싱하고 텍스트를 추출하는 데 BeautifulSoup 라이브러리가 사용됩니다.
3단계에서 아래와 같이 웹페이지 텍스트가 Cloud Storage에 저장됩니다.
- STEP 4: 3단계에서 새 파일이 생성되면 웹 페이지 텍스트에 대해 항목 감정 분석을 실시하고 결과를 또 다른 Cloud Storage 버킷에 작성하는 새로운 클라우드 함수가 트리거됩니다.
이와 같은 구성에 따라, 다운로드되어 Cloud Storage 버킷에 저장된 웹 페이지 텍스트별로 클라우드 함수가 실행됩니다.
다음은 Nodejs 14로 작성되어 Cloud Storage 버킷에서 데이터를 읽고, 다운로드 웹페이지 텍스트를 파싱하여 Cloud Storage에 저장하는 샘플 코드입니다.
analyzeEntitySentiment
함수가 항목 감정 분석을 실시합니다. Natural Language API에는 텍스트 데이터를 분석하고 주석을 달기 위한 여러 가지 메서드가 있습니다. Natural Language API를 사용하여 텍스트 데이터를 분석하는 방법은 여기를 참고하세요.
수집된 분석 데이터는 데이터 엔지니어링팀에서 ‘최근에 가장 많이 논의된 항목(사람, 제품 등)'과 ‘해당 항목에 관련된 감정’ 등에 대한 질문에 답을 찾는 데 사용될 수 있습니다. 이 같은 질문은 기존 마케팅 캠페인의 전반적인 효과나 최신 트렌드를 이해하여 마케팅 또는 홍보 캠페인을 향상하는 데 도움이 될 수 있습니다.
리소스:
- 위 서비스의 모든 로그는 Cloud Logging에서 사용할 수 있습니다.
- Cloud Functions는 로컬에서 테스트하고 디버깅할 수 있습니다.
- 모든 서비스는 느슨하게 결합되어 있습니다.
- Vertex AI를 사용하여 마지막에 수집된 메타데이터를 분석할 수 있습니다.
요약:
Cloud Functions는 최소한의 수고로 이벤트 기반 애플리케이션을 만드는 데 사용할 수 있는 강력한 서비스입니다. 위 둘러보기는 다양한 Google Cloud 서비스와 다국어 지원과 함께 제공되는 Cloud Functions 이벤트, 트리거, 통합을 소개합니다. 시작하려면 아래 참조를 확인하세요.
참조: