질문부터 드리겠습니다. 당신의 매출 집계 스크립트는 환불을 어떻게 세고 있습니까?
저는 이 질문을 스스로에게 한 적이 없었습니다. 매출 리포트는 돌아가고 있었고, 숫자가 나왔고, 그 숫자로 판단을 했습니다. 앱이 40개가 넘으면 "어디에 시간을 쓸까"를 감이 아니라 매출로 정하게 되는데, 그 입력이 이 스크립트였습니다.
2026-08-26에 퍼널을 다시 보다가, 28일 창의 매출이 두 배 넘게 틀렸다는 걸 알았습니다.
필터 한 줄
집계 스크립트는 판매 리포트를 행 단위로 읽고 이렇게 계산합니다.
total = proceeds * units
if total <= 0:
continue의도는 알겠습니다. 금액이 0인 행 — 무료 다운로드, 체험 시작 같은 것 — 을 건너뛰려던 겁니다. 실제로 그런 행이 대부분이라 이 필터는 매일 정상적으로 일했습니다.
그런데 환불은 units = -1 인 행으로 옵니다. 수량이 음수니까 total 도 음수이고, total <= 0 은 그 행을 0인 행과 똑같이 취급해 버립니다. 즉 이 스크립트는 결제만 세고 환불은 못 본 척하는 게 아니라, 환불이라는 개념 자체를 갖고 있지 않았습니다.
숫자
2026-07-28 ~ 08-24 창을 다시 돌렸습니다.
리포트 값 : $73.28
실제 값 : $10.29차이는 $62.99인데, 그 전부가 한 건이었습니다. Sage 연간 구독 1건, 호주, 95.45 AUD. 08-14에 결제됐고 08-15에 환불됐습니다. 하루입니다.
이 한 건이 살아 있는 동안, 리포트에서 Sage는 플릿 전체 1위 매출 앱이었습니다. 다른 앱들과 자릿수가 다르니 자연스럽게 "여기에 뭔가 있다"는 결론으로 갔습니다.
환불 행을 살리고 나면 그 창의 실제 순매출은 이렇습니다.
- Zone 2 월간 1건 — $3.50
- Quieta Pro 월간 2건 — $6.79
끝입니다. 4주 동안 세 건이고, 셋 다 월간입니다. 42개 앱을 113일에 냈고 전체 매출은 $69.82였다에서 정리한 그림과 정확히 같은 방향이고, 오히려 더 얇습니다.
여기서 당신이라면?
값이 두 배 넘게 틀렸다는 걸 알았을 때, 선택지가 둘입니다.
- 이번 창의 숫자를 손으로 고쳐서 쓴다.
- 지금까지 이 스크립트로 내린 판단들을 되짚는다.
1번이 훨씬 빠르고, 사실 결과 보고에는 그걸로 충분합니다. 하지만 이 스크립트의 출력은 리포트가 아니라 우선순위였습니다. 잘못된 1위는 그 자체로 몇 주치 작업 방향입니다. 저는 2번을 해야 했습니다.
고친 것과, 고친 뒤에 보이는 것
수정은 한 글자입니다.
if total == 0:
continue이제 부호가 보존되고, 결제와 환불이 같은 창 안에서 상쇄됩니다. 그리고 부호를 살리자 읽는 법이 하나 생겼습니다. 어떤 앱의 행에서 거래 수가 0인데 기간이 2일이면, 그건 매출이 없는 게 아니라 결제 한 건과 환불 한 건이 짝을 이룬 것입니다. 합쳐서 0이 되기 때문에 이전 스크립트에서는 아예 아무 흔적도 남지 않던 사건입니다.
이게 이 함정의 진짜 성격입니다. 환불을 버리면 매출이 부풀 뿐 아니라, 환불이 있었다는 사실 자체가 데이터에서 사라집니다. 24시간 만에 되돌아간 결제는 그냥 결제로 남습니다.
자가진단 3개
- 매출 집계에서
<= 0이나> 0같은 필터를 쓰고 있다면, 그 자리에 음수 행이 오는 경우가 있습니까? (환불·차지백·조정) - 리포트 상위 앱 한 개를 골라 원본 리포트에서 해당 행을 직접 열어보십시오. 집계값과 원본 행 합이 일치합니까?
- 기간 합계를 인용할 때, 그게 총 결제액인지 순매출인지 구분해서 말하고 있습니까?
솔직한 부분
이 결함이 특별히 교묘하지는 않습니다. 코드를 읽으면 바로 보입니다. 문제는 아무도 읽지 않았다는 것이고, 읽을 이유가 없었다는 것입니다. 스크립트는 매일 성공했고, 값이 그럴듯했고, 값이 그럴듯하면 검산을 안 하게 됩니다. 제 판정 기준은 노출 1회를 죽이려 했습니다에서와 같은 형태입니다 — 코드는 잘 돌고, 판정 기준만 조용히 틀립니다.
그리고 정정된 숫자가 더 정직합니다. $73은 "뭔가 되고 있다"처럼 읽히고 $10.29는 아닙니다. 4주에 세 건이면 제품이 아니라 유통의 문제이고, 그건 코드로 푸는 문제가 아닙니다.
지금 딱 하나만 해보세요. 매출 스크립트에서 행을 버리는 조건문을 찾아, 그 조건이 음수도 버리는지 확인해 보시기 바랍니다. 저는 그 한 줄 때문에 한 달을 잘못 읽고 있었습니다.