한눈에 보기: 웹사이트 성과를 적절한 수준에서 분석할 수 있도록, Data Locker에서 웹 성과 측정 데이터를 2가지 리포트 유형으로 내보내기할 수 있습니다. 모든 방문과 이벤트를 분석하려면 최종 사용자 이벤트를 사용하고, 고유한 전환 기준점(첫 방문, 재방문, 사용자 획득 이벤트)의 수를 집계하고 어트리뷰션하려면 전환을 사용하세요.
중요! Data Locker에서 웹 성과 측정 리포트를 사용하려면 Data Locker를 구독해야 합니다.
웹 성과 측정 리포트 정보
Data Locker는 서로 다른 분석 니즈에 맞추어 설계된 2가지 웹 성과 측정 리포트인 퇴종 사용자 이벤트와 전환을 제공합니다.
-
최종 사용자 이벤트 리포트는 웹사이트 액티비티를 분석하는 기본 소스입니다.
- 모든 웹 이벤트와 방문 포함
- 각 방문을 어트리뷰션된
세션으로 기록 - 방문 수준 및 이벤트 수준 리포팅에 적합
-
전환 리포트는 전환 수준 분석에 가장 적합합니다. 전환은 마케팅 기여도를 언제, 어떻게 부여할지 결정하는 접점이자 어트리뷰션 기준점입니다. 여기에는 다음이 포함됩니다:
- 최초 방문 (사용자가 처음으로 웹사이트에 방문하는 경우),
- 재방문 (논오가닉 광고 인게이지먼트 후 사용자가 다시 방문하는 경우), 그리고
- 사용자 유입 이벤트 (가입 또는 첫 입금과 같은 사용자 지정 이벤트)로, 사용자가 유입되는 경우
- 모든 사용자 이벤트는 이후 이러한 전환에 연결되며, 해당 캠페인 상세 정보를 상속받습니다.
Data Locker 고급 리포트 인터페이스에는 별도의 웹 성과 측정 리포트 옵션으로 참여와 크로스 플랫폼 최종 사용자 이벤트도 표시됩니다. 본 문서에서는 대부분의 웹 성과 측정 분석에 사용되는 두 가지 리포트인 최종 사용자 이벤트와 전환에 대해 다룹니다.
웹 성과 측정 리포트 선택
웹 성과 측정 데이터를 내보내기 전에 Data Locker에서 관련 리포트를 선택하세요.
- 앱스플라이어의 사이드 메뉴에서 내보내기 > Data Locekr를 선택합니다.
- 고급 보고서 탭을 클릭합니다.
- 웹 성과 측정 리포트 목록에서 최종 사용자 이벤트 또는 전환을 선택하세요.
- 구성 저장을 클릭하세요.
리포트 필드
리포트에 어떤 필드가 포함되어 있는지 확인하려면 각 리포트의 샘플을 다운로드하세요:
샘플 리포트에는 모든 리포트 필드와 해당 값이 포함되어 있습니다. 필드 정의는 필드 사전을 참조하세요.
리포트 제공 시점 및 데이터 최신성
새 데이터가 추가되는 시점과 최근 이벤트를 리포트에서 확인할 수 있는 시점을 이해하려면 다음 세부 정보를 참고하세요.
- 리포트 생성 주기: 새 데이터는 매시간 추가됩니다.
- 데이터 최신성: 이벤트는 일반적으로 발생 후 2~3시간 내에 리포트에 표시됩니다.
각 배치는 다음과 같이 작동합니다:
- 각 배치는 1.5시간 기간의 이벤트를 처리합니다.
- 해당 기간 내에서는 이벤트 중 처음 한 시간만 어트리뷰션됩니다.
- 나머지 30분은 어트리뷰션된 이벤트에 고객 사용자 ID(CUID)를 추가하는 데만 사용됩니다.
- 가장 최근 30분의 이벤트는 아직 어트리뷰션되지 않으며 다음 배치에 포함됩니다.
이 이벤트는 언제 리포트에 표시되나요?
이벤트는 처리가 완료된 후 리포트에 기록됩니다. 예를 들어 08:00–09:00 사이에 발생하고 오전 10:00 배치에서 어트리뷰션된 이벤트는 오전 11:00 리포트 버전에 표시됩니다.
예시: 오전 10:00 배치에서 수행하는 작업
| 날짜 | 리포트 제공 시간 | 어트리뷰션된 웹 이벤트(이벤트 시간) | 이전 이벤트에 CUID를 보강하기 위해 처리된 웹 이벤트 |
|---|---|---|---|
| 2026-01-28 | 11:00 | 08:00 – 09:00 | 09:00–09:30 |
| 2026-01-28 | 12:00 | 09:00 – 10:00 | 10:00–10:30 |
| 2026-01-28 | 13:00 | 10:00 – 11:00 | 10:00-11:30 |
클라우드 버켓에서 리포트 데이터 다운로드하기
클라우드 버켓에서 리포트 데이터를 다운로드하는 방법에 대한 자세한 내용은 Data Locker 폴더 구조를 참조하세요.
BI 개발자 고려사항
주요 차이점: Web vs. Mobile
웹 어트리뷰션은 식별자와 데이터 로직 측면에서 모두 모바일 어트리뷰션과 다릅니다. 데이터 정확도를 높이려면 쿼리에 다음 필터와 모범 사례를 적용하세요.
| 항목 | 모바일 | 웹 |
|---|---|---|
| 플랫폼 필터 |
platform = 'IOS' 또는 platform = 'ANDROID'
|
platform = 'WEBSITE' |
| 사용자 식별자(값) |
appsflyer_id (기기 기반) |
appsflyer_id_value (쿠키 기반) |
| 식별자 유형 | 기기에 따라 다름 |
appsflyer_id_type는 항상 web_id입니다
|
| 유입 이벤트 | 설치 | 기본값은 최초 방문이지만, 사용자 유입 이벤트는 사용자 지정할 수 있습니다 |
| 리인게이지먼트 | RE-ENGAGEMENT |
REVISIT |
| 리어트리뷰션 | 지원됨 | 지원되지 않음 - 웹에는 사용자 유입과 재방문만 있습니다 |
| 앱 ID | App ID(예: id123456789) |
접두사가 포함된 도메인(예: website-www.example.com) |
어떤 표를 쿼리할까요?
최종 사용자 이벤트 리포트는 대부분의 분석에 적합합니다. 모든 웹사이트 이벤트와 방문이 포함됩니다. 각 웹 방문 역시 이 리포트에 어트리뷰션된 SESSION으로 기록되므로, 방문 단위 및 이벤트 단위 리포팅을 위한 기본 데이터 소스로 활용할 수 있습니다.
전환 테이블은 중복 이벤트 기록 없이 고유한 전환 데이터만 필요할 때, 주로 첫 방문, 재방문, 사용자 획득 수를 집계하는 데 적합합니다.
| 사용 사례 | 테이블 | 이유 |
|---|---|---|
| 방문/세션 집계 | end_user_events |
각 행은 세션 또는 이벤트입니다 |
| 고유 전환 집계 | conversions |
중복 방지 |
| 인앱 이벤트 분석 |
end_user_event_type = 'IN_APP' 조건이 적용된 end_user_events
|
인앱 이벤트만 이벤트 이름이 있습니다. |
쿼리 필터 구현
로우 데이터 쿼리가 정확한지 확인하려면 다음 필터를 적용하세요. 이를 구현하지 않을 경우 중복 엔트리가 발생하고 플랫폼 간 지표가 혼재될 수 있습니다.
-
플랫폼별 필터링(필수): 웹에서 발생한 데이터만 분류하고 모바일, PC 또는 CTV 환경의 기록을 제외하려면
WHERE platform = 'WEBSITE'를 포함하세요. -
어트리뷰션 기여도별 필터링(필수): 리포팅 뷰에 따라 앱스플라이어가 동일한 사용자 액션에 두 가지 서로 다른 어트리뷰션 기여도를 부여할 수 있으므로, 해당 액션이
end_user_events에 2번 표시될 수 있습니다.다음과 같은 경우 이런 현상이 발생할 수 있습니다:
- 초기 사용자 획득(UA) 소스, 그리고 이후
- 리인게이지먼트 소스가 있는 경우.
이 경우 앱스플라이어는 동일한 이벤트에 대해 2개의 레코드를 기록할 수 있습니다.
-
기본 기여도: 가장 최근에 발생한 관련 마케팅 상호작용에 이벤트를 어트리뷰션합니다. 통합 보기와 리타겟팅 보기에서 사용됩니다.
중복 집계를 방지하려면 기본적으로 기본 크레딧 레코드만 사용하여
end_user_events를 쿼리하세요:WHERE platform = 'WEBSITE' AND is_primary_attribution = true -
보조 기여도: 이벤트를 최초의 UA 소스로 다시 어트리뷰션합니다. LTV(평생 가치) 측정을 위해 사용자 유입 뷰에서 사용됩니다.
동일한 사용자 액션이 두 개의 레코드(기본 기여도 1건, 보조 기여도 1건)로 저장될 수 있기 때문에, 필터 없이 이벤트를 집계하면 해당 액션이 중복 집계될 수 있습니다.
BigQuery 또는 기타 BI 도구에서 웹 어트리뷰션 데이터를 분석할 때 이 쿼리를 템플릿으로 사용하세요.
-
전환 유형별 필터링(선택 사항): 캠페인 유형에 따라 어트리뷰션 데이터를 분리하려면
WHERE conversion_type = 'USER_ACQUISITION'또는WHERE conversion_type = 'RETARGETING'를 포함하세요.
필터 요약 표
| 필터 요구 사항 | SQL 로직 | 구현 컨텍스트 |
|---|---|---|
| 플랫폼 사양 | WHERE platform = 'WEBSITE' |
웹에서 발생한 데이터를 다른 플랫폼 레코드와 분리합니다. |
| 통합 보기(중복 방지) | WHERE is_primary_attribution = true AND platform = 'WEBSITE' |
초기 UA 캠페인보다 리타겟팅 캠페인의 기여도를 우선시합니다. 중복 집계를 방지하기 위해 일반 리포팅에 사용하세요. |
| 리타겟팅 보기 전용 | WHERE conversion_type = 'RETARGETING' AND platform = 'WEBSITE' |
리타겟팅 캠페인의 성과만을 독립적으로 분석할 때 특별히 사용하세요. |
| 사용자 유입 보기 전용 | WHERE conversion_type = 'USER_ACQUISITION' AND platform = 'WEBSITE' |
이벤트가 반드시 최초 방문에 연결되어야 하는 신규 사용자 획득 중심의 뷰에 특히 활용하세요. |
최종 사용자 식별 및 수 집계
웹 성과 측정 로우 데이터에서 최종 사용자는 두 가지 서로 다른 식별자로 표시될 수 있습니다:
-
customer_user_id: 직접 설정하는 안정적인 식별자입니다(일반적으로 로그인한 사용자를 대상). -
appsflyer_id_value: 시간이 지나면 만료될 수 있는 쿠키 기반 ID입니다.
고유 사용자를 올바르게 식별하고 사용자 단위 지표를 계산하려면 항상 다음을 사용하세요.
COALESCE(customer_user_id, appsflyer_id_value)
작동 방식은 다음과 같습니다.
-
customer_user_id가 있으면 앱스플라이어가 이를 사용합니다(우선 적용되며 안정적임). - 없으면 앱스플라이어가
appsflyer_id_value로 대체합니다.
다음이 필요할 때는 언제든 COALESCE(customer_user_id, appsflyer_id_value)를 사용하세요.
- 고유 사용자 수 계산
- 사용자별 그룹화
- 특정 사용자로 필터링
- 사용자 기준으로 표 조인
- 모든 사용자 수준 지표 계산
예시: 고유 사용자 수 계산
SELECT
COUNT(DISTINCT COALESCE(customer_user_id, appsflyer_id_value)) AS unique_users
FROM `end_user_events`
WHERE platform = 'WEBSITE'
AND is_primary_attribution = TRUE
오가닉 vs. 논오가닉 트래픽
is_organic 필드를 사용하세요:
| 트래픽 유형 | 필터 |
|---|---|
| 오가닉 | is_organic = true |
| 논오가닉 | is_organic = false |
빈 값 처리
| 데이터 유형 | 빈 값 |
|---|---|
| 스트링 |
'' (빈 스트링) |
| 숫자 | NULL |
쿼리 예시
1. 미디어소스별 총 방문 수(7일)
각 미디어 소스에 어트리뷰션된 웹 세션 수를 집계합니다.
SELECT media_source, COUNT(*) AS total_visits
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
AND end_user_event_type = 'SESSION'
GROUP BY media_source
ORDER BY total_visits DESC
2. 캠페인별 최초 방문 및 재방문
SELECT campaign_name, conversion_name, COUNT(*) AS conversion_count
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND conversion_name IN ('FIRST_VISIT', 'REVISIT')
GROUP BY campaign_name, conversion_name
ORDER BY conversion_count DESC
3. 고유 이벤트 이름 수 집계(인앱 이벤트만)
SELECT
event_name,
COUNT(*) AS event_count
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
AND end_user_event_type = 'IN_APP'
GROUP BY event_name
ORDER BY event_count DESC4. 미디어 소스별 고유 사용자 수 집계
SELECT
media_source,
COUNT(DISTINCT COALESCE(customer_user_id, appsflyer_id_value)) AS unique_users
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
GROUP BY media_source
ORDER BY unique_users DESC5. 전환율 - 최초 방문에서 구매까지(교차 표 조인)
WITH first_visits AS (
SELECT
COALESCE(customer_user_id, appsflyer_id_value) AS user_id,
media_source
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND conversion_name = 'FIRST_VISIT'
),
purchases AS (
SELECT DISTINCT
COALESCE(customer_user_id, appsflyer_id_value) AS user_id
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
AND end_user_event_type = 'IN_APP'
AND event_name = 'purchase'
)
SELECT
fv.media_source,
COUNT(DISTINCT fv.user_id) AS first_visit_users,
COUNT(DISTINCT p.user_id) AS purchasers,
SAFE_DIVIDE(COUNT(DISTINCT p.user_id), COUNT(DISTINCT fv.user_id)) AS conversion_rate
FROM first_visits fv
LEFT JOIN purchases p ON fv.user_id = p.user_id
GROUP BY fv.media_source
ORDER BY conversion_rate DESC6. 캠페인별 수익(최근 7일)
SELECT
campaign_name,
media_source,
SUM(revenue_usd) AS total_revenue_usd,
COUNT(*) AS revenue_events
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
AND revenue_usd IS NOT NULL
AND revenue_usd <> 0.0
GROUP BY campaign_name, media_source
ORDER BY total_revenue_usd DESC일자별 오가닉 vs. 논오가닉 최초 방문
SELECT
DATE(event_time) AS visit_date,
CASE WHEN is_organic = true THEN 'Organic' ELSE 'Non-Organic' END AS traffic_type,
COUNT(*) AS first_visits
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND conversion_name = 'FIRST_VISIT'
GROUP BY visit_date, traffic_type
ORDER BY visit_date, traffic_type8. 신규 사용자 유입 vs. 리타겟팅 분석
SELECT
conversion_type,
conversion_name,
COUNT(*) AS conversions
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
GROUP BY conversion_type, conversion_name
ORDER BY conversions DESC9. 클릭 ID 분포(Google, Meta, TikTok 등)
SELECT
click_id_type,
COUNT(*) AS events_with_click_id
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
AND click_id_type != ''
GROUP BY click_id_type
ORDER BY events_with_click_id DESC
10. 전환 날짜별 코호트 사용자(모바일 설치 날짜와 동일)
SELECT
DATE(event_time__conversion) AS cohort_date,
media_source,
COUNT(DISTINCT COALESCE(customer_user_id, appsflyer_id_value)) AS cohort_users
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND platform = 'WEBSITE'
AND unified_app_id = 'website-example.com'
AND is_primary_attribution = true
GROUP BY cohort_date, media_source
ORDER BY cohort_date, cohort_users DESC특징과 제한 사항
다음 필드는 웹 데이터에서 지원되지 않으며 항상 비어 있습니다:
| 항목 | 설명 |
|---|---|
advertising_id_type, hardware_id_type 등. |
둘 다 |
agency, site_id, ad_type
|
둘 다 |
platform_group |
전환 |
app_version__conversion |
end_user_events |
모든 __assist_* 필드 |
전환 |
참고 자료