광고비 이상감지 알람 설계: 5분마다 무엇을 볼 것인가
야간과 주말에 광고비가 새는 것을 막는 모니터링을 직접 설계할 때 확인할 지표, 임계값, 알람 피로를 줄이는 방법을 정리했습니다.
주말 새벽에 결제 모듈이 장애를 일으켰는데 광고는 계속 돌았고, 월요일 아침에야 알았다는 이야기는 대행사에서 드물지 않습니다. 이런 사고는 사람이 24시간 대시보드를 볼 수 없다는 구조적 한계에서 나옵니다. 사람이 하던 확인을 기계가 주기적으로 하게 만드는 것이 이상감지 알람입니다. 이 글은 직접 만들 때 무엇을 정해야 하는지 순서대로 정리합니다.
무엇을 볼 것인가
지표를 다섯 갈래로 나누면 빠뜨리는 것이 줄어듭니다.
- 지출 속도: 하루 예산 대비 현재까지의 소진율이 평소 같은 시간대보다 지나치게 빠르거나 느린지.
- 성과 급락: ROAS, CPA, 클릭률이 최근 기준선보다 크게 나빠졌는지.
- 전환 0건: 지출과 클릭은 있는데 전환이 한 건도 없다면 광고가 아니라 추적이나 사이트 문제일 가능성이 큽니다.
- 랜딩 상태: 활성 소재가 보내는 모든 랜딩 URL의 응답 코드와 응답 시간, 핵심 요소(결제 버튼 등)의 렌더링.
- 결제와 주문 오류: 결제 API 오류율, 주문 생성 실패율.
특히 3번은 두 가지 원인을 한 번에 알려주는 신호라 유용합니다. 광고비가 소진되는데 전환이 0이면 먼저 사이트와 추적을 의심합니다.
주기는 지표마다 다르게
"5분마다"라는 말은 지표마다 다르게 해석해야 합니다.
- 빠른 지표: 지출, 노출, 클릭은 매체 API에서 비교적 빨리 받을 수 있고, 랜딩 상태 확인은 분 단위로 자체적으로 돌릴 수 있습니다. 3~5분 주기가 맞습니다.
- 느린 지표: 전환과 ROAS는 매체 쪽 집계가 지연되고 이후에 보정되기도 합니다. 5분 단위로 보면 정상인데 경보가 울릴 수 있어, 1~3시간 같은 넓은 창으로 비교해야 합니다.
매체 API에는 호출 한도가 있으므로 광고주와 캠페인 수가 늘어나면 호출 간격과 요청 묶음을 조절해야 합니다.
기준선과 임계값
"ROAS 200% 미만이면 경보"처럼 고정값을 쓰면 요일과 시간대에 따라 오탐이 많아집니다. 다음 방식이 더 안정적입니다.
- 같은 요일, 같은 시간대의 과거 4주 값을 기준선으로 삼습니다.
- 기준선 대비 비율(예: 60% 이하)과 절대 규모(예: 지출이 일정 금액 이상일 때만)를 함께 조건으로 둡니다. 지출이 작은 구간의 요동은 무시합니다.
- 연속으로 같은 조건이 몇 번 이어졌을 때만 경보를 보냅니다.
# 지출 속도 점검 의사 코드
expected = baseline_spend_by_hour[weekday][hour]
if spend_today_so_far > expected * 1.8 and spend_today_so_far > MIN_AMOUNT:
alert("지출 속도 이상", level="high")
알람 피로를 줄이는 법
경보가 너무 자주 울리면 사람들은 무시하기 시작합니다.
- 심각도 등급: 즉시 확인이 필요한 것(랜딩 장애, 전환 0건)과 업무 시간에 보면 되는 것(성과 소폭 하락)을 채널 또는 멘션 방식으로 나눕니다.
- 중복 억제: 같은 경보는 일정 시간 안에 한 번만 보냅니다.
- 복구 알림: 정상으로 돌아오면 알려서 "아직 문제인지" 묻지 않게 합니다.
- 원인 힌트: "ROAS 급락"만 보내지 말고, 같은 시간의 랜딩 응답 코드와 결제 오류율을 함께 붙입니다. 담당자가 처음 5분에 할 일이 줄어듭니다.
슬랙으로 보낸다면 Incoming Webhook에 아래 같은 메시지를 보내는 정도로 시작할 수 있습니다.
{
"text": "[긴급] 광고 지출은 있으나 최근 1시간 전환 0건",
"attachments": [{
"fields": [
{ "title": "캠페인", "value": "가을 신상품 전환", "short": true },
{ "title": "랜딩 상태", "value": "결제 페이지 502", "short": true }
]
}]
}
자동 중지는 신중하게
경보와 함께 광고를 자동으로 멈추는 기능은 매력적이지만 오탐의 비용이 큽니다. 멀쩡한 캠페인을 멈추면 노출과 학습 기간을 잃습니다. 권장 방식은 다음과 같습니다.
- 기본값은 알림과 사람의 확인입니다.
- 자동 중지는 랜딩이 연속으로 5xx를 반환하는 것처럼 오탐 가능성이 매우 낮은 조건에만 씁니다.
- 자동 중지가 실행되면 누가 언제 어떻게 재개하는지 절차를 먼저 정해 둡니다.
운영 체크리스트
- 경보를 받는 담당자와 대체 담당자를 정했는가
- 경보마다 처음 확인할 곳을 적은 짧은 절차서가 있는가
- 한 달에 한 번 오탐과 놓친 사고를 돌아보고 임계값을 조정하는가
- 매체 API 토큰의 만료와 권한 변경을 감지하는가