수집 유실

Data Loss

개념

사용자의 행동 기록 일부가 차단이나 오류에 막혀 도착하지 못해, 집계된 숫자가 실제보다 적게 잡히는 문제입니다.

등장 배경

행동 기록을 모으기 시작한 팀은 처음 한동안 집계된 숫자를 사실로 씁니다. 가입 버튼을 누른 횟수가 620이면 620명이 눌렀다고 읽습니다. 기록이 남는다는 말과 전부 남는다는 말을 구분할 이유가 아직 없기 때문입니다.

구분이 필요해지는 건 같은 것을 재는 숫자가 둘이 될 때입니다. 광고 도구는 링크를 1,000번 눌렀다고 하는데 내부 집계에는 방문이 620으로 잡히고, 결제 서비스에는 승인이 48건인데 결제 완료 기록은 41건입니다. 어느 쪽이 맞는지를 두고 회의가 길어지는데, 대개 답은 한쪽이 틀린 게 아니라 한쪽에 도착하지 못한 몫이 있다는 것입니다.

페이지덱에서도 이 대화가 있었습니다. 현우가 집행한 광고의 클릭 수와 지현이 보는 유입 수가 30퍼센트 넘게 벌어졌습니다. 처음에는 광고 도구가 부풀린다고 의심했고, 다음에는 지현의 집계 쿼리를 다시 봤습니다. 둘 다 아니었습니다. 광고를 누른 사람 중 일부의 브라우저에서 기록을 보내는 스크립트 자체가 실행되지 않고 있었습니다.

수집 유실은 이 몫에 이름을 붙인 말입니다. 이름이 생기고 나서야 얼마나 빠지는지를 재고 감안해 읽을 수 있게 됩니다.

작동 방식

기록 한 줄은 사용자의 기기에서 만들어져 네트워크를 건너 수집 서버에 닿고 저장소에 적재됩니다. 유실은 이 네 구간 어디에서나 생깁니다.

  1. 만들어지기 전에 막힙니다. 광고 차단 프로그램이나 브라우저의 추적 방지 기능이 수집 스크립트를 아예 내려받지 못하게 합니다. 클라이언트 수집, 그러니까 사용자 기기에서 직접 기록을 보내는 방식에서 가장 큰 몫이 여기서 빠집니다.
  2. 보내는 도중에 끊깁니다. 사용자가 버튼을 누르고 바로 다른 페이지로 넘어가면 전송이 끝나기 전에 화면이 닫히고, 지하철에서 앱을 쓰다 신호가 끊기면 그 순간의 기록이 사라집니다.
  3. 받는 쪽에서 버려집니다. 수집 서버가 잠깐 멈추거나 한도를 넘기면 그 시간대의 요청이 통째로 들어오지 못합니다. 보내는 쪽에 재시도가 없으면 복구할 길이 없습니다.
  4. 적재 단계에서 걸러집니다. 속성 값의 형식이 정해진 것과 다르면 그 줄은 통과하지 못하고 따로 모이는데, 모인 것을 아무도 보지 않으면 없어진 것과 같습니다.

네 구간 중 손댈 수 있는 곳과 그렇지 않은 곳이 갈립니다. 3번과 4번은 서버와 적재 규칙을 고치면 줄어들지만, 1번과 2번은 사용자의 기기에서 일어나는 일이라 보내는 쪽에서 완전히 막을 방법이 없습니다.

곤란한 점은 줄어든다는 사실 자체가 아니라 고르게 줄지 않는다는 데 있습니다. 차단 프로그램을 쓰는 비율은 사용자층마다 다릅니다. 데스크톱 브라우저 이용자의 25퍼센트가 차단 프로그램을 깔아 뒀고 앱 이용자는 그렇지 않다면, 두 쪽을 나란히 놓은 표에서 데스크톱만 성과가 나쁜 것처럼 보입니다. 전체가 2할 줄어든 상황은 그래도 감안해 읽을 수 있지만, 한쪽만 줄어든 상황은 비교 자체를 틀리게 만듭니다.

쓰이는 곳

이 말이 실제로 오가는 자리는 숫자가 어긋난 이유를 따질 때입니다.

  1. 두 도구의 숫자를 맞출 때입니다. 광고 도구, 결제 서비스, 내부 집계가 같은 것을 다르게 셀 때 어느 쪽에 유실이 있는지부터 봅니다. 대개 사용자 기기에서 보내는 쪽이 적게 잡힙니다.
  2. 퍼널 분석을 읽을 때입니다. 단계별로 얼마나 빠져나가는지 보는 분석인데, 특정 단계의 기록만 유실이 크면 그 단계에서 사람이 이탈한 것처럼 보입니다. 결제 완료가 유독 낮게 나오는 경우는 실제 이탈보다 유실인 때가 많습니다.
  3. 광고 성과를 볼 때입니다. 어트리뷰션은 전환의 공을 어느 접점에 돌릴지 정하는 방식인데, 유입 기록이 빠지면 그 전환은 출처를 모르는 것으로 분류됩니다. 성과가 실제보다 낮게 나온 채널에 예산을 줄이는 판단이 여기서 나옵니다.
  4. 대응을 정할 때입니다. 돈이 걸린 기록은 서버 수집으로 옮깁니다. 요청을 처리한 서버에서 기록해 보내는 방식이라 차단에 막히지 않습니다. 나머지는 유실률을 주기적으로 재서 감안해 읽습니다. 결제 승인 건수처럼 기준이 되는 값과 대조하면 몇 퍼센트가 빠지는지 계산할 수 있습니다.

실무 용례

"광고 클릭이랑 유입이 30퍼센트 벌어지는데, 유실 아닐까요?"

두 숫자 중 한쪽에 도착하지 못한 몫이 있는지 확인하자는 말입니다.

"결제 완료 이벤트는 서버에서 보내는 걸로 바꿨어요."

돈이 걸린 기록만큼은 차단에 막히지 않는 경로로 옮겼다는 뜻입니다.

"이 수치는 유실 보정 전이라 실제보다 낮아요."

숫자를 그대로 비교하지 말고 빠진 몫을 감안하라는 경고입니다.

페이지덱은 앞의 사건 뒤에 유실률을 재는 방법을 하나 만들었습니다. 결제 서비스가 승인한 건수와 내부에 남은 결제 완료 기록을 매주 대조해, 둘의 차이를 그대로 유실률로 보기로 한 겁니다. 처음 잰 값은 14퍼센트였습니다.

그 뒤 결제와 가입처럼 돈과 계정이 걸린 기록은 서버에서 보내도록 옮겼고, 유실률은 3퍼센트 아래로 내려왔습니다. 화면 안에서만 일어나는 동작은 서버가 알 수 없으니 여전히 기기에서 보내고 있고, 지현은 그쪽 숫자를 볼 때 절대값 대신 주 단위 변화를 봅니다. 빠지는 비율이 매주 비슷하다면 변화의 방향은 믿을 수 있기 때문입니다.

흔한 오해

유실이 일정하게 일어나니 비율로 보면 안전하다고 여기기 쉽습니다. 분자와 분모가 같이 줄면 비율은 그대로일 것 같으니 그럴듯합니다. 하지만 빠지는 비율은 단계마다 다릅니다. 첫 화면을 여는 기록은 거의 다 도착하는데 결제 완료 기록은 두 자릿수로 빠지는 일이 흔하고, 그러면 전환율만 실제보다 낮게 나옵니다. 이 상태로 실험 결과를 읽으면 멀쩡한 개선안이 효과 없음으로 판정됩니다.

서버 수집으로 바꾸면 유실이 사라진다고 생각하는 것도 잦습니다. 차단에 막히지 않는다는 말이 전부 도착한다는 말처럼 들리기 때문입니다. 서버 쪽에서도 수집 서버 장애나 재시도 실패로 기록은 빠지고, 무엇보다 화면 안에서만 일어난 동작은 서버까지 오지 않아 아예 잡히지 않습니다. 옮겨서 얻는 것은 유실이 없는 상태가 아니라 유실이 사용자층에 따라 기울지 않는 상태입니다.

자주 헷갈리는 용어

용어무엇을 가리키는가수집 유실과의 차이
완결성있어야 할 줄과 칸이 실제로 채워져 있는 정도저장된 데이터를 재는 잣대라서 하루치가 비었다는 사실은 알려 주지만 원인은 말하지 않습니다. 수집 유실은 그 빈자리를 만든 원인 중 하나이고, 재는 자리가 저장소가 아니라 보내는 경로 쪽에 있습니다

같이 보면 좋은 페이지

  • 이벤트 수집

    유실은 수집 과정의 위험 갈래입니다. 무엇을 남길지 정하는 설계와 어디서 보낼지 정하는 방식이 앞에 있고, 그 선택이 유실의 크기를 정합니다

  • 이벤트

    빠지는 단위가 무엇인지 봅니다. 한 줄에 무엇이 담기는지 알아야 그 줄이 없을 때 무엇을 못 보게 되는지가 분명해집니다

마지막 업데이트 2026-09-16