마케팅 데이터 모델링
정제되고 조인된 테이블
마케팅 데이터 모델링은(는) CoddyKit의 무료 Digital Marketing Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Digital Marketing Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Digital Marketing Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
왜 모델링해야 할까요
원천 커넥터 테이블은 정돈되지 않았습니다. 열 이름이 일관되지 않고, 통화가 섞여 있으며, 데이터 세부 수준이 다르고, 플랫폼별 특성이 제각각입니다. 이런 테이블을 직접 조회하면 잘못되고 재현할 수 없는 수치가 나옵니다.
데이터 모델링은 원천 행을 정제되고 일관되며 비즈니스에 바로 사용할 수 있는 테이블로 바꾸는 작업입니다. ROAS, 전환, 매출을 한 번 정확하게 정의하는 곳이므로 모든 보고서가 같은 결과를 내게 됩니다.
스타 스키마
가장 널리 사용되는 분석 모델은 스타 스키마입니다. 측정 가능한 이벤트를 담은 중앙 팩트 테이블을, 이벤트를 설명하는 차원 테이블이 둘러싼 형태입니다. 팩트에는 수치인 지출, 클릭, 매출이 들어가고, 차원에는 캠페인, 날짜, 채널, 고객과 같은 맥락이 들어갑니다.
이 구조는 마케터가 이해하기 쉽고 BI 도구에도 효율적입니다. BI 도구는 하나의 팩트를 여러 차원과 결합해 어떤 속성으로든 지표를 나눠 볼 수 있습니다.
dim_date
|
dim_channel -- fct_ad_spend -- dim_campaign
|
dim_account
fct_ad_spend (facts): impressions, clicks, cost, conversions
dims: who / what / when context팩트와 차원
팩트 테이블은 길고 합산 가능한 구조입니다. 이벤트별 또는 일별 캠페인별로 한 행을 가지며, 합산할 수 있는 숫자 측정값을 포함합니다. 차원 테이블은 넓고 설명적인 구조입니다. 캠페인별 또는 고객별로 한 행을 가지며, 필터링하고 그룹화할 수 있는 속성을 포함합니다.
판별 기준은 다음과 같습니다. SUM으로 합산할 값이면 팩트이고, GROUP BY로 묶을 값이면 차원입니다. 지출은 팩트이고 캠페인 이름은 차원입니다.
fct_ad_spend dim_campaign
---------------- ----------------
date campaign_id (PK)
campaign_id (FK) campaign_name
cost <-SUM-> channel
clicks <-SUM-> objective
conversions start_date행 단위: 첫 번째 결정
행 단위는 팩트 테이블의 한 행이 나타내는 대상을 뜻합니다. 이를 먼저 선언하는 것이 모델링에서 가장 중요한 단일 결정입니다. 일별 행과 전체 기간 합계를 섞으면 모든 후속 지표가 중복 집계되고 오염됩니다.
행 단위를 평이한 말로 명시하십시오. 예를 들어 캠페인별·일별로 한 행이라고 선언할 수 있습니다. 그러면 모든 열은 해당 행 단위에서 참이어야 하고, 모든 적재도 이를 따라야 합니다.
Declared grain: one row per campaign per day
-- enforce uniqueness on the grain
SELECT date, campaign_id, COUNT(*)
FROM fct_ad_spend
GROUP BY 1,2
HAVING COUNT(*) > 1; -- must return 0 rows스테이징 모델
팩트와 차원을 만들기 전에 스테이징 모델을 구축하십시오. 원천 테이블마다 하나씩 만들고, 열 이름을 표준화하며, 유형을 변환하고, 단위를 통일합니다. 예를 들어 센트를 달러로 바꾸고 날짜를 UTC로 맞춥니다. 하나의 스테이징 모델은 하나의 원천 테이블에 대응해야 하며, 그 이상을 담당해서는 안 됩니다.
스테이징은 정제 계층입니다. 원천 시스템의 특성을 격리하므로 이후 데이터 마트는 메타가 이를 지출이라고 부르는지, 구글이 비용이라고 부르는지 알 필요가 없습니다.
-- stg_google_ads__spend
SELECT
date AS spend_date,
campaign_id,
'google' AS channel,
cost_micros / 1000000 AS cost, -- micros -> dollars
clicks,
conversions
FROM raw.google_ads__campaign_stats;채널 통합
각 광고 플랫폼은 서로 다른 방식으로 보고하지만, 스테이징을 거치면 공통된 형태를 갖게 됩니다. 다음 모델에서는 이를 하나의 여러 채널 통합 지출 팩트로 결합하며, 이것이 통합 보고의 토대가 됩니다.
전체 ROAS를 가능하게 하는 것이 바로 이 단일 테이블입니다. 모든 채널이 같은 열로 통일되므로 하나의 쿼리로 구글, 메타, TikTok의 지출을 한 번에 합산할 수 있습니다.
-- fct_ad_spend: union all channels
SELECT * FROM stg_google_ads__spend
UNION ALL
SELECT * FROM stg_meta_ads__spend
UNION ALL
SELECT * FROM stg_tiktok_ads__spend;
-- now: SUM(cost) GROUP BY channel works통합 차원
여러 채널을 분석하려면 차원을 통일해야 합니다. 모든 팩트가 동일한 방식으로 결합하는 공통 날짜 차원과 채널 차원이 필요합니다. 그러면 원천이 광고인지, 이메일인지, 웹인지와 관계없이 "월별·채널별 매출"이 같은 의미를 갖습니다.
지출과 매출을 하나의 차트에 나란히 표시할 수 있는 이유가 바로 통합 차원입니다. 통합 차원이 없으면 결합 기준이 어긋나고 합계가 조용히 달라집니다.
Conformed dims shared across facts:
dim_date -> joined by every fact on date
dim_channel -> 'google','meta','email','organic'
dim_campaign -> unified campaign keys
-> spend and revenue line up on the same axesSQL에서의 기여도 분석
기여도 분석은 전환에 대한 공로를 접점에 배분합니다. 마지막 클릭 방식은 가장 단순합니다. 전환 직전의 마지막 마케팅 원천에 모든 공로를 부여합니다. 첫 클릭 방식, 선형 방식, 위치 기반 방식은 공로를 서로 다르게 나눕니다.
웨어하우스에서는 기여도 분석을 플랫폼의 불투명한 기능이 아니라 모델로 구현합니다. GA4 이벤트 수준 데이터를 사용하면 사용자별 접점에 윈도 함수를 적용하고 어떤 규칙이든 적용한 다음, 여러 모델의 결과를 공정하게 비교할 수 있습니다.
-- last non-direct click per conversion
WITH touches AS (
SELECT user_id, channel, event_time,
ROW_NUMBER() OVER (PARTITION BY user_id
ORDER BY event_time DESC) AS rn
FROM web_touchpoints
WHERE channel <> 'direct'
)
SELECT channel, COUNT(*) FROM touches WHERE rn=1
GROUP BY 1;느리게 변하는 차원
차원 속성은 시간이 지나며 변경됩니다. 캠페인의 예산 담당자가 바뀌거나 고객의 등급이 올라갈 수 있습니다. 유형 2 느리게 변하는 차원은 기존 행을 덮어쓰는 대신 유효 기간을 가진 새 행을 추가해 이력을 보존합니다.
이는 특정 시점의 정확한 보고에 중요합니다. 고객이 전환했을 때 어느 세그먼트에 속했는지 알려면 오늘의 차원이 아니라 당시 유효했던 차원의 버전이 필요합니다.
dim_customer (SCD Type 2)
cust_id tier valid_from valid_to is_current
101 free 2026-01-01 2026-04-01 false
101 pro 2026-04-01 9999-12-31 true
-- join on event_date BETWEEN valid_from AND valid_to테스트와 문서화
모델은 코드이므로 테스트해야 합니다. 디비티와 같은 도구를 사용하면 키가 고유하고 비어 있지 않은지, 채널 값이 허용된 집합에 속하는지, 테이블 간 관계가 유지되는지 검증할 수 있습니다.
테스트는 스키마 드리프트와 잘못된 결합이 대시보드에 도달하기 전에 발견합니다. 자동 생성 문서 및 데이터 계보와 함께 사용하면 모델이 취약한 불투명한 구조가 아니라 신뢰할 수 있고 새 구성원이 쉽게 익힐 수 있는 구조가 됩니다.
# dbt schema test
models:
- name: fct_ad_spend
columns:
- name: campaign_id
tests: [not_null]
- name: channel
tests:
- accepted_values:
values: ['google','meta','tiktok']데이터 마트: 최종 계층
최상위 계층은 데이터 마트입니다. 특정 사용자를 위해 구성된 업무용 테이블로, 예를 들어 marketing_performance 데이터 마트는 이미 지출과 매출을 결합하고 채널별·일별 ROAS를 계산해 둡니다.
BI 도구는 데이터 마트만 읽습니다. 이 계층에서 미리 결합하고 미리 집계하면 대시보드가 빠르고 저렴하게 유지되며, 모든 분석가가 동일하고 정확한 정의를 사용하게 됩니다.
-- marts.marketing_performance (1 row / day / channel)
SELECT s.spend_date, s.channel,
SUM(s.cost) AS spend,
SUM(r.revenue) AS revenue,
SAFE_DIVIDE(SUM(r.revenue), SUM(s.cost)) AS roas
FROM fct_ad_spend s
LEFT JOIN fct_revenue r USING (spend_date, channel)
GROUP BY 1,2;빠른 확인
광고 성과 팩트 테이블을 만들면서 중복 집계를 피해야 합니다. 어떤 열을 작성하기 전에 선언해야 할 가장 중요한 단 하나의 사항은 무엇일까요?
복습
모델링은 여러 계층을 거쳐 뒤엉킨 원시 테이블을 신뢰할 수 있고 비즈니스에 바로 사용할 수 있는 데이터로 바꿉니다. 준비 계층은 각 원천을 정리하고 형식을 통일하며, 사실 테이블과 일치 차원은 스타 스키마를 이루고, 데이터 마트는 모든 항목을 미리 결합해 BI에 제공합니다.
먼저 데이터 세부 수준을 선언하고, 혼합 지표를 위해 채널을 합치며, 에스큐엘에서 기여도 분석과 SCD 유형 2 이력을 구현하십시오. 또한 모든 모델을 테스트하여 잘못된 수치가 대시보드에 도달하기 전에 큰 오류로 드러나게 하십시오.
자주 묻는 질문
“마케팅 데이터 모델링” 강의는 무료인가요?
네 — “마케팅 데이터 모델링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Digital Marketing Academy 강의 전체를 잠금 해제할 수 있습니다. Digital Marketing Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“마케팅 데이터 모델링”에서 뭘 배우나요?
정제되고 조인된 테이블 브라우저에서 직접 실행하는 실습 코드로 Digital Marketing Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Digital Marketing Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Digital Marketing Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“마케팅 데이터 모델링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Digital Marketing Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Digital Marketing Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 데이터 웨어하우스를 사용하는 이유
- ETL과 커넥터
- 마케팅 데이터 모델링
- 행동을 이끄는 대시보드