이벤트
Event
개념
사용자가 제품에서 한 행동 하나를 누가 언제 무엇을 했는지로 남긴 기록 한 줄이며, 제품 지표 대부분이 이 줄에서 나옵니다.
등장 배경
제품이 얼마나 쓰이는지 알아보는 가장 오래된 방법은 총계를 세는 것이었습니다. 어제 몇 명이 들어왔는지, 이번 달에 몇 명이 가입했는지가 화면에 뜨고 그것으로 끝이었습니다. 숫자는 매일 갱신됐지만 다음에 무엇을 만들지 정하는 데는 쓸 수 없었습니다.
막히는 자리는 늘 같았습니다. 지현이 "무료로 쓰다가 유료로 넘어간 사람들은 넘어가기 전에 제품에서 뭘 했나요" 하고 물으면 답할 사람이 없었습니다. 가입자 수와 결제자 수는 있는데 그 사이에 무슨 일이 있었는지는 남아 있지 않았기 때문입니다. 답을 알려면 사용자에게 직접 전화를 거는 수밖에 없었습니다.
이벤트는 총계를 세는 대신 행동 하나하나를 벌어진 그 순간에 한 줄로 적어 두자는 발상입니다. 미리 정한 질문의 답만 숫자로 만들어 두는 게 아니라, 어떤 질문이 와도 답을 꺼낼 재료를 쌓아 둡니다. 총계는 이 줄들을 세면 언제든 다시 만들 수 있지만, 총계만 남겨 두면 그 안을 갈라 볼 방법이 없습니다.
작동 방식
이벤트 한 줄은 누가·언제·무엇을 세 칸으로 이뤄지고, 사용자 기기나 서버에서 만들어져 분석 도구로 보내지면서 쌓입니다.
- 누가 — 그 행동을 한 사람을 가리키는 사용자 식별자입니다. 이름이나 이메일이 아니라 계정마다 붙은 고유한 번호를 쓰고, 로그인 전에는 기기에 임시로 심은 값이 들어갑니다.
- 언제 — 그 일이 벌어진 시각입니다. 초 단위까지 남기는 이유는 날짜별 집계가 아니라 순서 때문입니다. 문서를 만든 다음에 공유했는지 그 반대인지는 이 값으로만 가려집니다.
- 무엇을 — 행동에 붙인 이름입니다.
document_shared처럼 대상과 동작을 붙여 짓습니다. 이 이름이 그 행동을 세는 열쇠라서, 같은 행동에는 화면이 달라도 같은 이름을 씁니다.
여기에 이벤트 속성이 덧붙습니다. 그 한 줄에 딸려 붙는 부가 정보로, 공유 방식이 링크 복사였는지 이메일 초대였는지를 함께 담습니다. 속성이 없으면 공유가 몇 번 일어났는지만 알 수 있고 어떤 경우에 더 많이 일어나는지는 알 수 없습니다.
이름과 속성은 심기 전에 정합니다. 트래킹 플랜은 어떤 행동을 어떤 이름과 속성으로 남길지 미리 적어 둔 문서이고, 네이밍 컨벤션은 이름 짓는 방식 자체를 통일해 둔 규칙입니다. 이 둘을 건너뛰면 같은 공유 행동이 웹에서는 doc_shared, 앱에서는 shareDocument 로 갈려 들어가고, 공유 횟수는 어느 쪽을 봐도 절반씩만 보입니다.
보내는 자리는 둘입니다. 클라이언트 수집은 브라우저나 앱에서 직접 보내 화면 안의 움직임까지 잡지만 광고 차단 프로그램에 막히면 도착하지 않고, 서버 수집은 서버에서 기록해 차단에 막히지 않지만 화면 안의 움직임은 놓칩니다. 그래서 돈이 걸린 이벤트는 서버에서, 화면 안에서만 벌어지는 이벤트는 클라이언트에서 보냅니다.
쓰이는 곳
쌓인 이벤트는 세 가지 방식으로 읽힙니다. 세는 것, 나누는 것, 순서대로 잇는 것입니다.
- 세기 — 같은 이름의 줄이 몇 개인지 셉니다. 대부분의 지표가 이렇게 만들어집니다. 하루에
document_created가 1,200줄 찍혔으면 어제 문서가 1,200개 만들어진 것이고, 식별자의 종류를 세면 몇 명이 만들었는지가 나옵니다. - 나누기 — 속성이나 사람을 기준으로 줄을 갈라 비교합니다. 공유 이벤트를 방식별로 갈라 보면 링크 복사 80퍼센트, 이메일 초대 20퍼센트 하는 식입니다. 요금제처럼 사람에게 붙어 유지되는 값인 유저 속성으로 가르면 무료와 유료 사용자의 차이가 보입니다.
- 잇기 — 같은 사람의 줄을 시간 순서로 늘어놓습니다. 가입한 줄, 문서를 만든 줄, 공유한 줄을 차례로 세우면 100명 중 62명이 문서를 만들고 19명이 공유했다는 그림이 나오고, 62에서 19로 떨어지는 구간이 다음에 손볼 자리가 됩니다.
세 번째가 등장 배경에서 막혔던 질문에 답하는 자리입니다. 다만 같은 사람의 줄에 같은 식별자가 붙어 있어야 이을 수 있습니다. 로그인 전과 후가 다른 값으로 남는 경우가 많아서, 그 둘을 한 사람으로 잇는 아이덴티티 병합을 따로 해 둡니다.
실무 용례
"그 버튼 이벤트가 아직 안 심겨 있어서 지금은 셀 수가 없어요."
기능은 나가 있지만 행동을 기록하는 코드가 빠져 있어 숫자를 만들 수 없다는 말입니다.
"이벤트 기준 숫자라 결제 원장이랑 3퍼센트쯤 차이 날 수 있습니다."
기록이 일부 도착하지 않아 실제보다 적게 잡힌다는 뜻입니다.
"이름이 둘로 갈려 있어서 합쳐서 봐야 합니다."
같은 행동이 다른 이름으로 심겨 있어 지금 화면의 숫자는 절반만 보여 준다는 뜻입니다.
페이지덱에서 새 기능을 만들 때는 화면 설계와 같은 자리에서 이벤트 이름을 정합니다. 지현이 이 기능에서 무엇을 알고 싶은지 적어 오면 태오가 어디에서 잡을 수 있는지 답하고, 이름과 속성을 맞춘 다음 개발에 들어갑니다. 기록을 나중에 붙이기로 하면 출시 첫 주가 통째로 비는데, 처음 쓴 사람들이 어디에서 멈췄는지가 가장 궁금한 시기가 그 첫 주입니다.
흔한 오해
일단 다 심어 두면 나중에 쓸 수 있다고 생각하기 쉽습니다. 기록은 많을수록 좋아 보이고 남기는 쪽이 안전해 보이기 때문입니다. 하지만 이름이 제멋대로이고 속성이 붙지 않은 줄은 쌓여 있어도 답을 주지 않습니다. 반년 뒤에 btn_click_2 가 어느 화면의 어느 버튼이었는지 아는 사람이 남아 있지 않으면 그 줄은 없는 것과 같습니다.
이벤트에 남은 숫자를 실제 횟수 그대로 믿는 것도 흔한 오해입니다. 기계가 자동으로 남긴 기록이라 사람의 실수가 끼어들 자리가 없어 보이기 때문입니다. 실제로는 차단 프로그램과 끊긴 네트워크 때문에 일부가 도착하지 않는 수집 유실이 늘 있습니다. 곤란한 점은 줄어든다는 사실보다 고르게 줄지 않는다는 데 있습니다. 차단 프로그램을 쓰는 사람이 특정 사용자층에 몰려 있으면 그 무리의 행동만 옅게 보입니다.
같이 보면 좋은 페이지
마지막 업데이트 2026-09-16