일기 slecs

입금 매칭 라우팅 개선으로 은행 통보 미매칭 70% 복구

목차

배경: 은행 통보 메시지 라우팅이 자꾸 어긋남

파트너 입금 매칭 파이프라인은 SMS/푸시로 들어온 은행 통보를 파싱해 은행별 핸들러로 보내는 구조임. 그런데 한 시중은행이 발신 번호 포맷을 살짝 바꿨는지, 그 시점부터 매칭률이 슬금슬금 떨어지기 시작함. 룰이 헤더 패턴 한 줄에만 의존하고 있어서, 통신사가 표기 방식을 손대거나 은행이 캠페인 문구를 끼우면 그대로 빠져나감.

운영 알람에선 "미매칭 누적 N건" 경고만 뜨는데, 막상 들여다보면 핸들러 선택 단계에서 이미 잘못 분기되고 있었음. 파서 단의 문제가 아니라 라우팅 단의 문제였던 거.

무엇을 바꿨나

  • 핸들러 레지스트리: 단일 매칭 → 우선순위 + 후보군 다중 매칭. 1순위가 confidence 낮으면 차순위까지 확인.
  • 파서 유틸: 발신 번호뿐 아니라 본문 키워드(은행명/계좌 마스킹 패턴)도 보조 시그널로 가산.
  • 추상 핸들러: 매칭 실패 시 즉시 폐기하지 않고 회복 큐로 적재. AI 복구 단계가 픽업.
  • 해당 은행 핸들러: 본문에 들어가는 광고성 문구/이모지 제거 후 슬롯 추출.
항목 이전 이후
라우팅 기준 발신 번호 1개 우선순위 + 본문 키워드
실패 처리 폐기 + 알람 회복 큐 → AI 슬롯 추출
임계값 없음 confidence 0.85 미만 사람 검토
미매칭 일평균 ~100건 ~30건
selectHandler(msg):
  candidates = registry.matchAll(msg.header)
  if candidates.empty: candidates = scanByBodyKeywords(msg.body)
  pick = candidates.sortBy(priority, score).first
  if pick.score < THRESHOLD: enqueue(recovery, msg)
  else handle(pick, msg)

AI 복구가 의외로 약발 받음

룰이 놓친 통보를 LLM이 받아서 슬롯(금액·잔액·계좌·시각)을 추출하게 했음. 미매칭 중 70%가 복구됨. 다만 환각으로 엉뚱한 파트너 계좌에 붙이는 케이스가 한두 건 나와서, confidence 임계 미달은 무조건 사람 큐로 빠지게 막아둠. 자동화는 좋은데, 자동화가 자신감 있게 틀리는 게 제일 무서움.

회고

  • 은행 통보 포맷은 "절대 안 바뀜"이 아니라 "조용히 바뀜". 모니터링은 매칭률 추세선까지 봐야 함.
  • 룰 + AI 하이브리드가 단일 룰보다 운영이 편함. 룰이 1차 방어, AI가 안전망.
  • 에러 처리 분기 안 짜두면 결국 새벽에 깨는 건 나임. 회복 큐 도입 후로 호출 빈도 체감 절반.

다음

댓글 0

첫 댓글 달아줘.