BigQuery 및 Firebase Analytics를 사용한 모바일 앱의 이해
2016년 10월 31일 월요일
올해 5월에 열린 Google I/O에서 새로운 버전의 Firebase가 공개되었습니다. 개발자가 모바일 앱을 만드는데 도움이 되는 다양한 도구를 포함하고 있습니다. 새로운 Firebase 플랫폼에 포함된 Firebase Analytics는 사람들이 여러분이 개발한 모바일 앱을 사용하는 방식에 대한 데이터를 자동으로 수집할 수 있는 도구 입니다. 앱 실행등 일반적인 이벤트 외에 자체적인 사용자 지정 앱 이벤트도 지원합니다.데이터가 수집되면 Firebase 콘솔의 대시보드를 통해 이런 데이터를 확인하고 사용할 수 있습니다. 새로운 Firebase 플랫폼에 통합된 클라우드 기능 중 제가 좋아하는 한 가지는 바로 사용자 지정 분석을 위해 Firebase Analytics에서 캡처한 원시 데이터 ...Read More
올해 5월에 열린 Google I/O에서 새로운 버전의 Firebase가 공개되었습니다. 개발자가 모바일 앱을 만드는데 도움이 되는 다양한 도구를 포함하고 있습니다. 새로운 Firebase 플랫폼에 포함된 Firebase Analytics는 사람들이 여러분이 개발한 모바일 앱을 사용하는 방식에 대한 데이터를 자동으로 수집할 수 있는 도구 입니다. 앱 실행등 일반적인 이벤트 외에 자체적인 사용자 지정 앱 이벤트도 지원합니다.데이터가 수집되면 Firebase 콘솔의 대시보드를 통해 이런 데이터를 확인하고 사용할 수 있습니다. 새로운 Firebase 플랫폼에 통합된 클라우드 기능 중 제가 좋아하는 한 가지는 바로 사용자 지정 분석을 위해 Firebase Analytics에서 캡처한 원시 데이터를 Google BigQuery로 내보낼 수 있는 기능입니다. 특히나, Firebase Analytics 이벤트에서 전달된 사용자 지정 매개 변수 값을 확인할 때 특히 유용합니다. 이 강력한 기능 조합을 통해 어떤 작업을 수행할 수 있을지 살펴봅시다.
다음 쿼리는 iOS 버전 앱의 일일 사용량에 대한 몇 가지 기본적인 사용자의 인구 통계학적 정보와 기기 데이터를 반환합니다.
Firebase Analytics에서 내보낸 모든 BigQuery 테이블의 스키마가 동일하기 때문에 데이터세트 이름과 테이블 이름을 개발 중인 프로젝트의 데이터세트 이름과 테이블 이름으로 바꿔 자체적인 Firebase Analytics 데이터에 대해 이 글에 나와 있는 모든 쿼리를 실행할 수 있습니다.
이 스키마에는 사용자 데이터와 이벤트 데이터가 있습니다. 모든 사용자 데이터는 Firebase Analytics에서 자동으로 캡처되고, 이벤트 데이터는 개발자가 앱에 추가하는 사용자 지정 이벤트로 채워집니다. 사용자 데이터와 이벤트 데이터 모두에 대한 구체적인 레코드를 살펴봅시다.
사용자 데이터는
사용자의 언어 기본 설정은 기본 사용자 속성 중 하나입니다. 사용자가 플랫폼 간에 사용하는 언어를 보려면 다음 쿼리를 실행하면 됩니다.
이벤트와 연결된 다른 유형의 값(예: 아이템 가격)이 있는 경우 이 값을 선택적인 값 매개변수로 전달하여 BigQuery에서 이 값으로 필터링할 수 있습니다. 샘플 테이블에는 spend_virtual_currency 이벤트가 있습니다. 플레이어가 한 번에 얼마나 많은 가상 통화를 소비하는지 보여주는 다음과 같은 쿼리를 작성할 수 있습니다.
또한, 다음과 같이 한 주 동안 플랫폼 간에 모바일 사용량과 태블릿 사용량을 비교하는 쿼리를 작성할 수도 있습니다.
좀 더 복잡한 문제를 생각해보자면, 지난 2주일 동안 플랫폼 간에 고유한 사용자 이벤트에 대한 보고서를 생성하는 쿼리를 작성할 수 있습니다. 여기서는 PARTITION BY 및 EXACT_COUNT_DISTINCT를 사용하여 사용자 속성 및
Google 애널리틱스에 동일한 앱에 대한 데이터가 있으면 BigQuery로 자신의 Google 애널리틱스 데이터를 내보내어 Firebase Analytics BigQuery 테이블과 JOIN을 수행할 수도 있습니다.
우선 시각화를 위해 사용자가 각 플랫폼에서 앱에 액세스하는 기기의 유형을 비교하기 위한 막대 그래프를 생성해보도록 하겠습니다. 위에 나와 있는 모바일 사용량과 태블릿 사용량을 비교하는 쿼리를 Data Studio에 직접 붙여 넣어 다음 차트를 생성할 수 있습니다.
이 차트에서 iOS 사용자가 태블릿에서 게임에 액세스하는 경향이 더 큰 것을 쉽게 파악할 수 있습니다. 좀 더 복잡한 문제를 생각해보자면, 위의 이벤트 보고 쿼리를 사용하여 플랫폼 간의 이벤트 수를 비교하여 보여주는 막대 그래프를 생성할 수 있습니다.
BigQuery 프로젝트를 Data Studio에 연결하는 방법에 대한 자세한 지침은 이 글에서 확인하시기 바랍니다.
BigQuery 내보내기는 어떤 식으로 작동할까요?
Firebase 프로젝트를 BigQuery에 연결한 후에는 Firebase가 매일 자동으로 새 테이블을 연결된 BigQuery 데이터세트로 내보냅니다. iOS 및 Android 버전의 앱이 모두 있는 경우 Firebase는 각 플랫폼의 데이터를 개별 데이터세트로 내보냅니다. 각 테이블에는 Firebase Analytics에서 자동으로 캡처한 사용자 액티비티 및 인구 통계학적 데이터가 앱에서 캡처한 사용자 지정 이벤트와 함께 포함됩니다. 따라서 교차 플랫폼 앱에 대해 1주일 분량의 데이터를 내보낸 후에는 BigQuery 프로젝트에 각각 7개의 테이블로 구성된 2개의 데이터세트가 포함됩니다.데이터 세부 분석
모든 Firebase Analytics 내보내기 테이블에 대한 스키마는 동일하며, 개발자가 아래의 예제 쿼리를 실행할 수 있도록 샘플 사용자 데이터가 포함된 두 개의 데이터세트(iOS용 하나와 Android용 하나)를 만들었습니다. 이 데이터세트는 샘플 교차 플랫폼 iOS 및 Android 게임 앱에 대한 것입니다. 각 데이터세트에는 7개의 테이블, 즉 1주일 분량의 분석 데이터가 있습니다.다음 쿼리는 iOS 버전 앱의 일일 사용량에 대한 몇 가지 기본적인 사용자의 인구 통계학적 정보와 기기 데이터를 반환합니다.
SELECT
user_dim.app_info.app_instance_id,
user_dim.device_info.device_category,
user_dim.device_info.user_default_language,
user_dim.device_info.platform_version,
user_dim.device_info.device_model,
user_dim.geo_info.country,
user_dim.geo_info.city,
user_dim.app_info.app_version,
user_dim.app_info.app_store,
user_dim.app_info.app_platform
FROM
[firebase-analytics-sample-data:ios_dataset.app_events_20160601]
Firebase Analytics에서 내보낸 모든 BigQuery 테이블의 스키마가 동일하기 때문에 데이터세트 이름과 테이블 이름을 개발 중인 프로젝트의 데이터세트 이름과 테이블 이름으로 바꿔 자체적인 Firebase Analytics 데이터에 대해 이 글에 나와 있는 모든 쿼리를 실행할 수 있습니다.
이 스키마에는 사용자 데이터와 이벤트 데이터가 있습니다. 모든 사용자 데이터는 Firebase Analytics에서 자동으로 캡처되고, 이벤트 데이터는 개발자가 앱에 추가하는 사용자 지정 이벤트로 채워집니다. 사용자 데이터와 이벤트 데이터 모두에 대한 구체적인 레코드를 살펴봅시다.
사용자 데이터
사용자 레코드에는 각 사용자에 대해 고유한 앱 인스턴스 ID(스키마의user_dim.app_info.app_instance_id
)와 함께 해당 위치, 기기 및 앱 버전에 대한 데이터가 포함됩니다. Firebase 콘솔에는 앱의 Android 및 iOS 분석에 사용할 수 있는 별도의 대시보드가 있습니다. BigQuery를 사용하면 쿼리를 실행하여 사용자가 두 플랫폼 간에 전 세계에서 앱에 액세스하는 위치를 확인할 수 있습니다. 아래에 나와 있는 쿼리에서는 BigQuery의 통합 기능을 이용합니다. 이 기능을 통해 쉼표를 UNION ALL
연산자로 사용할 수 있습니다. 테이블에는 사용자가 트리거하는 각 이벤트 번들에 대해 하나의 행이 생성되므로 EXACT_COUNT_DISTINCT를 사용하여 각 사용자가 한 번만 카운트되도록 해야 합니다.SELECT
user_dim.geo_info.country as country,
EXACT_COUNT_DISTINCT( user_dim.app_info.app_instance_id ) as users
FROM
[firebase-analytics-sample-data:android_dataset.app_events_20160601],
[firebase-analytics-sample-data:ios_dataset.app_events_20160601]
GROUP BY
country
ORDER BY
users DESC
사용자 데이터는
user_properties
레코드도 포함합니다. 이 레코드에는 사용자 기반의 여러 다양한 세그먼트를 설명하기 위해 정의하는 특성(예: 언어 기본 설정 또는 지리적 위치)이 포함됩니다. Firebase Analytics는 기본적으로 몇 가지 사용자 속성을 캡처하고, 개발자는 최대 25개의 고유한 속성을 생성할 수 있습니다. 사용자의 언어 기본 설정은 기본 사용자 속성 중 하나입니다. 사용자가 플랫폼 간에 사용하는 언어를 보려면 다음 쿼리를 실행하면 됩니다.
SELECT
user_dim.user_properties.value.value.string_value as language_code,
EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id) as users,
FROM
[firebase-analytics-sample-data:android_dataset.app_events_20160601],
[firebase-analytics-sample-data:ios_dataset.app_events_20160601]
WHERE
user_dim.user_properties.key = "language"
GROUP BY
language_code
ORDER BY
users DESC
이벤트 데이터
Firebase Analytics는 앱에서 아이템 구매 또는 버튼 클릭을 추적하는 것과 같은 사용자 지정 이벤트를 쉽게 로그할 수 있게 해줍니다. 이벤트를 로그할 때는 이벤트 이름과 최대 25개의 매개변수를 Firebase Analytics에 전달하세요. 그러면 Firebase Analytics가 자동으로 이벤트 발생 횟수를 추적합니다. 다음 쿼리는 특정한 날에 Android에서 앱의 각 이벤트가 발생한 횟수를 보여줍니다.SELECT
event_dim.name,
COUNT(event_dim.name) as event_count
FROM
[firebase-analytics-sample-data:android_dataset.app_events_20160601]
GROUP BY
event_dim.name
ORDER BY
event_count DESC
이벤트와 연결된 다른 유형의 값(예: 아이템 가격)이 있는 경우 이 값을 선택적인 값 매개변수로 전달하여 BigQuery에서 이 값으로 필터링할 수 있습니다. 샘플 테이블에는 spend_virtual_currency 이벤트가 있습니다. 플레이어가 한 번에 얼마나 많은 가상 통화를 소비하는지 보여주는 다음과 같은 쿼리를 작성할 수 있습니다.
SELECT
event_dim.params.value.int_value as virtual_currency_amt,
COUNT(*) as num_times_spent
FROM
[firebase-analytics-sample-data:android_dataset.app_events_20160601]
WHERE
event_dim.name = "spend_virtual_currency"
AND
event_dim.params.key = "value"
GROUP BY
1
ORDER BY
num_times_spent DESC
복잡한 쿼리 빌드
특정 날짜 범위에 걸쳐 앱의 두 플랫폼 모두를 대상으로 쿼리를 실행하려면 어떻게 해야 할까요? Firebase Analytics 데이터는 매일의 테이블로 분할되므로, BigQuery의 TABLE_DATE_RANGE 함수를 사용하여 이 작업을 수행할 수 있습니다. 다음 쿼리는 한 주 동안 사용자의 접속이 시작되는 도시의 수를 반환합니다.SELECT
user_dim.geo_info.city,
COUNT(user_dim.geo_info.city) as city_count
FROM
TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP()),
TABLE_DATE_RANGE([firebase-analytics-sample-data:ios_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP())
GROUP BY
user_dim.geo_info.city
ORDER BY
city_count DESC
또한, 다음과 같이 한 주 동안 플랫폼 간에 모바일 사용량과 태블릿 사용량을 비교하는 쿼리를 작성할 수도 있습니다.
SELECT
user_dim.app_info.app_platform as appPlatform,
user_dim.device_info.device_category as deviceType,
COUNT(user_dim.device_info.device_category) AS device_type_count FROM
TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP()),
TABLE_DATE_RANGE([firebase-analytics-sample-data:ios_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP())
GROUP BY
1,2
ORDER BY
device_type_count DESC
좀 더 복잡한 문제를 생각해보자면, 지난 2주일 동안 플랫폼 간에 고유한 사용자 이벤트에 대한 보고서를 생성하는 쿼리를 작성할 수 있습니다. 여기서는 PARTITION BY 및 EXACT_COUNT_DISTINCT를 사용하여 사용자 속성 및
user_dim.user_id
필드를 이용해 사용자의 이벤트 신고에서 중복된 항목을 제거합니다.SELECT
STRFTIME_UTC_USEC(eventTime,"%Y%m%d") as date,
appPlatform,
eventName,
COUNT(*) totalEvents,
EXACT_COUNT_DISTINCT(IF(userId IS NOT NULL, userId, fullVisitorid)) as users
FROM (
SELECT
fullVisitorid,
openTimestamp,
FORMAT_UTC_USEC(openTimestamp) firstOpenedTime,
userIdSet,
MAX(userIdSet) OVER(PARTITION BY fullVisitorid) userId,
appPlatform,
eventTimestamp,
FORMAT_UTC_USEC(eventTimestamp) as eventTime,
eventName
FROM FLATTEN(
(
SELECT
user_dim.app_info.app_instance_id as fullVisitorid,
user_dim.first_open_timestamp_micros as openTimestamp,
user_dim.user_properties.value.value.string_value,
IF(user_dim.user_properties.key = 'user_id',user_dim.user_properties.value.value.string_value, null) as userIdSet,
user_dim.app_info.app_platform as appPlatform,
event_dim.timestamp_micros as eventTimestamp,
event_dim.name AS eventName,
event_dim.params.key,
event_dim.params.value.string_value
FROM
TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP()),
TABLE_DATE_RANGE([firebase-analytics-sample-data:ios_dataset.app_events_], DATE_ADD('2016-06-07', -7, 'DAY'), CURRENT_TIMESTAMP())
), user_dim.user_properties)
)
GROUP BY
date, appPlatform, eventName
Google 애널리틱스에 동일한 앱에 대한 데이터가 있으면 BigQuery로 자신의 Google 애널리틱스 데이터를 내보내어 Firebase Analytics BigQuery 테이블과 JOIN을 수행할 수도 있습니다.
분석 데이터 시각화
이제, 원시 BigQuery 내보내기를 사용하여 모바일 앱 데이터에서 새로운 통계 데이터를 수집했으므로 Google Data Studio를 사용하여 이를 시각화해 봅시다. Data Studio는 BigQuery 테이블에서 직접 데이터를 읽을 수 있으며, 위에 표시된 쿼리와 같이 사용자 지정 쿼리에 이 데이터를 전달할 수도 있습니다. Data Studio는 데이터 구조에 따라 시계열, 막대 그래프, 원형 차트, 지오 맵 등 다양한 유형의 차트를 생성할 수 있습니다.우선 시각화를 위해 사용자가 각 플랫폼에서 앱에 액세스하는 기기의 유형을 비교하기 위한 막대 그래프를 생성해보도록 하겠습니다. 위에 나와 있는 모바일 사용량과 태블릿 사용량을 비교하는 쿼리를 Data Studio에 직접 붙여 넣어 다음 차트를 생성할 수 있습니다.
이 차트에서 iOS 사용자가 태블릿에서 게임에 액세스하는 경향이 더 큰 것을 쉽게 파악할 수 있습니다. 좀 더 복잡한 문제를 생각해보자면, 위의 이벤트 보고 쿼리를 사용하여 플랫폼 간의 이벤트 수를 비교하여 보여주는 막대 그래프를 생성할 수 있습니다.
BigQuery 프로젝트를 Data Studio에 연결하는 방법에 대한 자세한 지침은 이 글에서 확인하시기 바랍니다.
다음 단계는?
Firebase를 처음 사용하는 것이라면 여기에서 시작해 보세요. Firebase에서 모바일 앱을 이미 빌드하고 있다면 이 상세 가이드에서 Firebase 프로젝트를 BigQuery에 연결하는 방법을 확인해 보세요. 궁금한 점이 있으면 BigQuery 참조 문서를 살펴보고 firebase-analytics 및 google-bigquery 태그를 사용하여 Stack Overflow에 질문을 올려주시기 바랍니다. 또한, 다음 글에서 다루었으면 하는 주제가 있으면 알려주시기 바랍니다.