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을 사용하세요.
Google Ads API는 객체를 가져오는 두 가지 주요 방법인 GoogleAdsService.Search (페이지 매김 사용) 및 GoogleAdsService.SearchStream(스트리밍 사용)를 제공합니다.
Search는 전체 보고서를 다운로드하기 위해 여러 페이지로 나뉜 요청을 전송하는 반면, SearchStream는 보고서 크기와 관계없이 단일 요청을 전송하고 Google Ads API와의 영구 연결을 시작합니다. SearchStream는 Search 응답의 각 개별 페이지를 요청하는 데 필요한 왕복 네트워크 시간을 없애므로 일반적으로 페이징보다 성능이 향상됩니다. 각 방법을 선택하는 시기에 대한 자세한 내용은 스트리밍 보고서 가이드를 참조하세요.
액세스 토큰 새로고침 수동 관리
Google Cloud Functions와 같은 특정 스테이트리스(Stateless) 환경에서는 호출 간에 GoogleAdsClient 인스턴스를 재사용하지 못할 수 있습니다.
이러한 환경에는 데이터를 저장하고 재사용하기 위한 자체 권장사항이 있습니다.
Google.Ads.GoogleAds v27.0.0 이상에서는 Credentials 속성을 사용하여 사전 구성된 자체 ICredential 인스턴스를 GoogleAdsConfig에 직접 삽입하고 채널 캐싱 (UseChannelCache = false)을 사용 중지할 수 있습니다.
커스텀 구성 클래스에서 사용자 인증 정보 생성을 캡슐화하려는 경우 (또는 이전 버전의 라이브러리를 사용하는 경우) 다음과 같이 GoogleAdsConfig 클래스를 확장하여 자체 액세스 토큰 새로고침을 수행할 수 있습니다.
// Create your own config class by extending the GoogleAdsConfig class.
class MyGoogleAdsConfig : GoogleAdsConfig
{
public MyGoogleAdsConfig() : base()
{
// Disable the library's built-in channel caching mechanism.
UseChannelCache = false;
}
protected override ICredential CreateCredentials()
{
// Create your own ICredential object here. You may refer to the
// default implementation of GoogleAdsConfig.CreateCredentials
// 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를 SearchStreamAsync와 같은 비동기 메서드에 전달할 수 있습니다.
using 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.V26.GoogleAdsService);
await googleAdsService.SearchStreamAsync(
request,
(SearchGoogleAdsStreamResponse resp) =>
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
},
callSettings);
가능한 경우 로깅 사용 중지
Google Ads .NET 라이브러리는 기본적으로 로깅을 사용 중지하고 앱 성능을 개선하는 지연 로깅 방식을 사용합니다. 개발 중에 로깅을 사용 설정하는 경우 프로덕션 환경에서 사용 중지해야 합니다. 프로덕션에서 특정 실패 요청을 모니터링해야 하는 경우 앱 성능에 부정적인 영향을 주지 않고 다음 단계 중 하나 이상을 수행할 수 있습니다.
- 요약 로그만 사용 설정합니다.
- 전체 로그를
ERROR수준으로 설정합니다. - 지원 채널과 공유할 수 있도록 실패한 특정 요청의 요청 ID를 저장합니다.
자세한 내용은 로깅 가이드를 참고하세요.
ReadyToRun 옵션 사용
최신 .NET은 PublishReadyToRun를 true로 설정하여 바이너리를 특정 플랫폼 및 아키텍처로 사전 컴파일한 후 유효한 RuntimeIdentifier를 지정하여 바이너리를 게시하는 것을 지원합니다. 자세한 내용은 ReadyToRun 배포 가이드를 참고하세요.
TieredCompilation 사용
TieredCompilation(.NET 8과 같은 최신 .NET 버전에서 기본적으로 사용 설정됨)을 사용하면 .NET에서 핫스팟을 식별하고 런타임 성능을 개선할 수 있습니다. 계층화된 컴파일은 ReadyToRun에서 잘 작동합니다. 사전 생성된 이미지를 사용하여 빠르게 시작한 다음 전체 최적화로 핫 메서드를 다시 컴파일할 수 있기 때문입니다.
자세한 내용은 TieredCompilation 가이드를 참고하세요.
가비지 컬렉션 (GC) 미세 조정
.NET은 가비지 컬렉션 (GC)에 대해 워크스테이션 프로필과 서버 프로필이라는 두 가지 일반 프로필을 제공합니다. 이 두 프로필은 성능 장단점이 다릅니다. Google Ads .NET 라이브러리를 사용하는 전용 서버 앱은 서버 프로필에서 실행할 때 더 나은 성능을 발휘하는 경우가 많습니다.
다음 GC 설정을 미세 조정하면 이점을 얻을 수 있습니다.
서버 가비지 컬렉션: 서버 가비지 컬렉션을 사용하면 .NET 런타임이 여러 GC 힙 및 스레드에서 작동하여 Google Ads API 앱에 더 높은 처리량을 제공할 수 있습니다. 자세한 내용은 서버 GC 가이드를 참조하세요. 앱의
.csproj파일에 다음 줄을 추가하여 서버 가비지 컬렉션을 사용 설정할 수 있습니다.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>동시 가비지 컬렉션: 동시 가비지 컬렉션을 사용 설정하여 .NET GC에 세대 2의 가비지 컬렉션을 위한 전용 스레드를 제공할 수 있습니다. 이 설정은 대규모 보고서를 처리할 때 유용할 수 있습니다. 앱의
.csproj파일에 다음 줄을 추가하여 동시 가비지 컬렉션을 사용 설정할 수 있습니다.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>VM 가비지 컬렉션 유지:
RetainVMGarbageCollection설정은 삭제해야 하는 가상 메모리 세그먼트를 나중에 사용하기 위해 대기 목록에 넣을지 아니면 운영체제 (OS)로 다시 해제할지 구성합니다. 앱의.csproj파일에 다음 줄을 추가하여 가상 메모리 유지를 사용 설정할 수 있습니다.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
워크스테이션과 서버 동작의 균형을 맞추는 설정을 선택하여 GC를 미세 조정할 수 있습니다. 모든 관련 GC 설정은 .NET 앱의 runtimeconfig.json 파일에서 환경 변수를 통해 또는 App.config에서 지정할 수 있습니다.