큐 관리 또는 queue.yaml 사용 비교

이 페이지에서는 Cloud Tasks API를 사용하여 큐를 관리하는 방법과 Cloud Tasks queue.yaml 파일을 업로드하여 큐를 관리하는 방법의 차이점을 설명합니다. 또한 방법을 혼합할 때의 문제와 기타 일반적인 문제를 처리하는 방법도 설명합니다.

소개

Cloud Tasks API는 App Engine 태스크 큐 서비스에 App Engine과 독립적인 인터페이스를 제공합니다. 이 인터페이스의 일부로 콘솔 또는 gcloud 명령어를 통해 큐를 관리할 수 있습니다. Cloud Tasks API에 의해 만들어진 큐는 App Engine SDK에서 액세스할 수 있고 그 반대의 경우도 마찬가지입니다. 호환성을 유지하기 위해 App Engine SDK queue.yaml에서 사용하는 구성 파일을 사용할 수 있으며, 또한 Cloud Tasks API를 통해 사용할 큐를 만들고 구성할 수도 있습니다. 하지만 파일을 통한 구성과 Cloud Tasks API를 통한 구성을 혼합하면 예상치 못한 결과가 발생할 수 있습니다.

queue.yaml과 Cloud Tasks 큐 관리 메서드를 혼합할 때의 함정

기본 서비스의 경우 queue.yaml 파일 사용이 최종적입니다. 프로젝트의 생성 방법에 관계없이 프로젝트에서 기존 큐를 생략하는 queue.yaml 파일을 업로드하면 큐가 사용 중지 또는 일시중지됩니다. 따라서 Cloud Tasks API를 사용하여 CreateQueue 또는 UpdateQueue를 호출한 다음 이를 생략하는 queue.yaml 파일을 업로드하면 Cloud Tasks 호출에서 생성된 큐가 사용 중지됩니다.

다음 상황을 살펴보세요.

  1. CreateQueue를 호출하여 'cloud-tasks-queue'라는 큐를 만듭니다.
  2. 다음 콘텐츠가 포함된 queue.yaml 파일을 업로드합니다.

    queue:
    - name: queue-yaml-queue
    

이 프로젝트에서 큐의 현재 상태는 무엇인가요? 'cloud-tasks-queue'라는 큐와 이전에 있던 그 외 다른 큐는 DISABLED 상태이고 'queue-yaml-queue'라는 큐는 RUNNING 상태입니다.

Cloud Tasks API를 통해 큐를 만들면 예기치 않은 동작이 발생할 수 있습니다. 다음 안내에서는 사용 중지된 큐를 다시 시작하는 방법을 설명합니다.

마찬가지로 큐가 Cloud Tasks API에서 사용 중지되었지만 나중에 업로드된 queue.yaml 파일에 표시되는 경우 해당 큐가 다시 시작됩니다.

큐가 DeleteQueue 메서드로 삭제되고 나중에 queue.yaml 파일에 표시되면 삭제 후 며칠 동안 큐 이름을 재사용할 수 없으므로 queue.yaml 업로드가 실패할 수 있습니다.

권장사항

Cloud Tasks 또는 App Engine을 처음 사용하는 경우 Cloud Tasks API만 사용하여 큐를 관리하고 queue.yaml은 사용하지 않도록 합니다. 사용자는 Cloud Tasks 큐 관리 메서드를 사용하여 다양한 방법으로 큐를 생성, 업로드, 삭제할 수 있습니다.

그러나 기존의 queue.yaml 사용자이고 queue.yaml과 Cloud Tasks 큐 관리 메서드를 혼합할 때의 문제를 알고 있다면 큐 관리 메서드로 전환하는 것이 좋습니다.

사용자가 여러 작업 관리 메서드를 혼용하지 못하게 하는 방법 중 하나는 모든 사용자가 큐를 생성, 업데이트, 삭제할 때 반드시 사용해야 하는 웹 앱이나 명령줄 도구를 만드는 것입니다. 해당 도구가 Cloud Tasks 큐 관리 메서드 또는 queue.yaml 중 어떤 것을 사용하는지는 사용자가 신경 쓸 필요 없는 도구의 구현 세부정보입니다. 사용자가 이 도구를 사용해야 하는 경우 Cloud Tasks 큐 관리 메서드와 queue.yaml 사용이 부적절하게 혼합되지 않도록 보장할 수 있습니다. 이러한 도구를 사용하도록 지원하기 위해 도구에 큐 관리자 역할을 부여하고 사용자가 도구를 사용하려면 인증하도록 요구할 수 있습니다. 액세스 관리에 대한 자세한 내용은 보안 큐 구성을 참조하세요.

디버깅

프로젝트의 관리자 활동 감사 로그를 검사하여 큐 생성, 업데이트, 삭제를 포함한 큐 구성 변경 내역을 검색합니다.

    gcloud logging read \
      'protoPayload.methodName=
       (com.google.appengine.legacy.queue_created OR
        com.google.appengine.legacy.queue_updated OR
        google.cloud.tasks.v2.CloudTasks.CreateQueue OR
        google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
        google.cloud.tasks.v2.CloudTasks.DeleteQueue)'

예를 들어 기존 큐가 queue.yaml 업로드에 의해 사용 중지된 경우 '사용 중지된 큐 '[QUEUE_NAME]' 메시지가 com.google.appengine.legacy.queue_updated 메서드를 통해 감사 로그에 표시됩니다.

queue.yaml 업로드에 의해 사용 중지된 큐를 다시 시작하는 방법

queue.yaml과 Cloud Tasks 큐 관리 메서드를 혼합하는 경우 queue.yaml 파일을 업로드하면 Cloud Tasks API를 통해 만들어진 큐가 우발적으로 사용 중지될 수 있습니다.

큐를 다시 시작하려면 큐에서 ResumeQueue를 호출하거나 큐를 queue.yaml에 추가하여 업로드하면 됩니다. 이전에 큐의 queue.yaml 구성에서 커스텀 처리 rate를 설정했다면 ResumeQueue는 큐를 기본 rate로 재설정합니다. 이는 ResumeQueue에 대한 maxDispatchesPerSecond 응답 필드에 반영됩니다.

할당량

queue.yaml을 사용하여 큐를 만드는 경우 기본적으로 최대 100개의 큐를 만들 수 있습니다. Cloud Tasks API를 사용하여 만든 큐에는 기본적으로 최대 1,000 개의 큐가 있습니다. 다른 경우와 마찬가지로 queue.yaml과 Cloud Tasks API 메서드를 함께 사용하면 예기치 않은 결과가 생길 수 있습니다. 예를 들어 queue.yaml을 사용하여 일부 큐를 만든 다음 할당량을 2,000으로 높였다고 가정해 보겠습니다. Cloud Tasks API 메서드를 사용하여 추가 큐를 만든다면 할당량 오류가 발생합니다. 이를 해결하려면 Google Cloud 콘솔의 할당량 페이지에서 할당량 수정을 통해 요청을 제출하세요.

Cloud Tasks 대기열 관리 메소드에 대한 추가 정보

큐 구성 및 큐 시작 지연

큐 구성 변경사항이 적용되는 데 몇 분 정도 걸릴 수 있습니다. 예를 들어 CreateQueue 또는 UpdateQueue를 호출한 후 해당 큐에서 CreateTask를 호출하려면 몇 분이 지나야 합니다.

Cloud Tasks 및 default App Engine 큐

'default'라는 App Engine 큐는 App Engine SDK 및 Cloud Tasks API에서 특별하게 처리됩니다.

default 큐가 아직 없으면 다음과 같은 상황에서 큐가 생성됩니다.

  1. App Engine SDK를 사용하여 default 큐에 태스크를 처음 추가하는 경우
  2. default 큐를 지정한 queue.yaml 파일을 업로드하는 경우
  3. CreateQueue 또는 UpdateQueuedefault 큐를 생성하도록 호출되는 경우

App Engine과의 호환성을 유지하기 위해 Cloud Tasks는 다음 제한 사항을 적용합니다.

  1. 'default'라는 큐가 생성되면 큐에서 App Engine 태스크를 사용해야 합니다.
  2. 사용자는 만들어진 default 큐를 삭제할 수 없습니다.

Cloud Tasks API에서는 다음 사항이 default 큐에도 적용됩니다.

  1. Cloud Tasks API는 default 큐 또는 다른 모든 큐를 자동으로 만들지 않습니다.
  2. 다른 모든 큐와 마찬가지로 큐가 만들어지기 전에 호출한 경우 default 큐에서 GetQueue를 호출하면 찾을 수 없음 오류가 발생합니다.
  3. 마찬가지로 default 큐는 생성되기 전에는 ListQueues 출력에 표시되지 않습니다.
  4. default 큐의 구성은 UpdateQueue 호출을 통해 변경할 수 있습니다.

다음 단계