Ca
CareerCraft.kr
サインイン
강사칼럼

SQL을 활용한 마케팅 데이터 추출과 분석: 쿼리 하나로 발견한 전환율의 진짜 원인

D
Donghyuk_Park
2025年5月25日1年前
카테고리
未設定

"데이터는 알고 있다, 다만 우리가 묻지 않았을 뿐." 마케터라면 한 번쯤 데이터의 중요성을 절감하며 이런 생각을 해보셨을 겁니다. 특히 전환율(Conversion Rate, CVR)은 마케팅 성패를 가늠하는 핵심 지표 중 하나죠. 그런데 이 전환율, 어느 날 갑자기 뚝 떨어지거나, 혹은 원인을 알 수 없이 정체될 때가 있습니다. 온갖 가설을 세우고 A/B 테스트를 반복해도 명쾌한 답을 찾기 어려울 때, 우리는 더 깊은 데이터의 세계로 들어가야 합니다.
저 역시 최근 비슷한 경험을 했습니다. 전체적인 웹사이트 트래픽은 유지되는데, 특정 캠페인의 전환율이 미세하게 하락하며 전체 ROAS에 영향을 주기 시작했습니다. 엑셀로 데이터를 받아 필터링하고 피벗 테이블을 돌려봐도 뚜렷한 원인이 보이지 않았죠. "혹시 특정 유저 그룹에서 문제가 있는 건 아닐까?" 하는 막연한 의심만 커져갈 때, SQL이라는 강력한 도구를 활용해보기로 했습니다. 그리고 단 하나의 쿼리가 그 실마리를 제공했습니다.

엑셀의 한계를 넘어, SQL로 데이터에 직접 질문하기

엑셀은 분명 훌륭한 분석 도구입니다. 하지만 데이터의 양이 방대해지거나, 여러 테이블에 흩어져 있는 정보를 결합해 복잡한 조건을 분석해야 할 때 한계에 부딪히곤 합니다.
1.
데이터 접근성: 마케터가 직접 데이터베이스(DB)에 접근하기 어렵다면, 매번 개발팀이나 데이터팀에 필요한 데이터를 요청하고 기다려야 합니다. 이는 분석의 속도를 현저히 늦춥니다.
2.
데이터 크기 및 성능: 수십만, 수백만 건의 로그 데이터는 엑셀로 다루기 버겁습니다. 파일이 열리지 않거나, 간단한 필터링에도 한참 시간이 걸리죠.
3.
복잡한 조건 및 데이터 연결(JOIN): 'A 채널로 유입되어 B 페이지를 보고 C 제품을 구매한 사용자 중, D 기간에 가입한 신규 회원'과 같은 복잡한 조건의 세그먼트를 추출하고 분석하는 것은 엑셀로는 매우 어렵거나 불가능에 가깝습니다.
4.
분석의 깊이: 피벗 테이블도 훌륭하지만, 더 다양한 각도에서 데이터를 탐색하고 숨겨진 패턴을 찾기에는 SQL의 유연성과 표현력이 훨씬 뛰어납니다.
SQL(Structured Query Language)은 데이터베이스에 직접 질문을 던져 원하는 데이터를 추출하고 가공할 수 있는 언어입니다. 마치 데이터베이스와 대화하는 것과 같죠. 처음에는 문법이 낯설 수 있지만, 몇 가지 기본 구문만 익히면 마케터도 충분히 활용하여 놀라운 인사이트를 얻을 수 있습니다. (사실: 많은 기업에서 마케팅 데이터는 관계형 데이터베이스에 저장되며, SQL은 이를 다루는 표준 언어입니다.)

문제 상황: 미스터리한 전환율 하락, 원인은 어디에?

저희 팀의 상황은 이랬습니다.
•
상황: 특정 프로모션 기간 동안 전반적인 웹사이트 유입은 양호했으나, 최종 구매 전환율이 예상보다 낮게 나타남.
•
기존 분석: 채널별 유입량, 페이지뷰, 이탈률 등을 엑셀로 분석했으나 뚜렷한 병목 지점 발견 실패.
•
가설:
1.
특정 유입 채널의 사용자 질이 낮아졌을 것이다.
2.
특정 기기(모바일/데스크톱) 환경에서 사용성이 저하되었을 것이다.
3.
신규 사용자와 기존 사용자 간의 행동 패턴에 차이가 있을 것이다.
이 가설들을 검증하기 위해, 저는 사용자 행동 로그 데이터와 구매 데이터가 저장된 DB에 접근하여 SQL을 사용하기로 했습니다.

"쿼리 하나"로 밝혀진 전환율 하락의 단서

가장 먼저 확인하고 싶었던 것은 **'사용자 유형(신규/재방문)별, 그리고 기기 유형(모바일/데스크톱)별 전환율'**이었습니다. 만약 특정 세그먼트에서 유독 낮은 전환율이 관찰된다면, 그곳에 문제가 숨어있을 가능성이 높기 때문입니다.
다음은 실제 사용한 쿼리와 유사한 예시입니다. (테이블명과 컬럼명은 실제 환경에 맞게 수정해야 합니다.)
사용된 테이블 (가상):
1.
session_logs: 사용자 세션 정보를 담고 있는 테이블
•
session_id (VARCHAR, PK): 세션 고유 ID
•
user_id (VARCHAR): 사용자 ID
•
event_timestamp (TIMESTAMP): 이벤트 발생 시간
•
device_type (VARCHAR): 기기 유형 ('mobile', 'desktop')
•
is_new_user (BOOLEAN): 신규 사용자 여부 (True/False) - 실제로는 user_id의 첫 세션인지 등으로 판별
2.
purchase_logs: 구매 정보를 담고 있는 테이블
•
purchase_id (VARCHAR, PK): 구매 고유 ID
•
session_id (VARCHAR, FK): 구매가 발생한 세션 ID
•
purchase_timestamp (TIMESTAMP): 구매 발생 시간
분석 쿼리 예시:
WITH
  -- 1. 분석 기간 내 세션 기본 정보 집계
  session_summary AS (
    SELECT
      session_id,
      user_id,
      device_type,
      is_new_user, -- 실제로는 user_id의 첫번째 세션인지 등으로 이 시점에서 판단
      MIN(event_timestamp) AS session_start_time -- 세션 시작 시간
    FROM
      session_logs
    WHERE
      event_timestamp >= '2023-10-01 00:00:00' -- 분석 시작일
      AND event_timestamp < '2023-10-08 00:00:00' -- 분석 종료일 +1일
    GROUP BY
      1, 2, 3, 4
  ),
  -- 2. 분석 기간 내 발생한 구매 세션 정보
  purchase_sessions AS (
    SELECT
      DISTINCT session_id AS purchase_session_id
    FROM
      purchase_logs
    WHERE
      purchase_timestamp >= '2023-10-01 00:00:00' -- 분석 시작일
      AND purchase_timestamp < '2023-10-08 00:00:00' -- 분석 종료일 +1일
  )
-- 3. 세션 정보와 구매 정보를 결합하여 세그먼트별 전환율 계산
SELECT
  ss.is_new_user,
  ss.device_type,
  COUNT(DISTINCT ss.session_id) AS total_sessions,                 -- 전체 세션 수
  COUNT(DISTINCT ps.purchase_session_id) AS converted_sessions,   -- 구매 전환된 세션 수
  (
    COUNT(DISTINCT ps.purchase_session_id) * 100.0 / COUNT(DISTINCT ss.session_id)
  ) AS conversion_rate_percent                                    -- 전환율 (%)
FROM
  session_summary ss
LEFT JOIN
  purchase_sessions ps ON ss.session_id = ps.purchase_session_id
GROUP BY
  1, 2
ORDER BY
  1, 2;
쿼리 해설:
1.
session_summary (CTE - Common Table Expression):
•
session_logs 테이블에서 특정 기간 동안 발생한 세션들의 session_id, user_id, device_type, is_new_user 정보를 가져옵니다.
•
is_new_user는 실제로는 user_id가 해당 기간 또는 그 이전에 첫 방문했는지 여부를 기준으로 계산될 수 있습니다. (예: users 테이블과 조인하여 가입일자 비교) 여기서는 편의상 session_logs에 있다고 가정했습니다.
2.
purchase_sessions (CTE):
•
purchase_logs 테이블에서 특정 기간 동안 구매가 발생한 session_id를 중복 없이 가져옵니다.
3.
최종 SELECT 문:
•
session_summary를 기준으로 purchase_sessions를 LEFT JOIN 합니다. (모든 세션을 기준으로 구매가 있었는지 확인하기 위함)
•
is_new_user (신규/재방문)와 device_type (모바일/데스크톱)으로 GROUP BY하여 그룹별 통계를 냅니다.
•
COUNT(DISTINCT ss.session_id): 각 그룹의 전체 세션 수를 계산합니다.
•
COUNT(DISTINCT ps.purchase_session_id): 각 그룹에서 구매로 이어진 세션 수를 계산합니다.
•
두 값을 나눠 전환율(%)을 계산합니다.
결과 및 발견:
이 쿼리를 실행하자, 놀라운 사실이 드러났습니다.
is_new_user
device_type
total_sessions
converted_sessions
conversion_rate_percent
False
desktop
5000
250
5.00
False
mobile
8000
320
4.00
True
desktop
6000
300
5.00
True
mobile
10000
100
1.00
위 표는 예시이지만, 실제 분석 결과 '신규 사용자(True)가 모바일(mobile)로 접속했을 때'의 전환율이 다른 세그먼트에 비해 현저히 낮게 나타나는 것을 발견했습니다. 재방문 사용자나 데스크톱 사용자(신규/재방문 모두)의 전환율은 비교적 양호했죠.
이전에는 전체 전환율만 보거나, 기기별 전체 전환율, 사용자 유형별 전체 전환율만 보았을 때는 이 문제가 명확히 드러나지 않았습니다. 하지만 두 가지 조건을 교차하여 세분화하자 문제가 수면 위로 떠오른 것입니다.

후속 조치 및 성과: 진짜 원인을 찾아 해결하다

이 데이터를 바탕으로 저희 팀은 다음과 같은 후속 조치를 진행했습니다.
1.
원인 분석 심층화:
•
신규 사용자가 모바일로 접속했을 때의 사용자 여정(User Journey)을 집중적으로 분석했습니다. (어떤 페이지에서 이탈이 많은지, 어떤 기능 사용에 어려움을 겪는지 등)
•
Google Analytics, Hotjar와 같은 툴을 활용하여 해당 세그먼트의 화면 녹화, 히트맵 등을 추가로 확인했습니다.
2.
문제점 발견:
•
분석 결과, 신규 사용자가 모바일로 특정 프로모션 페이지에 진입했을 때, 회원가입/로그인 프로세스가 복잡하고 UI가 직관적이지 않아 많은 이탈이 발생하는 것을 확인했습니다. 특히, 소셜 로그인 버튼의 가시성이 떨어지고, 입력 필드가 너무 많았습니다.
3.
개선 실행:
•
해당 페이지의 모바일 UI/UX를 긴급히 개선했습니다. (소셜 로그인 버튼 강조, 입력 필드 간소화, 프로그레스 바 추가 등)
4.
성과 측정:
•
개선 후 동일한 SQL 쿼리로 다시 성과를 측정했습니다. 그 결과, 신규 모바일 사용자의 전환율이 이전 대비 2.5%p 상승하며, 전체 전환율 및 ROAS 개선에 크게 기여했습니다.
만약 SQL 없이 엑셀에만 의존했다면, 이처럼 정확한 문제 구간을 특정하기 어려웠을 것이고, 개선 방향도 모호했을 것입니다. (사실: SQL을 통한 세분화된 분석은 마케팅 전략의 효과를 정량적으로 측정하고, 데이터 기반 의사결정을 가능하게 합니다.)

마케터에게 SQL이 필요한 이유, 그리고 시작하는 법

"저는 개발자가 아닌데요?" 네, 괜찮습니다. 마케터에게 필요한 SQL은 데이터베이스 전체를 설계하거나 복잡한 시스템을 구축하는 수준이 아닙니다. 이미 잘 구축된 데이터에서 내가 원하는 정보를 뽑아내고, 간단히 가공하여 인사이트를 얻는 수준이면 충분합니다.
SQL 학습을 시작하는 마케터를 위한 팁:
1.
쉬운 학습 자료 활용: '생활코딩 SQL', 'SQL 첫걸음' 등 온라인에는 초보자를 위한 좋은 강의와 자료가 많습니다. W3Schools 같은 웹사이트에서 직접 쿼리를 실행해보는 것도 좋습니다.
2.
기본 구문부터 익히기: SELECT, FROM, WHERE, GROUP BY, ORDER BY, JOIN (특히 LEFT JOIN) 정도만 익혀도 많은 분석이 가능합니다.
3.
실제 회사 데이터에 접근 요청 (가능하다면): 가장 좋은 학습은 실제 데이터를 다뤄보는 것입니다. 데이터팀이나 개발팀에 읽기 전용(Read-only) 권한을 요청하여, 간단한 조회부터 시작해보세요. (보안 정책 확인 필수)
4.
SQL 클라이언트 도구 사용: DBeaver, pgAdmin, MySQL Workbench 등 무료 SQL 클라이언트 툴을 사용하면 쿼리 작성 및 결과 확인이 훨씬 편리합니다.
5.
작은 성공 경험 쌓기: 처음부터 복잡한 쿼리를 짜려 하기보다, '이번 주 가입자 목록 보기', '특정 제품 구매자 목록 보기' 등 간단한 목표부터 시작하여 성공 경험을 쌓는 것이 중요합니다.
데이터의 바다에서 길을 잃지 않고, 원하는 보물을 찾아내기 위해 SQL이라는 나침반을 가져보는 것은 어떨까요? 오늘, 여러분의 데이터 속에 숨겨진 전환율의 진짜 원인을 찾아 떠나는 여정을 시작해보세요. 쿼리 하나가 가져다줄 놀라운 발견이 여러분을 기다리고 있을지도 모릅니다.
Ca
「CareerCraft.kr」を購読
サイトを購読すると、新規投稿などの最新情報を通知やメールでいち早く受け取れます。
Slashpageに登録して「CareerCraft.kr」を購読しましょう!
購読する
👍