
웹 분석 데이터 정제: Gemini AI를 활용한 봇 식별
요약
Gemini AI를 활용하여 GA4 웹 분석 데이터에서 봇 트래픽을 식별하고 정제하는 엔드 투 엔드 파이프라인 구축 방법을 소개합니다. 전통적인 필터링 방식의 한계를 극복하기 위해 행동 기반의 AI 분류 아키텍처를 제안합니다.
핵심 포인트
- 전 세계 웹 트래픽의 약 절반이 봇에 의해 발생하여 데이터 무결성을 위협함
- User-Agent나 IP 블랙리스트 같은 전통적 방식은 정교한 봇 식별에 한계가 있음
- Gemini AI를 활용한 행동 신호 분석으로 더 정확한 트래픽 분류 가능
- 신호 수집, AI 분류, 시각화로 이어지는 엔드 투 엔드 아키텍처 구축
봇이 지표를 부풀리도록 방치하지 마세요. 브라우저 신호와 Gemini AI를 사용하여 GA4 데이터를 필터링하고 비즈니스 인사이트에 대한 신뢰를 회복할 수 있는 엔드 투 엔드 (end-to-end) 트래픽 분류기를 구축하는 방법을 소개합니다.
웹 지표의 위기
현재의 디지털 환경에서 우리는 웹 데이터의 무결성(integrity)에 관한 심각한 위기에 직면해 있습니다. 연구에 따르면 전 세계 웹 트래픽의 약 절반이 인간 사용자가 아닌 봇으로부터 발생합니다. 이러한 자동화된 트래픽은 단순히 브라우징을 하는 것에 그치지 않고, 세션(sessions)을 부풀리고, 전환율(conversion rates)을 왜곡하며, 이해관계자들이 실제 제품의 영향력을 측정하기 위해 의존하는 지표들을 오염시킵니다.
수년 동안 개발자들은 User-Agent 문자열이나 IP 블랙리스트와 같은 전통적인 필터에 의존해 왔습니다. 하지만 현대의 봇들은 이러한 식별자들을 모방할 수 있을 만큼 정교해졌으며, 이로 인해 전통적인 방어 체계는 효과를 잃었습니다. 비즈니스 인사이트에 대한 신뢰를 회복하기 위해서는 더 스마트하고 행동 기반의 접근 방식이 필요합니다.
아키텍처 개요
이 문제를 해결하려면 신호 캡처(signal capture)에서 AI 분류(classification), 그리고 최종 시각화(visualization)로 이어지는 엔드 투 엔드 (end-to-end) 파이프라인이 필요합니다. 제안된 아키텍처는 네 가지 주요 단계로 구성됩니다:
- JS 태그 (수집 (Collection)): 웹사이트에 설치된 경량 스크립트가 비개인식별정보 (non-PII, Personally Identifiable Information) 행동 신호를 수집합니다.
- 웹 서비스 및 Gemini (분류 (Classification)): 이러한 신호들은 백엔드 서비스로 전송되며, 여기서 Gemini AI가 패턴을 분석하여 분류 결과를 제공합니다.
- GTM 및 GA4 (통합 (Integration)): 분류 결과는 dataLayer로 전송되며, Google Tag Manager (GTM)가 이를 가져와 Google Analytics 4 (GA4)로 커스텀 이벤트를 보냅니다.
- Looker Studio (시각화 (Visualization)): 정제된 지표는 이해관계자 검토를 위해 대시보드에 표시됩니다.
행동 신호 캡처 (비개인식별정보 (Non-PII))
봇을 식별하는 핵심은 그들이 '누구인가'가 아니라 '어떻게 행동하는가'에 있습니다. 우리는 사용자의 개인정보를 보호하면서도 높은 의도를 가진 데이터를 캡처하기 위해 비개인식별정보 (non-PII) 신호에 집중합니다. 주요 신호는 다음과 같습니다:
- 상호작용 패턴 (Interaction patterns): 마우스 움직임, 터치 이벤트, 키보드 상호작용 및 스크롤 깊이.
- 하드웨어 시그니처 (Hardware signatures): 디바이스 메모리, 하드웨어 병렬성 (hardware concurrency, CPU 코어 수) 및 픽셀 비율.
- 환경 컨텍스트 (Environment context): 시간대 오프셋 (timezone offsets), 언어 설정 및 플러그인 구성.
예를 들어, 페이지 접속 후 2초 이내에 버튼과 상호작용하지만 마우스 움직임이나 스크롤 활동이 전혀 없는 "사용자"는 봇일 확률이 매우 높습니다.
구현 (Implementation)
흐름을 최적화하고 트래픽을 효과적으로 분류하기 위해서는 봇이 일관되게 속이기 어려운 행동 데이터를 캡처해야 합니다. 하지만 모든 페이지 로드 시마다 AI에 질의해서는 안 됩니다. 이는 비용이 많이 들고 중복되는 작업이기 때문입니다.
대신, 우리는 localStorage를 사용하여 "1회 확인 (check-once)" 로직을 구현합니다. 이를 통해 세션당 한 번만 무거운 작업을 수행하도록 보장하며, 결과값을 브라우저에 유지하여 향후 페이지 뷰에서도 사용할 수 있도록 합니다.
AI 결과값은 크기가 클 수 있기 때문에 쿠키 (cookies) 대신 localStorage를 사용합니다. 쿠키는 모든 HTTP 요청에 함께 전송되어 불필요한 오버헤드 (overhead)를 발생시킵니다. 반면 localStorage는 이 데이터를 클라이언트 측 (client-side)에 유지하며, 필요한 스크립트에서만 접근할 수 있도록 합니다.
클라이언트 측 로직 (Client-Side Logic)
const CLASSIFICATION_KEY = 'traffic_type';
const EXPIRATION_TIME = 3600000; // 1시간 캐시
...
Gemini 브레인 (The Gemini Brain)
백엔드 서비스가 이러한 행동 신호 (behavioral signals)를 수신하면, Gemini AI가 다차원 분석 (multi-dimensional analysis)을 수행합니다. 정적인 규칙 세트 (static rule-set)와 달리, AI는 인간과 유사한 RAM 시그니처 (RAM signature)와 비인간적인 상호작용 속도가 결합된 경우와 같이 상충하는 신호들의 가중치를 조절하여 미세한 차이를 반영한 결과값을 제공할 수 있습니다:
- 분류 (Classification): HUMAN(사람) 또는 BOT(봇)으로 명확하게 라벨링됩니다.
- 위험 점수 (Risk Score): 신뢰 수준을 나타내는 수치 (1–10)입니다.
- 이유 (Reasons): "일관되지 않은 하드웨어 시그니처" 또는 "자동화된 탐색 패턴"과 같은 세 가지 근거를 제공합니다.
import google.generativeai as genai
def classify_traffic(signals):
...
전문가 팁: 봇이 분류 결과를 속일 수 있을까요? (Pro-Tip: Can a Bot Spoof the Classification?)
localStorage는 클라이언트 측에 존재하므로, 정교한 봇이라면 이론적으로 결과값을 "HUMAN"으로 덮어쓸 수 있습니다. 하지만 대부분의 분석 (analytics) 사용 사례에서는 이는 큰 문제가 되지 않습니다. 일반적인 봇들은 특정 사이트의 로직을 타겟팅하는 경우가 드물기 때문입니다.
해결책: 높은 보안이 필요한 경우, 백엔드에서 디지털 서명된 토큰 (예: JWT)을 반환하도록 하십시오. 이를 통해 봇이 데이터를 조작하더라도 서명 검증이 실패하여 분류 결과가 거부되도록 보장할 수 있습니다.
분석 통합: 데이터를 활용하기 (Analytics Integration: Putting Data to Work)
분류는 그 결과가 보고 도구 (reporting tools)에 도달할 때만 유용합니다. 우리는 AI의 응답을 브라우저의 데이터 레이어 (dataLayer)로 푸시합니다. 거기서부터 GTM은 세션이 분류될 때마다 GA4에서 커스텀 이벤트 (custom event)를 트리거합니다.
const pushToDataLayer = (data) => {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
...
이러한 통합된 데이터를 통해 다음과 같은 작업이 가능합니다:
- 봇 필터링 (Filter Bots): GA4에서 세그먼트 (segments)를 생성하여
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
