애플리케이션 성능

Google Ads .NET 클라이언트 라이브러리는 최소한의 구성으로 앱과 Google Ads API 간의 상호작용을 간소화합니다. 그러나 전반적인 성능은 라이브러리가 사용되고 앱과 통합되는 방식에 따라 크게 달라집니다.

이 가이드에서는 .NET 앱에만 해당하는 성능 최적화를 다루며 Google Ads API에 일반적으로 적용되는 권장사항을 보완합니다.

가능하면 GoogleAdsClient 재사용

GoogleAdsClient는 API를 호출할 때 사용자의 세션을 나타냅니다. 다음과 같은 최적화를 제공합니다.

  • API 서비스에서 사용하는 gRPC 채널을 캐시합니다. 이렇게 하면 초기 API 호출 시 설정 시간이 줄어듭니다.
  • 가능한 경우 액세스 토큰 재사용 이렇게 하면 Google Ads .NET 클라이언트 라이브러리가 액세스 토큰을 새로고침하기 위해 실행해야 하는 왕복 횟수가 줄어듭니다.

가능하면 관리자 계정 수준의 액세스 토큰을 사용하세요.

  • 관리자 계정 수준에서 발급된 액세스 토큰이 있으면 이를 사용하여 해당 계정 계층 구조 아래의 모든 Google Ads 고객 계정에 대해 API를 호출할 수 있습니다. GoogleAdsClient 인스턴스 재사용과 결합하면 클라이언트 라이브러리가 액세스 토큰을 새로고침하기 위해 실행해야 하는 왕복 횟수를 더욱 줄일 수 있습니다.

가능하면 Search 대신 SearchStream을 사용하세요.

GoogleAdsService.Search는 전체 보고서를 다운로드하기 위해 여러 페이지로 나뉜 요청을 전송할 수 있지만, GoogleAdsService.SearchStream는 단일 요청을 전송하고 보고서 크기와 관계없이 Google Ads API와 지속적인 연결을 시작합니다. Search 응답의 각 개별 페이지를 요청하는 데 필요한 왕복 네트워크 시간을 제거함으로써 앱에 따라 SearchStream는 페이징보다 향상된 성능을 제공할 수 있습니다. 이 최적화에 대해 자세히 알아보려면 Search와 SearchStream 비교를 참고하세요.

액세스 토큰 새로고침 수동 관리

Google Cloud Functions와 같은 특정 환경에서는 GoogleAdsClient 인스턴스를 재사용할 수 없습니다. 이러한 환경에는 데이터를 유지하고 재사용하기 위한 자체 권장사항이 있을 수 있습니다. 이 경우 다음과 같이 GoogleAdsConfig 클래스를 확장하여 자체 액세스 토큰 새로고침을 실행할 수 있습니다.

// Create your own config class by extending the GoogleAdsConfig class.

class MyGoogleAdsConfig : GoogleAdsConfig
{
    public MyGoogleAdsConfig() : base()
    {
        // Disable the library's in-built channel caching mechanism.
        this.UseChannelCache = false;
    }
    protected override ICredential CreateCredentials()
    {
        // TODO: Create your own ICredentials object here. You may refer to the
        // default implementation of GoogleAdsConfig::CreateCreateCredentials
        // for an example.
    }
}

// Use your own config class when initializing the GoogleAdsClient instance.

MyGoogleAdsConfig myconfig = new MyGoogleAdsConfig();
GoogleAdsClient client = new GoogleAdsClient(myconfig);

출시 빌드용으로 컴파일

서버에 배포할 때는 출시 구성을 사용하여 앱을 컴파일해야 합니다. 디버그 구성을 사용하면 앱이 최적화 없이 전체 기호 디버그 정보로 컴파일됩니다.

앱 프로파일링

CPU 및 메모리 사용량에 대해 앱을 프로파일링하여 성능 병목 현상을 식별합니다. Visual Studio는 앱을 프로파일링하는 데 도움이 되는 진단 도구를 제공합니다. 사용 가능한 다른 상용 프로파일링 도구도 있습니다.

비동기 메서드 사용

async-await 패러다임을 사용하는 비동기 프로그래밍을 사용하면 성능 병목 현상을 방지하고 앱의 전반적인 응답성을 개선할 수 있습니다. Google Ads .NET 라이브러리는 모든 서비스 및 RPC 메서드에 대한 비동기 메서드를 생성합니다.

비동기 메서드 취소

callSettings 매개변수를 사용하여 CancellationToken를 비동기 메서드에 전달할 수 있습니다.

CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(3000);
CallSettings callSettings = CallSettings.FromCancellationToken(cancellationTokenSource.Token);

string query = "SELECT campaign.name FROM campaign";
var request = new SearchGoogleAdsStreamRequest()
{
    CustomerId = customerId.ToString(),
    Query = query,
};

GoogleAdsServiceClient googleAdsService = client.GetService(
    Services.V19.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    }, callSettings
);

가능하면 로깅 사용 중지

Google Ads .NET 라이브러리는 기본적으로 로깅을 사용 중지하고 앱의 성능을 개선하는 지연 로깅 접근 방식을 사용합니다. 로깅을 사용 설정하는 경우 프로덕션 환경에서는 사용 중지해야 합니다. 프로덕션에서 특정 실패 요청을 모니터링해야 하는 경우 앱의 성능에 부정적인 영향을 미치지 않으면서 다음 단계 중 하나 이상을 실행할 수 있습니다.

  • 요약 로그만 사용 설정합니다.
  • 전체 로그를 ERROR 수준으로 설정합니다.
  • 지원 채널과 공유할 수 있는 관심 있는 특정 요청의 요청 ID를 저장합니다.

자세한 내용은 로깅 가이드를 참고하세요.

SearchStream 또는 Search 메서드 사용 여부 결정

Google Ads API는 객체를 검색하는 두 가지 기본 방법인 Search 메서드(페이징 사용)와 SearchStream (스트리밍 사용)를 제공합니다.

SearchStreamSearch보다 우수한 성능을 제공하지만 Search가 선호되는 시나리오도 있습니다.

두 가지 방법에 관한 자세한 내용은 스트리밍 보고서 가이드를 참고하세요.

ReadyToRun 옵션 사용

.NET Core 3.1에서는 PublishReadyToRun 설정을 true로 지정한 다음 게시 시 유효한 RuntimeIdentifier를 지정하여 바이너리를 특정 플랫폼 및 아키텍처로 사전 컴파일하는 지원을 추가합니다. 자세한 내용은 ReadyToRun 기능 가이드를 참고하세요.

TieredCompilation 사용

TieredCompilation를 사용하면 .NET에서 핫스팟을 식별하고 성능을 개선할 수 있습니다. 계층화된 컴파일은 사용 가능한 경우 사전 생성된 이미지를 사용할 수 있으므로 ReadyToRun 옵션과 함께 더 잘 작동합니다. 자세한 내용은 TieredCompilation 가이드를 참고하세요.

가비지 컬렉션 (GC) 미세 조정

.NET은 가비지 컬렉션 (GC)을 위한 두 가지 일반 프로필, 즉 워크스테이션 프로필과 서버 프로필을 제공합니다. 이 두 프로필은 성능 절충점이 다릅니다. Google Ads .NET 라이브러리를 사용하는 앱은 서버 프로필에서 실행할 때 실적이 더 우수한 경향이 있습니다. 다음 GC 설정을 미세 조정하면 이점을 얻을 수 있습니다.

  • 서버 가비지 컬렉션: 서버 가비지 컬렉션을 사용하면 .NET 런타임이 여러 스레드에서 작동하여 Google Ads API 앱의 성능을 개선할 수 있습니다. 자세한 내용은 이 가이드를 참고하세요. 앱의 .csproj 파일에 다음 줄을 추가하여 서버 가비지 컬렉션을 사용 설정할 수 있습니다.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • 동시 가비지 컬렉션: 동시 가비지 컬렉션을 사용 설정하여 .NET GC에 2세대의 가비지 컬렉션 전용 스레드를 제공할 수 있습니다. 이 설정은 크기가 큰 보고서를 처리할 때 유용할 수 있습니다. 앱의 .csproj 파일에 다음 줄을 추가하여 동시 가비지 컬렉션을 사용 설정할 수 있습니다.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • VM 가비지 컬렉션 유지: RetainVMGarbageCollection 설정은 삭제해야 하는 가상 메모리 세그먼트를 나중에 사용할 수 있도록 대기 목록에 추가할지 아니면 운영체제 (OS)에 다시 할당할지 구성합니다. 앱에 다음 줄을 추가하여 가상 메모리 유지를 사용 설정할 수 있습니다.

    <PropertyGroup>
      <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
    </PropertyGroup>
    

워크스테이션과 서버 사이의 설정을 사용하여 GC를 미세 조정할 수 있습니다. 모든 관련 설정은 .NET Core 앱의 runtimeconfig.json 파일, 환경 변수 또는 .NET SDK 앱의 App.config에 지정됩니다.