효율적인 데이터 관리

많은 Google Ads 애플리케이션의 핵심 기능은 데이터 분석, 고객 쿼리, 정책 준수 확인과 같은 사용 사례에서 사용할 계정 데이터를 가져오는 것입니다. 데이터를 가져오는 동안 Google 서버에 과부하가 발생하거나 비율이 제한되는 위험이 없도록 사용량을 최적화해야 합니다. 자세한 내용은 비율 제한최신 연락처 이메일 주소 유지 가이드를 참조하세요.

데이터 캐시

API 서버에서 가져오는 항목 세부정보를 데이터가 필요할 때마다(특히 자주 액세스되거나 자주 변경되지 않는 항목의 경우) 서버를 호출하는 대신 로컬 데이터베이스에 캐시해야 합니다. 가능한 경우 change-eventchange-status를 사용하여 마지막으로 결과를 동기화한 이후 변경된 객체를 감지합니다.

보고서 실행 빈도 최적화

Google Ads에는 데이터 업데이트 빈도 및 데이터 업데이트 빈도에 관한 게시된 가이드라인이 있습니다. 이 안내에 따라 보고서를 가져오는 빈도를 결정해야 합니다.

계정을 정기적으로 업데이트해야 하는 경우 이러한 계정의 수를 소규모 집합(예: 상위 20개 Google Ads 계정)으로 제한하는 것이 좋습니다. 나머지는 더 낮은 빈도(예: 하루에 한 번 또는 두 번)로 업데이트할 수 있습니다.

보고서 크기 최적화

애플리케이션은 다수의 소규모 보고서를 실행하는 대신 대용량 데이터 배치를 가져와야 합니다. 이러한 선택에서 중요한 요소는 계정 한도입니다.

예를 들어 특정 광고그룹의 통계를 가져오고 통계 데이터베이스 표를 업데이트하는 다음 코드를 살펴보겠습니다.

  List<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  foreach (long adGroupId in adGroupIds)
  {
    string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
        "metrics.cost_micros, metrics.impressions, segments.date FROM " +
        "ad_group WHERE segments.date DURING LAST_7_DAYS AND " +
        "ad_group.id = ${adGroupId}";
    List<GoogleAdsRow> rows = RunGoogleAdsReport(customerId, query);
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

이 코드는 소규모 테스트 계정에서 원활하게 작동합니다. 그러나 Google Ads에서는 캠페인당 최대 20,000개의 광고 그룹과 계정당 최대 10,000개의 캠페인을 지원합니다. 따라서 이 코드를 대규모 Google Ads 계정에서 실행하면 Google Ads API 서버에 과부하가 발생하여 비율 제한 및 제한이 발생할 수 있습니다.

더 나은 접근 방식은 단일 보고서를 실행하고 로컬에서 처리하는 것입니다. 인메모리 맵을 사용하는 이러한 접근 방식 중 하나가 표시됩니다.

  Hashset<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
      "metrics.cost_micros, metrics.impressions, segments.date FROM " +
      "ad_group WHERE segments.date DURING LAST_7_DAYS";
  List<GoogleAdsRow> rows = RunGoogleAdsReport(customer_id, query);

  var memoryMap = new Dictionary<long, List<GoogleAdsRow>>();
  for each (GoogleAdsRow row in rows)
  {
    var adGroupId = row.AdGroup.Id;

    if (adGroupIds.Contains(adGroupId))
    {
      CheckAndAddRowIntoMemoryMap(row, adGroupId, memoryMap);
    }
  }
  foreach (long adGroupId in memoryMap.Keys())
  {
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

이렇게 하면 실행되는 보고서 수가 적어 Google Ads API 서버의 부하가 줄어듭니다.

보고서가 메모리에 보관하기에 너무 큰 경우 다음과 같이 LIMIT 절을 추가하여 쿼리를 더 작은 그룹으로 세분화할 수도 있습니다.

SELECT
  ad_group.id,
  ad_group.name,
  metrics.clicks,
  metrics.cost_micros,
  metrics.impressions,
  segments.date
FROM ad_group
WHERE segments.date DURING LAST_7_DAYS
  AND ad_group.id IN (id1, id2, ...)
LIMIT 100000

라벨은 항목을 그룹화하고 보고 쿼리 수를 줄이는 또 다른 방법입니다. 자세한 내용은 라벨 가이드를 참고하세요.

가져오는 항목 최적화

보고서를 실행할 때 쿼리에 포함하는 열에 유의해야 합니다. 1시간마다 실행되도록 예약된 다음 예시를 참조하세요.

SELECT
  customer.id,
  customer.currency_code,
  campaign.id,
  campaign.name,
  ad_group.id,
  ad_group.name,
  ad_group_criterion.keyword.match_type,
  ad_group_criterion.keyword.text,
  ad_group_criterion.criterion_id,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.system_serving_status,
  ad_group_criterion.negative,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  ad_group_criterion.quality_info.post_click_quality_score,
  metrics.historical_landing_page_quality_score,
  metrics.search_click_share,
  metrics.historical_creative_quality_score,
  metrics.clicks,
  metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS

1시간마다 변경될 수 있는 유일한 열은 metrics.clicksmetrics.impressions입니다. 다른 모든 열은 자주 업데이트되지 않거나 전혀 업데이트되지 않으므로 매시간 가져오는 것은 매우 비효율적입니다. 이러한 값을 로컬 데이터베이스에 저장하고 변경 이벤트 또는 변경 상태 보고서를 실행하여 하루에 한두 번 변경사항을 다운로드할 수 있습니다.

경우에 따라 적절한 필터를 적용하여 다운로드하는 행 수를 줄일 수 있습니다.

사용하지 않는 계정 정리하기

애플리케이션에서 서드 파티 광고주 계정을 관리하는 경우 고객 이탈을 염두에 두고 애플리케이션을 개발해야 합니다. 주기적으로 프로세스와 데이터 스토어를 정리하여 애플리케이션을 더 이상 사용하지 않는 고객의 계정을 삭제해야 합니다. 사용하지 않는 Google Ads 계정을 삭제할 때는 다음 사항에 유의하세요.

  • 고객이 계정을 관리하도록 애플리케이션에 부여한 승인을 취소합니다.
  • 고객의 Google Ads 계정에 대한 API 호출을 중지합니다. 이는 특히 사용자의 개입 없이 실행되도록 설계된 크론 작업 및 데이터 파이프라인과 같은 오프라인 작업에 적용됩니다.
  • 고객이 승인을 취소한 경우 애플리케이션은 상황을 적절하게 처리하고 잘못된 API 호출을 Google의 API 서버로 전송하지 않아야 합니다.
  • 고객이 Google Ads 계정을 해지한 경우 계정을 감지하고 잘못된 API 호출을 Google의 API 서버로 전송하지 않아야 합니다.
  • 적절한 기간이 지난 후 고객의 Google Ads 계정에서 다운로드한 데이터를 로컬 데이터베이스에서 삭제합니다.