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와의 지속적인 연결을 시작합니다. Search 응답의 각 개별 페이지를 요청하는 데 필요한 왕복 네트워크 시간을 없애면 SearchStream가 일반적으로 페이징보다 성능이 향상됩니다. 각 방법을 선택해야 하는 시기에 대해 자세히 알아보려면 스트리밍 보고서 가이드를 참고하세요.
액세스 토큰 새로고침 수동 관리
Google Cloud Functions와 같은 특정 스테이트리스 환경에서는 호출 간에 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.V25.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에서 지정할 수 있습니다.