사용자 에이전트 타겟팅

User-Agent 헤더는 이전에 기기의 브라우저 및 플랫폼과 같은 유용한 타겟팅 데이터를 제공하기 위해 입찰 요청에 포함되어 있었습니다. 그러나 브라우저는 사용자 에이전트를 크게 수정하는 경우가 많은데, 이는 사용의 어려움으로 인해 사용자 개인 정보를 더 안전하게 보호하기 위함입니다. 이에 따라 Google은 사용자 에이전트 헤더를 보완할 수 있는 경우 입찰 요청에 포함되는 사용자 에이전트 클라이언트 힌트를 지원합니다. 클라이언트 힌트 (줄여서)는 Sec-Ch-UA* 헤더 또는 JavaScript Client Hints API에서 가져올 수 있습니다.

사용자 에이전트 헤더는 사용되는 프로토콜에 따라 다음 문자열 필드 중 하나와 함께 노출됩니다.

  • Google: BidRequest.user_agent
  • OpenRTB: BidRequest.device.ua

UserAgent 메시지는 클라이언트 힌트를 사용할 수 있을 때 그 내용으로 채워지지만 그 외의 경우에는 사용자 에이전트 헤더에서 파싱된 값에 따라 채워집니다. 사용되는 프로토콜에 따라 다음 필드 중 하나로 표시됩니다.

  • Google: BidRequest.user_agent_data
  • OpenRTB: BidRequest.device.sua

입찰자는 사용자 에이전트 문자열이 아닌 UserAgent 메시지를 사용하는 것이 좋습니다.

UserAgent가 채워지는 방법

사용자 에이전트 헤더와 달리 UserAgent 메시지는 사용자 에이전트 정보를 특정 정보에 관한 여러 필드로 나누어 나타냅니다.

광고 요청에서 클라이언트 힌트를 사용할 수 있는지에 따라 UserAgent 메시지는 다음과 같은 방식으로 채워질 수 있습니다.

  • 요청에 낮은 엔트로피 클라이언트 힌트가 포함된 경우 콘텐츠를 기반으로 UserAgent가 채워집니다.
  • 요청에 User-Agent 헤더만 포함된 경우, UserAgent는 헤더에서 파싱할 수 있는 항목을 기반으로 채워집니다.

예: User-Agent 헤더를 기반으로 UserAgent 채우기

브라우저에서 다음 헤더를 전송하는 광고 요청이 있다고 가정해 보겠습니다.

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

User-Agent 헤더만을 기반으로 하여 채워진 UserAgent은 다음과 같습니다.

browsers: [{ brand: "Mozilla", version: ["5", "0"] },
           { brand: "AppleWebKit", version: ["537", "36"] },
           { brand: "Chrome", version: ["103", "0", "0", "0"] },
           { brand: "Safari", version: ["537", "36"] }],
platform: { brand: "Windows NT", version: ["10", "0"] },
mobile: false,
architecture: "x86",
bitness: "64",
model: "x64",
source: USER_AGENT_STRING

예: 클라이언트 힌트를 기반으로 UserAgent 채우기

브라우저에서 다음 헤더를 전송하는 광고 요청이 있다고 가정해 보겠습니다.

User-Agent:                 Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Sec-Ch-Ua:                  ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
Sec-Ch-Ua-Arch:             x86
Sec-Ch-Ua-Full-Version:     103.0.5060.134
Sec-Ch-Ua-Mobile:           ?0
Sec-Ch-Ua-Platform:         Windows
Sec-Ch-Ua-Platform-Version: 15.0.0

적어도 낮은 엔트로피 클라이언트 힌트가 포함된 경우 사용자 에이전트 헤더가 있더라도 UserAgent는 헤더의 콘텐츠를 기반으로 채워집니다. 다음과 같이 표시됩니다.

browsers: [{ brand: ".Not/A)Brand", version: ["99", "0", "0", "0"] },
           { brand: "Google Chrome", version: ["103", "0", "5060", "134"] },
           { brand: "Chromium", version: ["103", "0", "5060", "134"] }],
platform: { brand: "Windows", version: ["15", "0", "0"] },
mobile: false,
architecture: "x86",
bitness: "64",
source: CLIENT_HINTS_HIGH_ENTROPY

사용자 에이전트 헤더와 클라이언트 힌트를 기반으로 채우기

일부 필드는 사용자 에이전트 헤더 또는 클라이언트 힌트 중 무엇을 기반으로 하는지에 따라 다르게 채워집니다. 다음은 이러한 차이점을 요약한 내용입니다.

  • 동일한 브라우저와 플랫폼에서 UserAgent.browsers.brandUserAgent.platform.brand는 사용자 에이전트 헤더 또는 클라이언트 힌트에 따라 UserAgent 간에 다른 경우가 많습니다. 예를 들어 UserAgent.platform.brand가 사용자 에이전트 헤더 기반이면 'Windows NT'로, 클라이언트 힌트 기반이면 'Windows'로 표시될 수 있습니다.
  • 일부 UserAgent.browsers 항목은 User-Agent 헤더 또는 클라이언트 힌트마다 고유합니다. 예를 들어 UserAgent가 사용자 에이전트 헤더를 기반으로 하면 'AppleWebKit'이 표시되고 클라이언트 힌트를 기반으로 하는 경우에만 'Chromium'이 표시됩니다.
  • 사용자 에이전트 헤더를 기반으로 하는 UserAgent에만 고정된 값이 포함될 수 있습니다. 예를 들어 플랫폼이 Windows 11 22H2인 경우 UserAgent.platform.brand은 'Windows NT'로 설정되고 UserAgent.platform.version[“10”, “0”]로 설정됩니다. 이는 10 이상의 Windows 버전에 대한 고정 값이기 때문입니다.

클라이언트 힌트를 기반으로 하는 UserAgent의 데이터는 일반적으로 고정되거나 수정된 정보를 부정확하게 대체하지 않습니다. 클라이언트 힌트에 기반한 User-Agent 헤더와 UserAgent 간에 불일치가 있는 경우 UserAgent의 정보를 사용하는 것이 좋습니다.

UserAgent 객체 필드

이 섹션에서는 Google RTB 관련 동작 및 사용 권장사항에 중점을 두고 각 필드를 요약합니다.

브라우저

일반적으로 특정성에 따라 정렬되는 BrandVersion 항목의 목록을 포함합니다. 예를 들어 browsers의 콘텐츠를 나열하면 각 항목의 brand가 다음과 같은 순서로 표시될 수 있습니다.

브랜드 의미
Mozilla Mozilla 호환
AppleWebKit AppleWebKit 기반이며 Mozilla의 하위 집합입니다.
Chrome Chrome 브라우저 - AppleWebKit 호환 브라우저의 하위 집합
Safari 데스크톱 버전(모바일이 아님)

특히 클라이언트 힌트를 기반으로 하는 경우 UserAgent가 브라우저를 항상 특정 순서로 나열하는 것은 아닙니다. 다음은 source 값에 따라 발생할 수 있는 그 밖의 차이점을 설명합니다.

  • USER_AGENT: version 필드가 메이저 버전으로 축소되거나 고정될 수 있습니다 (에이전트별 정책에 따라 다름). 값이 고정되었음을 나타내지는 않습니다.
  • CLIENT_HINTS_LOW_ENTROPYCLIENT_HINTS_HIGH_ENTROPY: 항목이 어떤 기준에도 따라 정렬되지 않습니다. 예를 들어 동일한 브라우저가 각 요청에서 이러한 항목을 서로 다른 순서로 전송할 수 있습니다. 여기에는 무시해야 하는 GREASE 항목이 포함될 수도 있습니다.
  • CLIENT_HINTS_HIGH_ENTROPY: 브라우저에 있는 모든 version 필드는 정식 버전으로 설정될 수 있습니다.

플랫폼

플랫폼을 설명하는 BrandVersion 항목. 이는 사용자 에이전트 헤더와 클라이언트 힌트에서 호환되지 않을 수 있으므로 일부 플랫폼을 타겟팅하려면 두 이름을 테스트해야 할 수 있습니다. 예를 들어 Apple의 Macintosh 운영체제는 User-Agent 헤더에는 'Macintosh'로, 클라이언트 힌트에는 'macOS'로 브랜드화되어 있습니다. 다음은 source 값에 따라 확인할 수 있는 그 밖의 차이점을 설명합니다.

  • USER_AGENT: version 필드를 메이저 버전으로 줄이거나 고정할 수 있습니다. 값이 고정되었다는 표시는 없습니다.
  • CLIENT_HINTS_LOW_ENTROPY: version 필드가 채워지지 않습니다.
  • CLIENT_HINTS_HIGH_ENTROPY: version 필드는 전체 버전으로 설정할 수 있습니다.

모바일

광고와 같은 콘텐츠를 작은 화면 또는 터치 입력에 최적화해야 하는지 여부를 나타냅니다. 모바일 브라우저는 '데스크톱 사이트'를 요청하도록 구성할 수 있으므로 이는 반드시 기기 유형을 나타내는 것은 아닙니다.

아키텍처

'x86' 또는 'arm'과 같은 플랫폼의 아키텍처를 식별합니다.

클라이언트 힌트를 기반으로 하는 UserAgent의 경우 sourceCLIENT_HINTS_HIGH_ENTROPY로 설정된 경우에만 채워집니다.

비트

플랫폼에 32비트 또는 64비트 CPU가 있는지와 같은 플랫폼의 비트성을 식별합니다. 이 필드는 아키텍처에 관한 추가 정보를 제공하는 정수 문자열입니다. 예를 들어 'x86' 아키텍처의 비트율은 '32' 또는 '64'로 설정될 수 있습니다.

클라이언트 힌트를 기반으로 하는 UserAgent의 경우 sourceCLIENT_HINTS_HIGH_ENTROPY로 설정된 경우에만 채워집니다.

모델

기기 모델을 식별합니다. 노트북이나 데스크톱이 아닌 휴대기기의 경우 'Pixel 6 Pro'와 같은 모델 이름으로 채워집니다.

다음은 source 값에 따라 달라질 수 있는 차이점을 설명합니다.

  • USER_AGENT
    • 휴대기기가 아닌 기기: model 필드에는 종종 Windows용 'x64'와 같이 결합된 아키텍처 및 비트율 값이 포함됩니다. 이 값은 크로스 플랫폼이 아닙니다. 예를 들어 Linux는 동일한 하드웨어에 'x86_64'를 사용할 수 있습니다.
    • 휴대기기: 이 필드에는 아키텍처 및 비트성이 포함되지 않습니다. 이러한 값에 관심이 있으면 UserAgent.architectureUserAgent.bitness를 참고하세요.
  • CLIENT_HINTS_LOW_ENTROPY: model 필드가 채워지지 않습니다.
  • CLIENT_HINTS_HIGH_ENTROPY: model 필드는 휴대기기의 기기 모델에만 채워집니다. 데스크톱 플랫폼에는 설정된 값이 없습니다.

소스

UserAgent를 만드는 데 사용된 헤더를 식별합니다. 클라이언트 힌트의 경우 이렇게 하면 다음 두 사례가 구분됩니다.

  • CLIENT_HINTS_LOW_ENTROPY: 기본 클라이언트 힌트만 사용할 수 있습니다.
  • CLIENT_HINTS_HIGH_ENTROPY: 높은 엔트로피로 분류된 필드를 하나 이상 포함한 클라이언트 힌트를 사용할 수 있습니다.