이벤트 이름 설계의 세분성(granularity)

이벤트를 어디까지 ‘쪼개고’, 어디까지 ‘합칠지’. 이걸 설계의 세분성(granularity)이라고 부릅니다. 너무 잘게 쪼개면 click_btn_signup_hero_top 같은 이름이 페이지마다 양산되어 한 행동이 수십 개 이벤트로 흩어지고, 반대로 너무 뭉치면 click 하나로 모든 행동이 들어와 ‘무엇이 일어난 건지’를 매개변수만으로 구분해야 합니다. 두 극단 사이의 ‘적정선’은 사실 복잡미묘합니다 — 이 글은 그 적정선을 잡는 우리의 원칙과 판단 체크리스트를 정리합니다.

세분성의 스펙트럼 — 너무 잘게 / 적정 / 너무 뭉치기

같은 ‘회원가입 버튼 클릭’이라는 행동을 세 가지 방식으로 설계하면 다음과 같이 갈립니다.

너무 잘게

위치·맥락까지 이벤트에

위치·페이지·디자인 변형마다 이벤트 이름이 다름

click_btn_signup_hero_topclick_btn_signup_hero_bottomclick_btn_signup_footerclick_btn_signup_modal

한 행동이 N개 이름으로 흩어짐. ‘회원가입 버튼 총 클릭’을 보려면 매번 N개를 합산해야 하고, 한 개라도 빠뜨리면 분석이 어긋납니다. GA4의 이벤트 이름 한도(약 500개)도 빠르게 닳습니다.

적정

UX 요소 유형까지만

이벤트 이름은 ‘무엇을 했나’, 세부는 매개변수에

click_btnbtn_name:"회원가입"btn_location:"hero_top"page_location:(자동)

한 행동은 한 이름. 합쳐서도(전체 버튼 클릭) 쪼개서도(btn_name="회원가입"만) 볼 수 있고, 페이지·위치는 매개변수로 빠져 있어 한도도 여유롭습니다.

너무 뭉치기

click 하나로 통합

모든 클릭이 한 이벤트 — 종류는 매개변수에

clickelement_type:"btn"element_name:"회원가입"element_location:"hero_top"

이벤트 이름이 모두 click이라 GA4 보고서에서 ‘어떤 행동 종류가 많이 일어났는가’를 한눈에 보기 어렵습니다. 또 click은 향상된 측정의 ‘아웃바운드 클릭’과 이름이 충돌해 매개변수로 더 갈라야 하는 부담이 생깁니다.

중앙의 ‘적정’이 우리가 추구하는 자리입니다. 다만 ‘적정’이 어디인지는 사이트의 성격·분석 목적·운영 환경에 따라 미세하게 달라집니다 — 그래서 ‘세분성’ 이야기는 한 줄 규칙이 아니라 판단 기준이 됩니다.

우리의 원칙 — “이벤트는 적게, 매개변수는 풍부하게”

이 원칙이 좋은 이유는 ‘합치는 분석’과 ‘쪼개는 분석’ 둘 다 가능하기 때문입니다.

  • 합치기click_btn의 총 클릭 수를 한 줄로 본다. (이름이 하나라 자연스럽게 합산됨)
  • 쪼개기btn_name을 측정기준으로 두면 ‘회원가입 버튼·결제 버튼·취소 버튼…’이 어떻게 다른지를 즉시 본다.
  • 새 버튼이 추가돼도 — 새 이벤트를 만들지 않고 btn_name에 새 값만 들어오면 분석에 자동 반영. 운영이 가볍습니다.

반대로 ‘이벤트로 쪼개야 마땅한 경우’도 있습니다 — 같은 ‘클릭’이라도 ① UX 요소 유형이 다르면(click_btn vs click_tab vs click_gnb), ② KPI에 직결되는 행동이라면(sign_up, purchase는 주요이벤트로 별도), 이때는 이벤트를 분리합니다. ‘무엇이 일어났는가’가 종(種)으로 다르면 이름도 다르게.

적용 예시 — 무엇을 이벤트로, 무엇을 매개변수로

상황이벤트 이름매개변수에 넣을 것
홈·카테고리·상세 등 여러 페이지의 GNB 클릭click_gnb (하나)gnb_name(어떤 메뉴) · page_location(자동) · 필요 시 gnb_position
상품 상세의 탭(리뷰·문의·배송) 전환click_tab (하나)tab_name(어떤 탭)
같은 모달 안의 닫기 버튼 / 확인 버튼click_popup (하나)popup_name(어떤 팝업) · element_name(close · confirm · ...)
일반 CTA 버튼(‘자세히’·‘담기’·‘구매’ 등)click_btn (하나)btn_name(버튼 텍스트·역할) · 필요 시 btn_location
회원가입이 완료되는 순간sign_up (별도 — 주요이벤트)method(google · kakao · email · ...) — GA4 추천 매개변수
구매가 완료되는 순간purchase (별도 — 주요이벤트)transaction_id · value · currency · items

요지 — UX 요소가 같으면 같은 이벤트, 다르면 다른 이벤트. 회원가입·구매처럼 ‘결과’가 KPI인 행동만 의미론적 이름으로 따로 분리합니다(→ 주요이벤트와 서브이벤트).

새 이벤트로 쪼갤지 — 판단 체크리스트

‘이 행동을 별도 이벤트로 만들어야 할까, 매개변수로 처리할까?’를 결정할 때 다음 다섯 가지를 차례로 봅니다. 대부분은 매개변수로 처리가 정답이고, 그 모든 질문에 ‘분리’ 쪽 답이 나올 때만 새 이벤트를 만듭니다.

  1. UX 요소 유형이 다른가? ‘버튼’과 ‘탭’과 ‘메뉴’는 사용 맥락이 달라 분석가가 따로 봅니다 → 다르면 분리(click_btnclick_tabclick_gnb).
  2. KPI에 직접 영향을 주는 ‘결과’ 행동인가? 회원가입·구매·로그인·문의 제출 같은 비즈니스 마일스톤은 별도 이벤트(주요이벤트, 의미론적 이름)로.
  3. 두 행동을 ‘합쳐서 본 적이 있나/볼 가능성이 있나’? 합쳐 보고 싶으면 같은 이벤트로(매개변수로 구분). 절대 합치지 않을 별개 행동이라면 분리.
  4. 매개변수만으로 구분하기 어려운가? 같은 매개변수 키에 너무 많은 종류의 값이 들어가 분석가가 헷갈리면 분리하는 게 낫습니다. 반대로 btn_name 같은 단일 키로 100가지 버튼을 구분해도 무리 없으면 매개변수 그대로.
  5. 새 이벤트로 만들면 GA4 한도가 부담되지 않나? 이벤트 이름은 한 속성당 약 500개, 그중 의미 있게 분석할 수 있는 건 훨씬 적습니다. 비슷한 행동을 50개로 늘리는 결정은 ‘이게 정말 필요한가’를 한 번 더 묻고.

다섯 질문 중 분리할 명백한 근거가 두 개 이상이 아니라면 — 같은 이벤트로 두고 매개변수로 차이를 두는 쪽이 거의 항상 안전합니다.

GA4 한도 관점

세분성 판단은 GA4의 운영 한도와도 직결됩니다. 한도를 안 후 결정 기준을 다시 보면 ‘왜 이벤트는 적게, 매개변수는 풍부하게’가 자연스럽게 따라옵니다.

한도 항목상한선(표준 속성 기준)세분성 결정에 미치는 영향
맞춤 이벤트 이름500개/속성이벤트를 잘게 쪼개면 빠르게 닳습니다. 위치·맥락별 이벤트 명을 양산하면 1년 안에 도달.
이벤트당 매개변수25개매개변수를 풍부하게 — 다만 한 이벤트가 25개를 다 쓸 일은 거의 없습니다. 평균 5~10개가 자연스러움.
맞춤 측정기준(이벤트 범위)50개‘보고서에서 이름으로 골라 볼’ 매개변수만 등록. 보내는 매개변수와 등록하는 매개변수는 별개.
맞춤 측정기준(사용자 범위)25개회원 등급·가입 방식 같은 사용자 속성용.
맞춤 측정기준(아이템 범위)10개가장 빠듯 — 전자상거래 items 안 사용자 정의 항목은 신중히.

정확한 한도는 표준/360 속성에 따라 다르고 시기별 정책으로 조정되므로 GA4 공식 문서로 한 번 확인하는 게 좋습니다 — 본 표는 일반적인 설계 의사결정을 도울 어림수입니다.

자주 묻는 질문

회원가입 버튼만큼은 따로 이벤트를 두는 게 자연스러워 보이는데요?

회원가입은 ‘버튼 클릭’이 아니라 ‘회원가입 완료’가 KPI라 — 추천 이벤트인 sign_up을 ‘완료 시점’에 별도로 보냅니다. 버튼 클릭은 그냥 일반 click_btn이고, btn_name="회원가입" 매개변수로 충분합니다. ‘버튼 클릭’과 ‘가입 완료’는 종(種)이 다른 행동이라 분리, ‘회원가입 버튼’과 ‘다른 버튼’은 같은 종이라 매개변수로 — 가 원칙입니다.

같은 GNB가 페이지마다 위치가 조금 다르면 어떻게 하나요?

이벤트는 click_gnb 하나, 위치는 page_location(자동) 또는 gnb_position 매개변수로 처리합니다. 페이지마다 이벤트 이름을 다르게 만들면(click_gnb_home, click_gnb_category…) 그 즉시 ‘너무 잘게’의 함정에 빠집니다.

btn_name에 들어가는 값이 너무 많아지면(수십·수백 종) 문제 아닌가요?

값의 개수 자체는 GA4가 문제 삼지 않습니다(GA4 보고서의 ‘기타’ 그룹으로 묶이는 임계는 있지만 BigQuery로는 다 보임). 다만 사용자 입력 텍스트가 그대로 들어가면(같은 버튼인데 띄어쓰기·구두점만 다른 값이 양산) 분석이 흐려집니다 — 그래서 btn_name의 값을 운영 단계에서 정규화(공통 표기로 통일)하는 작업이 필요합니다.

너무 뭉치기(click 하나)는 왜 그렇게 안 좋다고 보나요?

두 가지 — ① GA4 보고서·탐색에서 ‘이벤트 이름’이 가장 기본 측정기준인데, 이름이 모두 click이면 보고서가 평평해집니다(매개변수를 매번 측정기준으로 추가해야 함). ② 향상된 측정의 ‘아웃바운드 클릭’이 이미 click이라는 이름을 쓰고 있어, 우리 클릭과 섞입니다. 그래서 본 위키는 항상 click_대상 형태로(click_gnb, click_btn 등) 두는 걸 권장합니다.

‘적정 세분성’의 정답은 사이트마다 다른가요?

네 — 그래서 ‘복잡미묘’합니다. 일반적인 원칙(이벤트는 적게·매개변수는 풍부하게, UX 요소 유형까지만 이벤트로 분리)을 따르면 대부분 맞지만, 사이트의 분석 깊이·운영 인력·KPI 정의에 따라 미세 조정이 필요합니다. 한 가지 안전한 출발선 — 처음에는 보수적으로 ‘조금 더 합치는’ 쪽으로 시작하고, 운영하면서 ‘분리하지 않아 불편한 지점’이 발견될 때 분리합니다. 일단 만든 이벤트를 합치는 것보다 합쳐 둔 이벤트를 나중에 분리하는 게 훨씬 쉽습니다.

매개변수가 25개를 넘어가면 어떻게 하나요?

현실적으로 한 이벤트에 25개를 다 채울 일은 드뭅니다 — 평균 5~10개가 자연스럽습니다. 만약 25개를 넘는다면 그 이벤트는 ‘사실 다른 종류의 행동들이 한 이름에 욱여넣어진’ 상태일 가능성이 높습니다. 그때는 이벤트를 종류별로 분리하는 게 답입니다(예: click_* 하나에 모든 정보를 담지 말고 click_btn·click_tab·click_gnb로 나누기).

이 문서가 도움이 되셨나요?