Pub/Sub에서 메시지를 확인한 후에는 해당 메시지에서 구독자 클라이언트에 액세스할 수 없게 됩니다. 또한 구독자 클라이언트는 하위 집합만 필요한 경우에도 구독의 모든 메시지를 처리해야 합니다.
탐색 기능은 대량의 메시지 확인 상태를 변경할 수 있는 확장된 구독자 기능입니다. 예를 들어 이전에 확인한 메시지를 다시 보거나 메시지를 대량으로 삭제할 수 있습니다. 또한 스냅샷을 탐색과 함께 사용하여 하나의 구독 상태를 다른 구독으로 복사할 수 있습니다.
이러한 기능 작동 방식에 대한 간단한 설명은 스냅샷 또는 타임스탬프를 탐색하여 Pub/Sub에서 메시지 재생을 참조하세요.
스냅샷 및 탐색 개요
Pub/Sub 스냅샷은 구독의 메시지 확인(ack) 상태를 나타내는 내구성, 일관성, 안정성을 갖춘 특정 시점 뷰입니다. 스냅샷은 생성되는 순간 구독 내의 모든 메시지의 확인 상태를 기록합니다. 스냅삿은 스냅샷 생성 시 소스 구독의 확인되지 않은 메시지와 스냅샷 생성 후 해당 주제에 게시된 모든 메시지를 보관합니다.
스냅샷 수명 주기는 소스 구독의 기존 백로그에 의해 결정됩니다. 이 수명 주기는 구독에서 가장 오래된 미확인 메시지의 수명을 뺀 7일과 같습니다. 예를 들어 확인되지 않은 가장 오래된 메시지가 있는 하루 경과한 백로그가 있는 구독의 스냅샷을 고려해 보세요. 이 스냅샷은 6일 후에 만료됩니다. 이 타임라인을 사용해야 스냅샷이 최소 한 번의 전송을 확실히 보장하게 됩니다.
최대 스냅샷 수명은 7일입니다. 생성된 지 1시간 이내에 만료되는 스냅샷을 만들 수 없습니다.
탐색 기능을 사용하면 구독에 대한 특정 스냅샷 또는 타임스탬프를 탐색할 수 있습니다. 이 기능을 사용하면 Pub/Sub에서 특정 시점 또는 특정 스냅샷의 메시지를 전송하는 방식을 제어할 수 있습니다.
과거의 시간을 탐색하여 이전에 확인된 메시지를 재생하려면 먼저 주제에 대한 메시지 보관을 구성하거나 확인된 메시지를 보관하도록 구독을 구성해야 합니다.
탐색 작업의 eventual consistency
탐색 작업은 메시지 전송 보장과 관련하여 일관성을 엄격히 유지합니다. 즉, 탐색 조건에 따라 확인되지 않은 모든 메시지는 탐색 작업이 성공한 후에 전송되도록 보장됩니다. 그러나 전송된 메시지가 즉시 탐색 작업과 일치하게 되는 것은 아닙니다. 따라서 타임스탬프 탐색 전에 게시된 메시지 또는 스냅샷에서 확인된 메시지는 탐색 작업 이후에도 전송될 수 있습니다. 메시지 전송은 결국 탐색 작업과 일관성 있는 시스템으로 작동한다고 볼 수 있습니다. 이 작업이 적용되려면 1분 정도 소요됩니다.
탐색 작업 사용 사례
- 구독자 코드를 안전하게 업데이트하세요. 새 구독자 코드를 배포할 때 우려되는 점은 새 실행 파일이 메시지를 잘못 확인하여 메시지가 손실될 수 있다는 것입니다. 배포 프로세스에 스냅샷을 통합하면 버그가 있는 새로운 구독자 코드를 복구할 수 있습니다.
- 예상치 못한 구독자 문제를 해결하세요. 구독자 문제가 특정 배포 이벤트와 관련이 없는 경우 관련 스냅샷이 없을 수 있습니다. 확인된 메시지 보관을 사용하도록 설정한 경우 과거 시간을 탐색하여 오류를 복구할 수 있습니다.
- 처리 시간과 비용을 절약하세요. 더이상 관련이 없는 대량의 메시지 백로그에 대한 일괄 확인을 수행합니다.
- 알려진 데이터에 구독자 코드를 테스트하세요. 성능 및 일관성을 위한 구독자 코드를 테스트할 때, 모든 실행에서 동일한 데이터를 사용하는 것이 유용합니다. 스냅샷은 강력한 시맨틱스로 데이터를 일관성을 높입니다. 또한 스냅샷은 새로 만들어진 주제를 비롯해 모든 주어진 주제에 대한 구독에 적용될 수 있습니다.
메시지 보관 구성
주제에 메시지 보관을 구성하고 확인된 메시지를 보관하도록 구독을 구성할 수 있습니다. 구독에 구성된 메시지 보관 기간보다 긴 기간 동안 재생을 위해 메시지를 보관하려면 주제 메시지 보관을 구성할 수 있습니다. 이 경우 주제의 프로젝트와 구독 프로젝트는 각각 해당하는 메시지 보관 설정에 따라 메시지 스토리지 요금이 청구됩니다.
주제 메시지 보관이 구성되지 않은 경우 미확인 메시지는 메시지의 기간이 구독의 message_retention_duration
속성을 초과할 때 구독에서 삭제됩니다. 반면 주제 메시지 보관이 구성되어 있으면 미확인 메시지는 메시지의 기간이 주제 및 구독의 message_retention_duration
를 초과할 때만 구독에서 삭제됩니다.
주제 메시지 보관 구성
기본적으로 Pub/Sub 주제는 주제에 연결된 모든 구독에서 메시지를 확인하는 즉시 메시지를 삭제합니다.
메시지 보관으로 주제를 구성하면 더 많은 유연성을 제공하여 주제에 연결된 모든 구독을 이전 시간에서 찾고 이전에 확인한 메시지를 주제의 최대 message_retention_duration
동안 재생할 수 있습니다.
주제 메시지 보관을 통해 구독이 생성되기 전에 게시된 메시지를 구독에서 재생할 수도 있습니다.
주제는 연결된 모든 구독에서 확인된 후에도 최대 31일(주제의 message_retention_duration
속성으로 구성 가능) 동안 게시된 메시지를 보유할 수 있습니다. 주제의 message_retention_duration
이 구독의 message_retention_duration
보다 긴 경우 Pub/Sub는 메시지의 기간이 주제의 message_retention_duration
을 초과할 때만 해당 메시지를 삭제합니다.
주제 메시지 보관을 사용 설정하면 주제가 보관한 메시지의 스토리지 비용이 주제의 프로젝트에 청구됩니다.
콘솔
메시지 보관을 사용 설정하여 주제를 만들려면 다음 순서를 따르세요.
Google Cloud 콘솔에서 Pub/Sub 주제 페이지로 이동합니다.
주제 만들기를 클릭합니다.
주제 ID 필드에 주제의 ID를 입력합니다.
메시지 보관 기간 설정을 사용 설정합니다.
다른 옵션은 기본 설정에서 그대로 둡니다.
메시지 보관 기간 드롭다운 메뉴를 사용하여 메시지를 보관할 일, 시간, 분을 선택합니다.
주제 만들기를 클릭하여 주제를 저장합니다.
주제의 메시지 보관 설정을 업데이트하려면 다음 순서를 따르세요.
Pub/Sub 주제 페이지에서 주제를 선택합니다.
주제 세부정보 페이지 상단의 수정을 클릭합니다.
보관 기간을 조정하거나 메시지 보관 사용 설정 옵션을 선택 또는 선택 해제하여 메시지 보관을 사용 설정하거나 중지합니다.
업데이트를 클릭하여 주제 변경사항을 저장합니다.
gcloud
메시지 보관 기간이 7일인 주제를 만들려면 다음 gcloud pubsub topics create
명령어를 사용합니다.
gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d
gcloud pubsub topics update
를 사용하여 이 설정을 업데이트할 수 있습니다. 이렇게 하면 기존 주제에 메시지 보관을 사용 설정할 수 있습니다.
gcloud pubsub topics update TOPIC_ID --message-retention-duration=1d
update
명령어를 사용하여 주제의 메시지 보관을 사용 중지할 수도 있습니다.
gcloud pubsub topics update TOPIC_ID --clear-message-retention-duration
구독 메시지 보관 구성
Pub/Sub는 구독이 생성될 때 구독을 대신해 메시지를 보관합니다. 기본적으로 Pub/Sub는 메시지가 확인되는 즉시 구독에서 메시지를 삭제합니다.
확인되지 않은 메시지는 기본적으로 7일 동안 보관됩니다(구독의 message_retention_duration
속성으로 구성 가능).
확인된 메시지를 보관하도록 retain_acked_messages
속성에서 구독을 구성하면 이전에 보관된 수신 확인 메시지를 구독으로 다시 재생할 수 있습니다. 구독에 최대 31일 동안 메시지가 보관되도록 구성할 수 있습니다. 이 구성은 확인된 메시지와 확인되지 않은 메시지 모두에 적용됩니다.
확인된 메시지를 보관하도록 구독을 구성하면 구독에 의해 보관된 확인 메시지에 대한 스토리지 비용이 구독 프로젝트에 청구됩니다.
콘솔
확인 메시지 보관이 사용 설정된 구독을 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Pub/Sub 구독 페이지로 이동합니다.
구독 만들기를 클릭합니다.
구독 ID 필드에 구독 ID를 입력합니다.
메시지 보관 기간 드롭다운 메뉴를 사용하여 메시지를 보관할 일, 시간, 분을 선택합니다.
확인된 메시지 보관을 사용 설정합니다. 다른 옵션은 기본 설정에서 그대로 둡니다.
구독 만들기를 클릭하여 구독을 저장합니다.
구독의 메시지 보관 설정을 업데이트하려면 다음 순서를 따르세요.
Pub/Sub 구독 페이지에서 구독을 선택합니다.
구독 세부정보 페이지 상단의 수정을 클릭합니다.
메시지 보관 기간을 조정하거나 확인된 메시지 보관이라고 표시된 필드를 선택/선택 해제하여 확인된 메시지의 보관을 사용 설정 또는 중지합니다.
업데이트를 클릭하여 구독 변경사항을 저장합니다.
gcloud
확인된 메시지를 보관하도록 사용 설정한 구독을 만들려면 다음 gcloud pubsub subscriptions create
명령어를 사용합니다.
gcloud pubsub subscriptions create SUBSCRIPTION_ID --retain-acked-messages --message-retention-duration=5d
gcloud pubsub subscriptions update
를 사용하여 이 설정을 업데이트할 수 있습니다. 이렇게 하면 기존 구독에 확인된 메시지를 보관할 수도 있습니다.
gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d
update
명령어를 사용하여 구독의 확인된 메시지 보관을 사용 중지할 수도 있습니다.
gcloud pubsub subscriptions update SUBSCRIPTION_ID --no-retain-acked-messages
스냅샷 만들기
콘솔, Google API 또는 Google Cloud CLI를 사용하여 스냅샷을 만들 수 있습니다.
콘솔
스냅샷을 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 스냅샷 페이지로 이동합니다.
스냅샷 만들기를 클릭합니다.
Pub/Sub 구독 선택에서 구독을 선택합니다.
스냅샷 ID에 스냅샷의 이름을 입력합니다.
Pub/Sub 리소스 이름 지정 방법에 대한 자세한 내용은 주제, 구독, 스키마, 스냅샷 이름 지정 가이드라인을 참조하세요.
만들기를 클릭하여 스냅샷을 만듭니다.
구독 페이지에서도 스냅샷을 만들 수 있습니다. 구독을 만든 직후에 스냅샷을 만들면 새로 만든 구독의 전파 지연으로 인해 오류가 발생할 수 있습니다.
gcloud
스냅샷을 만들려면 다음 gcloud pubsub snapshots create
명령어를 사용합니다.
gcloud pubsub snapshots create \ --project=PROJECT_ID \ --subscription=SUBSCRIPTION_ID \ SNAPSHOT_ID
다음을 바꿉니다.
PROJECT_ID
. 프로젝트의 ID를 지정합니다.SUBSCRIPTION_ID
. 구독 ID를 지정합니다.SNAPSHOT_ID
. 스냅샷의 ID를 지정합니다.
타임스탬프 탐색
시간 탐색은 시간이 확인되기 전에 Pub/Sub에서 수신한 모든 메시지와 해당 시간 이후에 수신된 모든 메시지를 수신 미확인으로 표시합니다.
타임스탬프를 기반으로 다음과 같은 유형의 탐색 작업을 수행할 수 있습니다.
모든 메시지를 영구 삭제하려면 미래의 시간을 탐색하면 됩니다.
이전에 확인된 메시지를 다시 보고 다시 처리하려면 과거의 시간을 탐색합니다.
메시지 게시 시간은 Pub/Sub 서버에서 생성됩니다(API 참조의 publishTime
참조). 이 방식은 다음과 같은 이유로 부정확합니다.
Pub/Sub 서버 간의 시계 보정값이 발생할 수 있습니다.
Pub/Sub가 소스 시스템에서 이벤트가 발생했을 때가 아닌 게시 요청의 도착 시간을 처리해야 합니다.
콘솔, Google API, Google Cloud CLI를 사용하여 타임스탬프를 탐색할 수 있습니다. 구독에서 타임스탬프를 탐색하기 전에 구독에서 메시지 보관이 사용 설정되어 있는지 확인합니다.
콘솔
타임스탬프를 탐색하려면 다음 단계를 수행합니다.
Google Cloud 콘솔에서 구독 페이지로 이동합니다.
메시지 보관이 사용 설정된 구독을 클릭합니다.
구독 세부정보 페이지에서 메시지 다시보기를 클릭합니다.
탐색에서 이전 시점까지를 클릭합니다.
적절한 날짜와 시간을 선택한 후 탐색을 클릭합니다.
gcloud
타임스탬프를 탐색하려면 다음 gcloud pubsub subscriptions seek
명령어를 사용합니다.
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --time=TIME \
다음을 바꿉니다.
- TIME: 탐색 작업을 수행할 시간입니다.
- SUBSCRIPTION_ID: 구독의 ID
지원되는 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.
스냅샷 탐색
스냅샷을 사용하면 모든 주제의 구독을 탐색하여 확인되지 않은 메시지를 재생할 수 있습니다.
시간 탐색과 달리 스냅샷 탐색에는 특별한 구독 구성을 수행할 필요가 없습니다. 스냅샷을 미리 만들기만 하면 됩니다. 예를 들어 예상치 못한 확인 또는 오류가 있는 확인으로부터 복구해야 하는 경우에 대비하여 새 구독자 코드를 배포할 때 스냅샷을 만들 수 있습니다.
구독의 백로그가 너무 오래되어 결과 스냅샷이 1시간 이내에 만료될 경우에는 탐색 작업이 실패합니다.
콘솔, Google API, Google Cloud CLI를 사용하여 스냅샷을 탐색할 수 있습니다.
콘솔
스냅샷을 탐색하려면 다음 단계를 수행합니다.
Google Cloud 콘솔에서 구독 페이지로 이동합니다.
구독을 클릭합니다.
구독 세부정보 페이지에서 메시지 다시보기를 클릭합니다.
탐색에서 스냅샷까지를 클릭합니다.
적절한 스냅샷을 선택한 후 탐색을 클릭합니다.
gcloud
스냅샷을 탐색하려면 다음 gcloud pubsub subscriptions seek
명령어를 사용합니다.
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --snapshot=SNAPSHOT_ID
다음을 바꿉니다.
- SNAPSHOT_ID`: 스냅샷의 ID입니다. 스냅샷 주제는 구독 주제와 동일해야 합니다.
- SUBSCRIPTION_ID: 구독의 ID
필터를 사용하여 탐색
필터를 사용하여 구독에서 메시지를 재생할 수 있습니다. 필터로 구독을 사용해서 타임스탬프를 탐색하려는 경우, Pub/Sub 서비스가 필터와 일치하는 메시지만 다시 전송합니다.
필터를 사용한 구독 스냅샷에는 다음 메시지가 포함됩니다.
- 필터와 일치하지 않는 메시지를 포함하며, 스냅샷보다 최신인 모든 메시지.
- 스냅샷보다 오래된 확인되지 않은 메시지
필터로 구독을 사용하여 스냅샷을 탐색할 경우, Pub/Sub 서비스는 스냅샷에서 탐색 요청을 수행하는 구독의 필터와 일치하는 메시지만 다시 전송합니다.
필터에 대한 자세한 내용은 메시지 필터링을 참조하세요.
데드 레터 주제로 탐색
구독에서 데드 레터 주제가 포함된 메시지를 찾는 경우 Pub/Sub는 전송 시도를 0
으로 설정합니다. 이러한 구독에서 받는 메시지에는 전송 시도 횟수를 기록하는 필드가 있습니다.
데드 레터 주제에 대한 자세한 내용은 데드 레터 주제로 전달을 참조하세요.
재시도 정책으로 탐색
재시도 정책이 포함된 구독에서 메시지를 탐색하는 경우 Pub/Sub는 다음 간의 지연을 재설정합니다.
- 확인 기한 만료 또는 구독자가 부정 확인 전송
- Pub/Sub가 메시지 다시 전송
재시도 정책에 대한 자세한 내용은 재시도 정책 사용을 참조하세요.
단 한 번의 전송으로 탐색
구독에서 정확히 한 번 전송된 메시지를 탐색하면 Pub/Sub가 이전에 확인된 전송 가능한 메시지를 다시 보냅니다. 탐색 작업 전에 수행된 모든 전송 확인은 실패합니다. 탐색 작업은 eventual consistency를 가집니다.
재시도 정책에 대한 자세한 내용은 1회만 전송을 참조하세요.