애널리틱스 추적: 개인정보 보호 우선 이벤트 수집
이 글은 봇 트래픽을 피하고 개인정보를 존중하면서 사용자 행동을 어떻게 추적하는지 설명합니다.
문제: 사용자 행동 이해하기
우리는 다음을 알아야 합니다:
-
사용자가 어떤 페이지를 방문하는지
-
어떤 제품을 조회하는지
-
트래픽이 어디서 오는지 (Google Ads, 자연 검색, 소셜)
-
어떤 캠페인이 전환을 이끄는지
하지만 다음은 피해야 합니다:
-
봇과 크롤러 추적
-
개인 식별 정보(PII) 저장
-
개인정보 보호 규정 위반
해결책: 클라이언트 측 + 서버 측 추적
클라이언트 측: JavaScript 추적
방문자 ID: 쿠키에 저장된 무작위 ID (365일)
세션 ID: sessionStorage에 저장된 무작위 ID (브라우저 닫힐 때까지)
캠페인 매개변수: URL에서 추출하여 sessionStorage에 저장
추적 매개변수:
-
gclid- Google 클릭 ID (검색 광고) -
gbraid- Google Ads 클릭 ID (쇼핑 광고) -
wbraid- Google Ads 클릭 ID (iOS) -
fbclid- Facebook 클릭 ID -
srsltid- Google 자연 검색 결과 ID -
utm_source,utm_medium,utm_campaign,utm_term,utm_content
저장: WhatsApp/전화 클릭 귀속을 위해 매개변수를 쿠키에 저장 (30분)
서버 측: 정보 보강
서버는 다음 정보로 이벤트를 보강합니다:
GeoIP 데이터: IP 주소로부터 국가, 지역, 도시
User-Agent 파싱: 브라우저, OS, 기기 유형
타임스탬프: 서버 시간 (UTC)
봇 탐지: 알려진 봇 User-Agent 필터링
이벤트 유형
페이지 뷰: 사용자가 페이지 방문
제품 뷰: 사용자가 제품 페이지 조회
장바구니 추가: 사용자가 제품을 장바구니에 추가
결제 시작: 사용자가 결제 시작
구매 완료: 사용자가 구매 완료
WhatsApp 클릭: 사용자가 WhatsApp 버튼 클릭
전화 클릭: 사용자가 전화번호 클릭
데이터 흐름
sequenceDiagram
participant User
participant JS as JavaScript
participant API as /api/analytics
participant Firehose as Kinesis Firehose
participant S3
User->>JS: 페이지 방문
JS->>JS: URL 매개변수 추출
(gclid, utm_* 등)
JS->>JS: sessionStorage에 저장
JS->>API: POST 이벤트 + 매개변수
API->>API: GeoIP로 정보 보강
API->>API: User-Agent 파싱
API->>API: 봇 필터링
API->>Firehose: 보강된 이벤트 전송
Firehose->>S3: 애널리틱스 버킷에 저장봇 탐지
다중 신호를 사용하여 봇 트래픽을 필터링합니다:
User-Agent 패턴: 알려진 봇 문자열 (Googlebot, Bingbot 등)
행동 패턴: 너무 빠르거나, 너무 많은 요청
JavaScript 누락: 봇은 종종 JS를 실행하지 않음
제외 쿠키: tv_exclude=true 설정 시 모든 추적 중지
개인정보 보호
PII 없음: 이름, 이메일, 전화번호 절대 저장 안 함
데이터 보존: 이벤트는 30일 후 삭제
조건부 픽셀 로딩
관련 있을 때만 추적 픽셀을 로드합니다:
Google Ads 픽셀: gclid, gbraid, wbraid, srsltid가 있을 때만
LinkedIn 픽셀: li_fat_id가 있을 때만
장점: 페이지 로드 속도 향상, 추적 오버헤드 감소
트래픽 소스 탐지
URL 매개변수로부터 트래픽 소스를 탐지합니다:
Google Ads: gclid, gbraid, wbraid → utm_source=google_ads
Google 자연 검색: srsltid → utm_source=google_search
전환 추적
퍼널을 통해 전환을 추적합니다:
제품 뷰 → 장바구니 추가 → 결제 시작 → 구매 완료
각 단계는 다음을 포함합니다:
-
방문자 ID (귀속을 위해)
-
세션 ID (세션 분석을 위해)
-
캠페인 매개변수 (ROI 계산을 위해)
-
제품 SKU (제품 분석을 위해)
리드 터치 추적
사용자가 연락할 때 (WhatsApp, 전화, 이메일) 다음을 캡처합니다:
연락 방법: WhatsApp, 전화, 이메일
캠페인 매개변수: 쿠키에서 (30분 창)
제품 컨텍스트: 어떤 제품 페이지에 있었는지
장점: 오프라인 전환을 온라인 캠페인에 귀속
저장소
이벤트는 Kinesis Firehose를 통해 S3에 저장됩니다:
형식: JSON 라인 (한 줄에 하나의 이벤트)
파티셔닝: 날짜별 (년/월/일/시간)
압축: Gzip
보존: 30일
쿼리
이벤트는 AWS Athena를 통해 쿼리됩니다:
스키마: Glue Data Catalog에 정의됨
쿼리: S3 데이터에 대한 SQL
사용 사례: 캠페인 ROI, 제품 인기도, 트래픽 소스
참고 자료
기술 개념
-
웹 애널리틱스 - Wikipedia
-
개인정보 보호 설계 - Wikipedia
AWS 서비스
-
Kinesis Firehose - AWS 문서
-
Athena - AWS 문서
관련 글
- 다중 서버 아키텍처 - 애널리틱스가 실행되는 곳
요약
우리의 애널리틱스 시스템은 개인정보를 존중하면서 사용자 행동을 추적합니다:
클라이언트 측:
-
✅ URL에서 캠페인 매개변수 추출
-
✅ sessionStorage에 저장 (세션 범위)
-
✅ 쿠키에 저장 (귀속을 위해 30분)
-
✅ 이벤트를 API로 전송
서버 측:
-
✅ GeoIP 및 User-Agent로 정보 보강
-
✅ 봇 트래픽 필터링
-
✅ Kinesis Firehose로 전송
-
✅ S3에 저장 (날짜별 파티셔닝)
개인정보 보호:
-
✅ PII 저장 안 함
-
✅ 30일 보존
조건부 로딩:
-
✅ gclid가 있을 때만 Google Ads 픽셀
-
✅ li_fat_id가 있을 때만 LinkedIn 픽셀
이 접근 방식은 통찰력과 개인정보 보호 및 성능의 균형을 맞춥니다.