이벤트 이름과 표기법

이벤트 이름은 결국 사람이 짓고, 사람이 입력합니다. 같은 행동이 사람마다 다른 모양으로 적히면 GA4는 모두 ‘다른 이벤트’로 인식하므로, 한 가지 약속을 정해 두지 않으면 보고서가 흩어집니다. 이 글은 허들러스의 이벤트 이름 패턴 — [행위]_[대상] — 과, GA4 표준 표기법인 snake_case를 왜·어떻게 쓰는지를 정리합니다.

이름 패턴 — [행위]_[대상]

이벤트 이름은 두 조각으로 만듭니다. 앞쪽에는 고객의 ‘행위’를 나타내는 동사가, 뒤쪽에는 그 행위의 ‘대상’이 되는 명사가 들어가고, 두 조각 사이를 언더바(_)로 잇습니다.

click_gnb행위 (동사)click · view · submit · play · search대상 (명사)gnb · btn · tab · popup · video잇는 글자
앞은 ‘무엇을 했나(행위)’, 뒤는 ‘무엇에 대해(대상)’ — 두 조각을 언더바로 잇는 단순한 규칙 하나로 이벤트 이름의 90%가 결정됩니다.
이벤트 이름행위(앞)대상(뒤)의미
click_gnbclickgnb글로벌 내비게이션의 어떤 항목을 클릭함
click_btnclickbtn일반 버튼·CTA를 클릭함
click_tabclicktab탭을 전환함
view_itemviewitem상품 상세 페이지를 봄(추천 이벤트)
submit_surveysubmitsurvey설문을 제출함
play_videoplayvideo영상 재생을 시작함

이 패턴의 장점은 단순합니다 — 이벤트 목록만 봐도 ‘무엇을 한 것’인지 즉시 보이고, 같은 행위끼리(모든 click_*) 또는 같은 대상끼리(모든 *_gnb) 묶어서 분석할 수 있습니다. 동사·명사 어휘를 어떻게 좁혀 둘지에 대한 규약은 별도 글(‘이벤트 이름 짓는 규칙’)에서 더 자세히 다룹니다.

왜 ‘표기법’이라는 게 필요한가?

이벤트 이름은 사람이 짓고, 사람이 코드/태그에 입력합니다. 그런데 컴퓨터는 글자를 ‘하나하나 정확히’ 비교합니다. 사람 눈에는 같아 보이는 두 이름이 GA4에는 완전히 다른 이벤트로 들어옵니다.

‘GNB 클릭’이라는 한 가지 행동을, 한 사이트의 여러 사람이 각자 다른 식으로 적었다고 해 봅시다.

같은 의미 — “GNB 클릭”clickgnbclick_gnbclickGnbClick-GnbGA4: “4개의 다른 이벤트입니다”· clickgnb 1,284 건· click_gnb 842 건· clickGnb 317 건· Click-Gnb 98 건→ ‘GNB 클릭 총합’을 보려면 4개를 다 더해야 함사람 눈엔 같은 의미. 시스템 눈엔 전부 다른 이름.
한 회사 안에서 표기법 약속이 없으면 같은 행동이 여러 이름으로 흩어지고, ‘무엇을 합쳐서 봐야 하는지’를 사람이 매번 정리해야 합니다. 합치다 빠지는 항목이 생기면 그 자체로 분석 오류.

대표 표기법 — snake / camel / kebab

같은 두 단어 ‘click gnb’를 각 표기법으로 옮기면 다음과 같이 달라집니다.

snake_case (GA4 표준)

click_gnb

띄어쓰기 자리에 언더바(_)를 넣고, 글자는 모두 소문자. Python·SQL·BigQuery에서 표준.

camelCase

clickGnb

두 번째 단어부터 첫 글자만 대문자. JavaScript·Java 변수/메서드에서 표준.

kebab-case

click-gnb

띄어쓰기 자리에 하이픈(-). URL·CSS 클래스명에선 표준 — GA4 이벤트 이름에선 비권장(아래 ‘기술 규칙’ 참고).

PascalCase

ClickGnb

모든 단어 첫 글자 대문자. 클래스명·React 컴포넌트에서 표준 — 이벤트 이름엔 거의 안 씀.

각 표기법은 어느 분야에서 출발했느냐의 차이일 뿐, 정답은 없습니다. 다만 한 시스템 안에서는 한 가지로 통일하는 것이 정답이고, GA4 환경에서는 그 한 가지가 snake_case입니다.

왜 GA4는 snake_case인가

GA4의 자동 수집·향상된 측정·추천 이벤트가 모두 snake_case로 정의되어 있습니다 — page_view, session_start, first_visit, sign_up, add_to_cart, begin_checkout, view_item… 우리가 만드는 맞춤 이벤트도 같은 모양을 따르는 것이 자연스럽습니다.

이유내용
GA4 표준이 그렇게 되어 있음자동/추천 이벤트와 맞춤 이벤트가 같은 표기법이라야 보고서에서 ‘이것은 자동 이벤트, 저것은 우리가 만든 이벤트’의 시각적 일관성이 유지됩니다.
BigQuery·SQL 친화GA4 → BigQuery 내보내기를 켜면 이벤트 이름이 그대로 컬럼 값으로 들어갑니다. SQL에서 대소문자 섞인 식별자는 따옴표 처리가 필요해 쿼리가 지저분해지지만, 모두 소문자면 그런 부담이 없습니다.
오탈자 노출 최소화‘대소문자만 다른’ 실수(Click_Gnb vs click_gnb)가 사라집니다. 모두 소문자이므로 사람의 손이 헷갈릴 여지가 줄어듭니다.
한국어 가독성한국어를 모국어로 쓰는 사람의 눈에는 click_gnbclickGnb보다 단어 경계가 명확히 보입니다(언더바가 시각적 공백 역할).

이벤트 이름의 기술 규칙

GA4가 요구하는 기술적 제약 + 사내 규약을 한 표로 정리합니다.

규칙GA4 공식 명세사내 규약(허들러스)
시작 문자문자로 시작 (숫자·언더바·기호로 시작 금지). 시작이 잘못되면 GA4가 이벤트를 무시.영문 소문자로 시작
허용 문자문자(영문·다국어 모두 포함), 숫자, 언더바(_). 공백·특수문자 금지.영문 소문자·숫자·_
하이픈(-)공식 미허용. 일부 환경에서 Google이 자동으로 _로 치환하지만 보장되지 않음.아예 안 씀(자동 치환 의존 회피)
한글 등 비영문기술적으로 허용(‘non-English letters’ 명시).사용 안 함 — UTF-8에서 한 글자 3바이트라 메모리·전송 효율↓, 한·영 전환과 받침 입력으로 오탈자 확률↑, BigQuery·SQL·URL 처리 부담
대소문자대소문자 구분(case-sensitive). Click_Gnbclick_gnb는 다른 이벤트.모두 소문자(대소문자 실수 원천 차단)
길이40자 이내. 초과분은 잘림(다국어도 한 글자당 1자로 계산).의미가 통하는 가장 짧은 이름
예약 접두사ga_ · google_ · firebase_로 시작 금지. 위반 시 GA4가 무시할 수 있음.동일
개수한 속성당 고유 이벤트 이름 약 500개까지(맞춤 이벤트 기준).‘분석에 쓸 것’ 위주로 설계

자주 묻는 질문

clicktap을 구분해야 하나요?

본 위키는 웹·앱 모두 click으로 통일합니다. 모바일 환경에서도 ‘탭’이라는 행동이 결국 ‘클릭’과 분석상 같은 의미를 가지기 때문에, 두 단어를 섞어 쓰면 합산할 때마다 불편해집니다. (구분이 꼭 필요하면 매개변수에 device_type을 함께 보내는 방식을 권장합니다.)

동사 종류는 몇 개나 쓰면 적당한가요?

본 위키는 5개로 좁혀 둡니다 — click, view, submit, play, search. 그 외의 행동도 대부분 이 다섯 중 하나로 분류됩니다(select_tab 대신 click_tab, open_popup 대신 click_popup). 자세한 동사 어휘는 ‘이벤트 이름 짓는 규칙’ 글에서 다룹니다.

패턴을 벗어나는 이벤트도 있나요?

네 — GA4 추천 이벤트sign_up·purchase·add_to_cart처럼 ‘의미론적 이름’(동사 단독·동사+대상이 자유 형태)을 씁니다. 추천 이벤트는 GA4가 이미 이름을 정해 둔 영역이라 본 위키의 [행위]_[대상] 패턴을 강제하지 않습니다 — 추천 이벤트는 그 이름 그대로 쓰는 게 표준입니다(→ GA4 이벤트의 종류).

이름에 한글을 넣으면 안 되나요?

‘기술적으로 안 되는 것’은 아닙니다 — GA4 공식 명세는 이벤트 이름에 ‘English and non-English letters’를 모두 허용한다고 명시하고 있어, click_핫딜 같은 이름도 통과 자체는 됩니다. 다만 실무에서는 권장하지 않습니다:

  • 메모리·전송 효율 ↓ — 한글은 UTF-8 기준 한 글자당 3바이트(UTF-16에선 2바이트지만 GA4·BigQuery·웹은 UTF-8 표준). 이름·인덱스·로그 어디에 들어가든 영문보다 부피가 큽니다.
  • 오탈자 확률 ↑ — 한·영 키보드 전환과 받침이 있는 조합형 한글 입력 특성상, 사람이 같은 이름을 매번 정확히 적기 어렵습니다.
  • 운영 부담 ↑ — BigQuery SQL·URL 인코딩·외부 분석 도구 연동 단계마다 별도 처리가 필요해 유지보수 손이 더 갑니다.

그래서 이름은 영문 소문자로만 만들고, 한글 콘텐츠(예: ‘핫딜’이라는 메뉴 이름)는 매개변수 값으로 보냅니다 — 예: click_gnb + gnb_name="핫딜". 이름은 ‘무엇을 했나’의 유형까지만, 한국어 콘텐츠는 값으로 — 라는 분리가 핵심입니다.

이미 운영 중인 사이트에 표기법이 섞여 있으면 어떻게 하나요?

두 가지 동시 처리 — ① 신규 이벤트는 무조건 snake_case로 통일하고, ② GA4의 ‘이벤트 수정’ 기능으로 기존의 clickGnb·ClickGnb 같은 변형을 click_gnb로 매핑해 줍니다. 과거 데이터까지 소급되지는 않지만, ‘앞으로의 데이터는 한 이름으로 모이게’ 만들 수 있습니다.

왜 kebab-case는 안 쓰나요? — 하이픈도 받긴 받지 않나요?

받는 경우도 있고, 안 받는 경우도 있어 ‘일관되지 않음’이 문제입니다. GA4 공식 명세에는 허용 문자가 letters · digits · underscores로 한정되어 있어 하이픈은 공식 미허용입니다. 다만 실제 동작상 Google이 하이픈을 자동으로 언더바로 치환해 받아 주는 사례가 있어 — click-gnbclick_gnb로 바뀌어 들어올 수 있습니다. 이 자동 치환은 보장된 동작이 아니므로, ‘하이픈이 항상 안전하다’고 가정하면 곤란합니다.

그리고 보장되더라도 snake_case가 더 편합니다 — GA4 자동/추천 이벤트가 모두 snake_case라 우리 맞춤 이벤트도 같은 스타일을 따르는 게 시각적으로 일관되고, BigQuery SQL에서도 하이픈 식별자는 따옴표 처리가 필요해 번거롭습니다. 그래서 본 위키는 “하이픈 안 됨”보다 “snake_case 하나로 통일”이라는 표현을 씁니다.

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