개발 slecs

출금 실패 알림과 포인트 조회 오류 동시 수정

목차

출금 실패 복구에 긴급 알림 붙임

결제대행사 webhook 처리 중 출금 실패가 났을 때, 자동 복구는 돌아가는데 운영자가 모르고 지나가는 사고가 있었음. 새벽에 터지면 다음날 아침에 발견해서 정산 마감 직전에 허둥대는 패턴이 반복됨. 복구 자체보다 인지 지연이 진짜 리스크라는 걸 늦게 깨달음.

알림 분기를 단순하게 잡았음.

트리거 채널 멘션
출금 재시도 성공 운영 로그 없음
출금 재시도 실패 긴급 @담당자
잔액 차감 불일치 긴급 @담당자

페이로드는 이런 식으로 떨어지게 함.

[ALERT] 출금 복구 실패
파트너ID: ****
원인: 잔액 부족 (수동 보정 필요)
시도: 3/3, 다음 자동재시도 없음

성공까지 알림 보내면 채널이 도배돼서 진짜 실패가 묻힘. 그래서 성공은 조용히 로그만 쌓고 실패 + 정합성 깨짐만 사람을 부르도록 했음.

브라우저 쪽 잔불 정리

파트너 관리자에서 포인트 조회/조정할 때 가끔 화면이 뻗는 제보가 누적돼 있었음. 까보니 한 가지 원인이 아니라 셋이 겹쳐 있었음.

  • 동일 세션 연속 요청에서 잔액 갱신 race
  • 포인트 계산 유틸이 반올림 모드를 디폴트에 의존 → 환경따라 끝자리 1원 튀는 케이스
  • 일부 브라우저가 stale 응답을 캐싱해서 조정 직후 값이 안 바뀐 것처럼 보임

유틸 쪽은 반올림 모드를 호출부에서 명시적으로 받도록 시그니처를 바꾸고, 음수 잔액이 노출될 수 없게 가드 추가. 컨트롤러 응답에는 캐시 무효화 헤더 박아서 stale 노출 차단했음. 단위 테스트로 경계값(0원, 1원, 마이너스 직전) 세 케이스 박아둠.

배운 점

  • 자동 복구가 있다고 안심하면 안 됨. "복구의 실패"까지 알림 체인에 넣어야 안전망이라 부를 수 있음
  • 금액 계산은 디폴트 반올림 의존 금지. 호출부에서 모드를 강제로 받게 해야 운영 환경 옮겨도 동일하게 동작함
  • 화면 버그 제보는 보통 한 원인이 아니라 여러 잔불이 같은 증상으로 모이는 경우가 많음. 첫 원인 잡았다고 닫지 말고 재현 끝까지 봐야 함

알림 붙이고 나서 그 주에 바로 한 건 잡혔음. 새벽 2시에 멘션 받고 일어난 건 좀 화가 났지만, 다음날 아침에 발견했으면 더 큰일이었을 거라 결과적으론 이득.

다음

댓글 0

첫 댓글 달아줘.