pull 큐를 Pub/Sub(Python)로 마이그레이션

이 페이지에서는 Task Queues에서 Pub/Sub로 pull 큐 코드를 마이그레이션하는 방법을 설명합니다. Pub/Sub는 현재 App Engine에서 pull 큐 작업을 수행하는 데 선호되는 방법입니다.

앱이 pull 큐와 push 큐를 모두 사용하는 경우 push 큐를 새로운 push 큐 서비스 Cloud Tasks로 마이그레이션하기 전에 이 가이드를 사용하여 pull 큐를 Pub/Sub로 마이그레이션합니다. push 큐를 Cloud Tasks로 마이그레이션한 후 pull 큐를 마이그레이션하는 것은 권장하지 않습니다. 필수적으로 사용해야 하는 queue.yaml 파일이 Cloud Tasks에서 예기치 않게 동작할 수 있기 때문입니다.

현재 Pub/Sub에서 사용할 수 없는 기능

현재 Pub/Sub에서는 다음 Task Queues 기능을 사용할 수 없습니다.

  • 태그별 일괄 처리
  • 자동 중복 삭제

가격 책정 및 할당량

pull 큐를 Pub/Sub로 마이그레이션하면 앱의 가격과 할당량이 영향을 받을 수 있습니다.

가격 책정

Pub/Sub에는 자체 요금 체계가 있습니다. Task Queues의 경우처럼 Pub/Sub으로 App Engine 앱에 요청을 보내면 앱에 비용이 발생할 수 있습니다.

할당량

Pub/Sub 할당량은 Task Queues의 할당량과 다릅니다. Task Queues의 경우처럼 Pub/Sub에서 App Engine 앱으로 요청을 보내면 App Engine 요청 할당량이 영향을 받을 수 있습니다.

마이그레이션하기 전에

아직 하지 않은 경우 Google Cloud와 호환되는 Python 버전을 사용하도록 Python 개발 환경을 설정하고 격리된 Python 환경을 만드는 테스트 도구를 설치하세요.

다음 섹션에서는 pull 큐를 Pub/Sub로 마이그레이션하기 전에 설정 단계를 설명합니다.

Pub/Sub API 사용

Pub/Sub API를 사용하도록 설정하려면 API 라이브러리에서 Pub/Sub API에서 사용 설정을 클릭합니다. 사용 설정 버튼 대신 관리 버튼이 표시되면 이전에 프로젝트에 Pub/Sub API를 사용 설정했으므로 다시 사용 설정할 필요가 없습니다.

Pub/Sub API에 앱 인증

Pub/Sub API에 앱을 인증해야 합니다. 이 섹션에서는 두 가지 사용 사례에 대한 인증을 설명합니다.

앱을 로컬로 개발하거나 테스트하려면 서비스 계정을 사용하는 것이 좋습니다. 서비스 계정을 설정하고 앱에 연결하는 방법은 수동으로 서비스 계정 사용자 인증 정보 획득 및 제공을 읽어보세요.

App Engine에 앱을 배포하기 위해 새 인증을 제공할 필요는 없습니다. 애플리케이션 기본 사용자 인증 정보(ADC)는 App Engine 앱의 인증 세부정보를 추론합니다.

Google Cloud CLI 다운로드

이전에 설치하지 않았으면 Google Cloud CLI를 다운로드하고 설치하여 Pub/Sub API에서 gcloud CLI를 사용합니다. Google Cloud CLI가 이미 설치되어 있으면 터미널에서 다음 명령어를 실행합니다.

gcloud components update

Cloud 클라이언트 라이브러리 가져오기

기존 App Engine 앱에서 Pub/Sub Python 클라이언트 라이브러리를 사용하려면 다음 단계를 수행합니다.

  1. app.yaml 파일을 업데이트합니다. 사용 중인 Python 버전에 해당하는 안내를 따르세요.

    Python 2

    Python 2 앱의 경우 최신 버전의 grpcio 라이브러리를 추가하세요.

    다음은 app.yaml 파일의 예시입니다.

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: latest
    

    Python 3

    Python 3 앱의 경우 지원되는 Python 3 버전을 사용하여 app.yaml 파일에서 runtime 요소를 지정합니다. 예를 들면 다음과 같습니다.

    runtime: python310 # or another support version
    

    Python 3 런타임은 라이브러리를 자동으로 설치하므로 이전 Python 2 런타임의 기본 제공 라이브러리를 지정할 필요가 없습니다. 마이그레이션 시 Python 3 앱이 다른 기존 번들 서비스를 사용하는 경우 계속 필요한 기본 제공 라이브러리를 지정할 수 있습니다. 또는 app.yaml 파일에서 불필요한 줄을 삭제할 수도 있습니다.

  2. requirements.txt 파일을 업데이트합니다. 사용 중인 Python 버전에 해당하는 안내를 따르세요.

    Python 2

    Pub/Sub의 Cloud 클라이언트 라이브러리를 requirements.txt 파일의 종속 항목 목록에 추가합니다.

    google-cloud-pubsub
    

    그런 다음 pip install -t lib -r requirements.txt를 실행하여 앱에 사용 가능한 라이브러리 목록을 업데이트합니다.

    Python 3

    Pub/Sub의 Cloud 클라이언트 라이브러리를 requirements.txt 파일의 종속 항목 목록에 추가합니다.

    google-cloud-pubsub
    

    App Engine은 Python 3 런타임에서 앱 배포 중에 이러한 종속 항목을 자동으로 설치하므로, lib 폴더가 있는 경우 이를 삭제하세요.

  3. Python 2 앱의 경우 앱에서 기본 제공 또는 복사된 라이브러리를 사용한다면 app.yaml 파일과 같은 폴더에 있는 appengine_config.py 파일에 해당 경로를 지정해야 합니다.

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    appengine_config.py 파일은 lib 폴더가 있는 위치를 현재의 작업 디렉터리라고 간주합니다. 일부 경우(예: 단위 테스트)에는 현재 작업 디렉터리가 다를 수 있습니다. 오류를 방지하기 위해 다음을 사용하여 lib 폴더로 전체 경로를 명시적으로 전달할 수 있습니다.

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. Task Queues API에서 pull 큐를 사용하는 파일에 Pub/Sub Python 클라이언트 라이브러리를 가져옵니다.

    from google.cloud import pubsub

Pub/Sub 및 pull 큐

기능 비교

Pub/Sub는 게시자/구독자 관계를 통해 작업자에게 작업을 보냅니다. 구독자가 주제에서 메시지를 가져오므로 Pub/Sub의 pull 구독은 Task Queues의 pull 큐와 같습니다. 아래 표에는 Task Queues에 있는 pull 큐의 핵심 기능과 Pub/Sub의 pull 구독 관련 기능이 나와 있습니다.

Task Queues 기능 Pub/Sub 기능
대기열 주제
작업 메시지
작업자 구독자

Pub/Sub 아키텍처에 대한 자세한 내용은 Cloud Pub/Sub: Google 규모의 메시징 서비스를 참조하세요.

워크플로 비교

다음은 Task Queues에서 pull 큐의 일반적인 워크플로와 Pub/Sub의 pull 구독의 특성을 비교한 표입니다.

Task Queues 워크플로 Pub/Sub 워크플로
pull 큐 만들기 주제를 만들고 구독자(예: 작업자)를 주제에 구독
태스크를 만들고 큐에 추가 메시지를 만들고 주제에 게시
작업자가 태스크를 임대 구독자가 주제에서 메시지를 끌어옴
작업자가 태스크 처리 구독자가 메시지 처리
작업자가 태스크를 큐에서 삭제 구독자가 메시지를 확인
임대 만료 모든 구독자가 메시지를 확인하면 주제가 메시지 삭제

Pub/Sub에서 pull 구독 만들기

Task Queues pull 큐처럼 Pub/Sub pull 구독을 사용할 수 있습니다. 주제 구독은 만료되지 않으며 여러 작업자가 동시에 사용할 수 있습니다. 즉, 작업자 두 개 이상이 메시지를 처리할 수 있으며 이는 Pub/Sub의 기본 사용 사례 중 하나입니다. Task Queues pull 큐를 Pub/Sub pull 구독으로 다시 만들려면 각 작업자의 주제를 만들고 연결된 작업자만 주제를 구독합니다. 이렇게 하면 Task Queues에서처럼 각 메시지를 정확히 작업자 하나가 처리합니다. pull 구독 만들기 및 관리에 대한 자세한 내용은 주제 및 구독 관리를 참조하세요.

pull 큐 삭제

Task Queues pull 큐를 Pub/Sub pull 구독으로 마이그레이션한 후 queue.yaml 파일을 사용하는 Task Queues에서 큐를 삭제합니다. 다음 큐를 마이그레이션하기 전에 각 pull 큐를 삭제하는 것이 좋습니다. 이렇게 하면 다른 pull 큐를 마이그레이션하는 동안 앱이 새 Pub/Sub pull 구독에서 수신하는 작업을 복제하지 않습니다. Task Queues pull 큐를 단일 배포로 삭제하지 않고 하나씩 삭제하면 App Engine 배포 할당량에 더 큰 부담을 줄 수 있습니다.

Task Queues에서 모든 pull 큐를 삭제한 후 앱의 향후 배포에서 queue.yaml 파일을 생략할 수 있습니다.

앱이 pull 큐만 사용하는 경우 코드에서 Task Queues API에 대한 참조를 삭제합니다. 앱이 pull 큐와 push 큐를 모두 사용하는 경우 pull 큐만 사용하는 파일에서 발생하는 Task Queues API에 대한 참조를 삭제하거나 push 큐도 마이그레이션할 때까지 기다린 후 모든 파일의 Task Queues API에 대한 참조를 삭제할 수 있습니다.

다음 단계