개발 slecs

결제대행사 콜백이 봇 필터에 막혀 정산 PENDING이 쌓인 문제 해결

목차

외부 결제대행사 콜백이 차단당했음

이커머스 운영 중에 결제대행사 콜백이 봇 차단 필터에서 4xx로 떨어지는 사고 발생. 사용자 결제는 정상 완료됐는데 콜백이 막히니까 결제 플랫폼 내부 상태가 PENDING에서 안 넘어감. 정산 화면 보다가 발견했으니 운영 모니터링이 한 박자 늦은 것도 같이 발견됨.

원인 파악

  • 봇 차단 필터를 외부 노출 API 경로 전체에 일괄 적용해두고 잊고 있었음
  • 결제대행사 콜백은 자체 헬스체크용 UA로 와서 봇 점수 임계치를 넘김
  • 콜백 인증은 서명 헤더 기반인데, 필터에서 먼저 잘리니까 서명 검증 자체가 호출되지도 않음

차단 로그를 까봤는데 분기별 라벨링이 없어서 "왜 막혔는지" 분류가 안 됨. UA 점수인지 IP 평판인지 헤더 누락인지 구분이 안 가서 시간 더 까먹음.

수정 방향

  • 콜백 전용 경로를 필터 화이트리스트에 추가
  • 화이트리스트 통과한 요청은 서명 검증 로직으로 우회
  • 차단 카운터에 reason 필드 추가해서 다음 사고 때 즉시 분류 가능하도록

의사코드로 정리하면 이런 흐름.

if (콜백_경로_매칭) {
    서명_검증_또는_401()
    chain.doFilter()
    return
}
봇_점수_평가()

결과

항목 변경 전 변경 후
콜백 차단율 약 12% 0%
PENDING 잔여 건 일 30건 0건
평균 응답 80ms 75ms
운영 알람 일 3건 0건

배포 후 5일간 누락 케이스 0건. 결제대행사 측에 콜백 IP 대역도 한 번 더 받아두기로 함.

회고 포인트

  • 보안 필터를 한 곳에 몰빵하면 외부 트래픽 분기를 빠뜨리기 쉬움. "외부에서 들어오는 콜백"은 사용자 트래픽이랑 보안 정책이 달라야 함
  • 차단 사유를 라벨링 안 하면 사고 분석 시간이 두 배로 늘어남. 카운터/로그에 reason은 무조건 박아두기
  • 파트너 연동 늘어날수록 "필터 예외 목록"이 늘어나는 구조 자체가 안티패턴 같음. 다음 분기에 인증 게이트를 별도 체인으로 빼는 리팩터링 검토 예정
  • 정산 모니터링이 사고 감지를 늦췄다는 게 더 뼈아픔. 콜백 지연 알람부터 붙일 것

다음

댓글 0

첫 댓글 달아줘.