자동화 slecs

송금 대사 배치로 원장·결제·큐 불일치 자동 감지

목차

연락처 송금 대사 배치를 만들게 된 이유

운영 들어간 지 한 달쯤 됐을 때 파트너 한 곳에서 "어제 송금 건 합계가 안 맞는다"는 문의가 들어왔음. 큐에 쌓인 송금 요청, 결제대행사로 넘긴 실제 출금, 우리 원장 잔액 차감 — 이 셋이 따로 노는 순간이 가끔 있다는 걸 그제서야 발견함. 사람이 매일 아침 SQL 돌려서 맞추고 있었는데 이게 지속 가능하지 않다고 판단해서 일일 대사 배치를 박기로 했음.

배치 설계에서 제일 고민했던 부분

처음엔 단순하게 "전날 0시~24시 송금 큐 vs 출금 결과 조인" 으로 짜려다가 다음 케이스들 때문에 갈아엎었음.

  • 자정 직전에 들어와서 새벽 1시에 처리된 건 (날짜 경계 문제)
  • 결제대행사 응답 지연으로 우리는 SUCCESS 인데 상대는 PENDING
  • 부분 환불로 원금이 쪼개진 건
  • 같은 연락처에 같은 금액이 두 번 찍혀서 중복 의심으로 보류된 건

결국 큐 기준 시각이 아니라 "확정 시각" 으로 윈도우를 잡고, 미확정 건은 별도 버킷으로 빼서 N+1 일에 다시 검사하도록 바꿈. 이 한 줄 정책 바꾸는 데 반나절 날아갔음.

버킷 판정 시점 액션
정합 T+1 06:00 패스, 카운트만 집계
불일치 T+1 06:00 즉시 텔레그램 경보
미확정 T+1 06:00 보류, T+2 재검사
미확정 2회 T+2 06:00 사람한테 에스컬레이션

텔레그램 리포트 붙이기

운영자가 메일 안 봄. 슬랙도 채널 너무 많아서 묻힘. 결국 텔레그램 봇이 제일 빨리 눈에 들어온다는 결론. 매일 아침 06:05 에 요약 리포트 한 통, 불일치 발견 시 즉시 한 통, 두 종류로 분리했음.

[일일 대사] 2026-03-14
정합: 1,284건 / 4.2억원
미확정: 3건 (재검사 대기)
불일치: 0건

요약 메시지는 의도적으로 5줄 이내 로 제한함. 길어지면 안 읽음.

삽질했던 것 두 개

  • 관리자 화면에서 수동으로 대사 재실행 버튼 만들었는데 권한 체크 빼먹어서 개발용 엔드포인트랑 권한 레벨이 똑같이 나가버림. 코드 리뷰에서 잡혀서 바로 분리. 운영 영향은 없었지만 식겁함.
  • 텔레그램 토큰을 처음에 설정 파일에 박아둠. 당연히 안 되는 거 알면서 "일단 돌려보고 옮기자" 했다가 그대로 PR 올라갈 뻔함. 시크릿 매니저 경유로 정리.

회고

대사 자동화는 "있으면 좋은 것" 이 아니라 사고 터지기 전에 박아둬야 하는 것 이라는 걸 다시 확인함. 사람이 SQL 로 맞추는 동안에는 어차피 사람이 놓친 건 영원히 안 보임. 기준 시각 정의가 가장 어려웠고, 알림 채널은 "가장 거슬리는 곳" 에 박는 게 답이었음.

다음

댓글 0

첫 댓글 달아줘.