애플리케이션 성능

Google Ads .NET 클라이언트 라이브러리는 사용자의 구성을 최소화하면서 Google Ads API와 앱의 상호작용을 간소화합니다. 그러나 전체 성능은 라이브러리가 사용되고 앱과 통합된 방식에 따라 크게 달라집니다.

이 가이드에서는 .NET 앱에 적용되는 성능 최적화에 대해 설명하고 Google Ads API에 일반적으로 적용되는 권장사항을 보완합니다.

가능한 경우 GoogleAdsClient 재사용

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

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

가능한 경우 관리자 수준 계정의 액세스 토큰 사용

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

가능한 경우 검색 대신 SearchStream 사용

GoogleAdsService.Search는 페이지로 나눈 여러 요청을 전송하여 전체 보고서를 다운로드할 수 있지만 GoogleAdsService.SearchStream는 보고서 크기에 관계없이 단일 요청을 보내고 Google Ads API와 영구 연결을 시작합니다. 앱에 따라 Search 응답의 각 개별 페이지를 요청하는 데 필요한 왕복 네트워크 시간을 제거하여 SearchStream가 페이징에 비해 향상된 성능을 제공할 수 있습니다. 이 최적화에 관한 자세한 내용은 검색과 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 메서드에 대해 비동기 메서드를 생성합니다.

가능한 경우 로깅 사용 중지

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

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

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

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