용어
- GTAF: Google Traffic Application Function(Google 트래픽 애플리케이션 기능) 데이터 요금제 공유 API를 구현하고 Google 애플리케이션을 대신하여 DPA와 상호작용하는 Google 서비스입니다. Google 애플리케이션은 GTAF에 사용자의 데이터 요금제 정보를 쿼리할 수 있습니다. 또는 Google 애플리케이션이 GTAF에 등록되면 GTAF에서 사용자의 데이터 요금제에 관한 업데이트를 보낼 수 있습니다.
- MSISDN: Mobile Station International Subscriber Directory Number(모바일 스테이션 국제 가입자 디렉터리 번호)로, 모바일 네트워크에서 구독을 고유하게 식별하는 번호입니다. 일반적으로 전화번호라고 합니다.
- CPID 엔드포인트: 사용자의 데이터 요금제 정보를 조회하는 데 사용할 수 있는 이동통신사 요금제 식별자 (CPID)를 생성하는 모바일 네트워크 이동통신사가 구현한 서비스입니다. CPID를 사용하면 애플리케이션이 사용자의 MSISDN에 액세스하지 않고도 사용자의 데이터 요금제 세부정보를 쿼리할 수 있습니다. 아래에서는 CPID 생성 절차를 설명합니다.
- 사용자 키: 사용자 키는 사용자의 데이터 요금제를 식별하는 데 사용할 수 있는 문자열입니다. MSISDN에 액세스할 수 있는 애플리케이션의 경우 CPID 또는 MSISDN일 수 있습니다.
- DPA: 데이터 요금제 에이전트. 모바일 네트워크 사업자가 구현한 서비스로, 사용자 데이터 요금제 정보를 GTAF와 공유합니다. DPA는 Google 모바일 데이터 요금제 공유 API를 사용하여 데이터를 전송하고 데이터 요금제 에이전트 API를 구현하는 방식을 조합하여 GTAF와 정보를 공유할 수 있습니다. DPA는 선택적으로 CPID 엔드포인트 역할도 할 수 있습니다.
- UE: 사용자 장비, 사용자가 사용하는 기기입니다.
요구사양 언어
이 가이드의 키워드 '해야 합니다', '안 됩니다', '필요합니다', '해야 합니다', '하지 않습니다', '해야 합니다', '안 됩니다', '좋습니다', '할 수 있습니다', '선택사항'은 RFC 2119에 설명된 대로 해석합니다.
모바일 데이터 요금제 공유
개략적으로 모바일 데이터 요금제 공유는 다음 세 부분으로 구성됩니다.
- 사용자 키로 사용할 수 있는 이동통신사 요금제 식별자 (CPID)를 설정하고 업데이트하는 메커니즘 MSISDN에 액세스할 수 있는 애플리케이션은 이를 사용자 키로 사용할 수 있습니다.
- DPA가 사용자 데이터 요금제에 관한 정보를 Google에 전송할 수 있는 Google 모바일 데이터 요금제 공유 API 예를 들어 DPA가 사용자에게 혜택을 알리려면 GTAF에 알릴 수 있고 GTAF는 사용자에게 알립니다.
- GTAF가 DPA에 사용자 데이터 요금제에 관한 정보를 쿼리할 수 있도록 DPA에서 구현한 데이터 요금제 에이전트 API입니다. 예를 들어 애플리케이션이 사용자에게 현재 데이터 요금제 잔액을 표시하려는 경우 GTAF를 쿼리할 수 있으며 GTAF는 DPA를 쿼리합니다.
이 페이지의 나머지 부분에서는 데이터 요금제 용어를 소개하고 CPID를 설정하는 방법을 자세히 설명합니다. Google Mobile Data Plan Sharing API 및 Data Plan Agent API 사양은 다음에 따릅니다.
데이터 요금제 용어
API에 정의된 planStatus의 스키마는 운영자가 사용자에게 제공하는 데이터 요금제를 나타낼 수 있어야 합니다(MUST). 이 API는 특정 URL 집합으로 향하는 모든 트래픽에 대해 다른 요금으로 사용자에게 청구하는 데이터 요금제를 정의하는 것을 지원합니다 (예: *.acmefake.com으로 향하는 모든 트래픽에 대해 다른 요금으로 청구). API는 앱의 특정 유형의 작업에 대해 다른 요금을 제공하는 데이터 요금제도 지원합니다. 이러한 데이터 요금제를 하위 앱 데이터 요금제라고 합니다. 하위 앱 데이터 요금제의 예로는 무료 (즉, 요금 0) 동영상 탐색을 제공하는 반면 애플리케이션 내에서 동영상을 시청하면 구독자의 데이터 잔액에서 데이터가 차감되는 것을 들 수 있습니다. 그러면 동영상 앱은 데이터 요금제 정보를 쿼리할 때 이 정보를 알 수 있어야 합니다(MUST).
여기에서는 데이터 요금제와 관련된 몇 가지 용어를 소개합니다. 그림 1에서는 캡처하려는 개념을 나타내는 데이터 요금제의 예를 보여줍니다.
데이터 요금제: 구독자가 구매하는 최상위 모바일 서비스 패키지입니다. '30일 동안 10GB 모바일 데이터'와 같이 간단할 수도 있고 모듈이라고도 하는 구성요소 모음으로 정의할 수도 있습니다. 데이터 요금제에는 다음이 있습니다.
- 데이터 요금제 이름(예: 'ACME Red')
- 데이터 요금제 식별자: 구매 시와 같이 요금제를 참조하는 데 사용됩니다.
- 만료 시간: 데이터 요금제가 만료되는 시간입니다.
- 요금제 카테고리: 요금제가 선불 요금제인지 후불 요금제인지 여부입니다.
요금제 모듈: 데이터 요금제의 구성요소입니다. 특히 계획 모듈에는 다음이 있습니다.
- 모듈 이름(예: '무료 동영상 야간')
- 최대 속도: 이 모듈에서 사용자에게 제공하는 대역폭입니다.
- 유연한 기간: 사용자에게 할인을 제공할 수 있는 기간입니다.
계획 모듈 트래픽 카테고리 (PMTC): 모듈이 적용되는 데이터 트래픽에 관한 설명입니다. PMTC는 *모든 인터넷 트래픽 *과 같이 일반적일 수도 있고 하나 이상의 애플리케이션, 웹사이트 또는 단일 애플리케이션 내의 사용자 여정에서 생성/소비되는 트래픽과 같이 구체적일 수도 있습니다. 후자의 예로는 '무제한 음악', '100MB 동영상 데이터 팩(VDP)', '무제한 게임 데이터', '무제한 동영상 탐색' 등이 있습니다. PMTC 정의를 용이하게 하기 위해
GENERIC, VIDEO, VIDEO_BROWSING, VIDEO_OFFLINE
1, MUSIC, GAMING, SOCIAL, MESSAGING
및PMTC_UNSPECIFIED.
와 같은 PMTC를 정의했습니다.데이터 볼륨 또는 시간 제한: 활성화되면 데이터 볼륨 또는 시간 제한 (시간 기반 요금제의 경우, 예: 다음 7일 동안의 인터넷 액세스 시간이 600분을 초과합니다. 아래 그림 1에서 구독자는 활성화 후 일주일 이내에 사용해야 하는 1GB의 일반 사용자 트래픽을 제공하는 'ACME Blue'의 일부로 요금제 모듈을 구매할 수 있습니다.
그림 1. 샘플 데이터 요금제
CPID 설정
GTAF는 DPA와 통신할 때 사용자 키를 사용하여 구독자를 식별합니다. 사용자의 MSISDN에 액세스할 수 있는 애플리케이션은 이를 user_key로 사용할 수 있습니다. 반면 MSISDN에 액세스할 수 없는 애플리케이션은 사용자의 MSISDN을 검색하지 않고 이동통신사 요금제 식별자 (CPID)를 설정해야 합니다. 다음에서는 CPID를 설정하는 메커니즘을 설명합니다.
CPID 통화 흐름
그림 2: CPID를 설정하는 호출 흐름
- UE의 Google 애플리케이션은 Google 내부 API를 사용하여 GTAF에서 CPID 엔드포인트의 URL을 가져옵니다. 운영자는 클라이언트의 공개 IP 주소와 활성 SIM 카드의 MCC+MNC를 사용하여 식별됩니다. MVNO의 경우 Google은 SPN 및 GID1을 사용하여 MVNO를 확인합니다.
- 클라이언트는 CPID 엔드포인트에 HTTP GET 요청을 실행합니다. 운영자는 HTTPS를 통해 요청을 전송하는 것을 지원할 수 있습니다(MAY).
- 운영자는 딥 패킷 검사 기능을 사용하여 요청을 식별하고 사용자의 전화번호를 HTTP 헤더로 요청에 삽입할 수 있습니다(MAY).
- CPID 엔드포인트는 요청을 수신하고 CPID를 구성하며 UE가 이 CPID를 사용할 수 있는 기간을 나타내는 수명 (TTL)과 함께 CPID를 UE에 반환합니다.
운영자는 원하는 경우 CPID 엔드포인트 URL에서 도메인 이름 대신 IP 주소를 사용할 수도 있습니다(MAY). IP 주소는 비공개 주소 공간에 있을 수 있지만, 운영자 네트워크 내의 Google 클라이언트가 연결할 수 있어야 합니다(MAY).
운영자는 온보딩 프로세스의 일환으로 Google에 다음 정보를 제공해야 합니다(SHALL). 1. 애플리케이션이 CPID를 획득하기 위해 연락할 CPID_URL입니다. CPID_URL은 하나가 필수이지만 운영자는 가용성을 높이기 위해 여러 URL을 제공할 수 있습니다. 1. 운영자가 소유한 IP 접두사 목록과 운영자가 제공된 CPID_URL에 매핑하려는 모바일 국가 코드(MCC) 및 모바일 네트워크 코드(MNC)입니다. 운영자가 SPN 또는 GID1을 사용하여 네트워크에서 MVNO를 구분하는 경우 운영자는 이 정보도 제공해야 합니다(SHALL). Google은 이 정보를 사용하여 클라이언트를 해당 CPID 엔드포인트와 일치시킵니다(그림 2의 1단계 참고).
요청 형식은 다음과 같습니다.
GET CPID_URL
이전 버전과의 호환성을 위해 CPID 엔드포인트는 다음과 같은 요청을 지원할 수 있어야 합니다.
GET CPID_URL?app={app_id}
CPID 엔드포인트는 CPID를 생성할 때 {app_id}
URL 매개변수를 무시할 수 있습니다. 하지만 매개변수가 포함된 요청을 처리할 수 있어야 합니다(MUST).
CPID 엔드포인트에 대한 요청에 Accept-Language
헤더가 포함될 수 있습니다(MAY). 헤더가 포함된 경우 DPA가 모바일 데이터 요금제 공유 API를 사용하여 전송하는 업데이트의 사람이 읽을 수 있는 문자열은 CPID 요청에 제공된 설정을 사용해야 합니다(MUST).
클라이언트가 GET CPID_URL 요청을 발행할 때마다 새 CPID를 수신해야 합니다(MUST). CPID 생성이 성공하면 CPID 엔드포인트는 200 OK 응답을 반환해야 합니다(MUST). 응답 본문에는 CPIDResponse 인스턴스가 포함되어야 합니다(MUST).
{
"cpid": "<CPID_string>",
"ttlSeconds": 2592000
}
반환된 CPID는 ttlSeconds초 동안 유효해야 합니다(MUST). GTAF는 DPA에 대한 후속 호출에서 RFC2396에 따라 CPID를 인코딩합니다.
오류가 발생하면 CPID 엔드포인트는 ErrorResponse 인스턴스를 포함해야 하는 응답 본문과 함께 HTTP 오류를 반환해야 합니다(MUST). 가능한 원인 값과 HTTP 오류 코드 목록은 여기에서 확인할 수 있습니다.
{
"errorMessage": "<error message>",
"cause": "INVALID_NUMBER"
}
특히, CPID 요청이 운영자 네트워크에 속하지 않는 사용자(예: 다른 운영자에 속하지만 이 CPID 엔드포인트에서 제공하는 네트워크에서 로밍하는 사용자) 또는 Google과 데이터 요금제 정보를 공유하도록 선택하지 않은 사용자에 대해 수신되는 경우 CPID 엔드포인트는 HTTP 상태 코드 403을 반환해야 합니다(MUST).
CPID 생성
CPID 엔드포인트가 CPID를 생성하는 데 권장되는 방법은 다음과 같습니다.
CPID_string = Base64(AES(MSISDN + TimeStamp + language, secret))
CPID 엔드포인트는 MSISDN, Accept-Language 헤더에서 클라이언트가 보낸 언어, 고해상도 타임스탬프를 연결하고 secret
키를 사용하여 AES를 통해 암호화합니다. 타임스탬프는 CPID가 만료되는 시간에 해당해야 합니다(SHOULD). 암호화된 출력은 Base64로 인코딩됩니다. 또한 CPID가 URL에 사용되는 경우 Base64에 사용되는 특수문자(/+=)를 처리하기 위해 URL로 인코딩해야 합니다(MUST). 특히 GTAF가 DPA를 호출하거나 DPA가 모바일 데이터 요금제 공유 API를 호출하는 경우 CPID는 URL로 인코딩되어야 합니다(MUST). 이 방법을 사용하여 CPID를 생성하면 DPA와 CPID 엔드포인트에 유효한 CPID와 MSISDN 데이터베이스가 없어도 된다는 장점이 있습니다.
특정 운영자의 상황에 따라 CPID 엔드포인트를 구현하는 것이 쉽지 않을 수 있습니다. 자주 발생하는 특정 문제는 CPID 엔드포인트에서 MSISDN에 액세스하는 것입니다. 운영자 온보딩을 통해 얻은 교훈을 공유해 드립니다. 문제가 발생하면 언제든지 문의해 주세요.
보안 요구사항
운영자는 구독자의 개인 정보를 보호하기 위해 필요한 모든 예방 조치를 취해야 합니다(SHALL). 특히 구독자 전화번호의 노출을 최소화하려면 CPID 엔드포인트가 보안 경계 내에 있어야 합니다(SHOULD). 또한 운영자가 DPI를 사용하는 경우 운영자는 MSISDN을 HTTP 요청에 삽입하기 전에 암호화해야 합니다(SHOULD). CPID 엔드포인트가 보안 경계가 아닌 경우(예: CPID 엔드포인트가 공개 클라우드에 배포된 경우) 운영자는 공개 인터넷을 통해 MSISDN을 명확하게 전송하면 안 됩니다(SHOULD NOT). 운영자는 DPI와 CPID 엔드포인트 간에 VPN을 설정하거나 (그림 1 참고) 헤더에 삽입하기 전에 MSISDN을 암호화할 수 있습니다. 후자의 접근 방식에서는 CPID 엔드포인트가 삽입된 헤더를 복호화하여 CPID를 생성하기 전에 MSISDN을 복구할 수 있다고 가정합니다. 또한 운영자는 CPID를 생성하는 데 사용되는 비밀 키를 보호하고 운영자 보안 정책에 따라 이 키를 순환해야 합니다(SHALL).
가용성 및 용량 요구사항
클라이언트가 CPID를 가져올 수 없는 경우 모바일 데이터 요금제 API의 정보에 액세스할 수 없습니다. 따라서 운영자는 CPID 엔드포인트의 가용성을 보장하기 위해 필요한 조치를 취해야 합니다(SHALL). 이러한 조치에는 CPID 엔드포인트 및 DPI 기능의 여러 인스턴스를 보유하고 두 기능 모두에 물리적, 사이트, 네트워크 중복을 보유하며 시스템 리소스와 용량이 적절한지 확인하는 것이 포함됩니다. 또한 헤더를 삽입하는 DPI 기능뿐만 아니라 CPID 엔드포인트도 CPID를 요청하는 모든 Google 클라이언트의 부하를 처리할 수 있는 충분한 용량을 갖춰야 합니다. CPID 엔드포인트는 ttlSeconds 필드에서 더 큰 값을 사용하여 CPID 생성 빈도를 줄일 수 있습니다. TTL 값은 30일로 설정하는 것이 좋습니다.
참고
-
VIDEO_OFFLINE PMTC는 이 계획이 오프라인 전용 (예: 스트리밍 QoE가 매우 나쁨)임을 의미합니다. FlexTime 창과는 별개입니다. ↩