결제대행사 콜백이 봇 필터에 막혀 정산 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
첫 댓글 달아줘.