ASP.NET Core에서 결제 실패를 추측하던 일을 멈춘 방법 (무료 도구)
Source: Dev.to
결제 연동은 크게 오류를 내보내는 경우가 드뭅니다.
조용히 실패합니다. 웹훅이 도착하지 않고, 갑자기 새벽 2시의 프로덕션 로그를 디버깅하게 됩니다.
실제 결제 게이트웨이 연동(Worldpay)에서 이러한 문제를 겪은 뒤, 저는 ASP.NET Core에서 결제 이벤트 전용 중앙 로그 시스템을 구축했습니다.
실제 문제
대부분의 결제 연동이 겪는 문제:
- 컨트롤러와 서비스 전역에 흩어진 로그
- 구조화된 감사 추적 부재
- 상태 전환에 대한 가시성 부족
- 중복된 웹훅 이벤트
- 사후 디버깅의 고통
돈이 오가는 상황에서는 전통적인 로깅만으로는 부족합니다. 각 결제에 대한 명확한 라이프사이클 히스토리가 필요합니다.
접근 방식
저는 PaymentEventLogger 라는 경량 컴포넌트를 만들었습니다. 이 컴포넌트는:
- 모든 결제 관련 이벤트를 캡처
- 구조화된 감사 항목 저장
- 시간에 따른 상태 변화 추적
- 중복 웹훅 호출 감지
- 프로덕션 디버깅을 크게 용이하게 함
기존 ASP.NET Core 애플리케이션에 바로 삽입할 수 있으며, 무거운 프레임워크가 필요하지 않고 명확한 가시성을 제공합니다.
사용 예시
단순 로그 호출 대신:
_logger.LogInformation("Payment received");
다음과 같은 구조화된 항목을 얻을 수 있습니다:
- 결제 ID
- 이전 상태
- 새로운 상태
- 타임스탬프
- 출처(웹훅 / API / 수동)
- 원시 페이로드 참조
모두 구조화된 형태로 저장되어, 문제가 발생했을 때 결제 전체 라이프사이클을 즉시 확인할 수 있습니다.
공유하는 이유
이 컴포넌트를 실제 운영 시스템에서 추출해 재사용 가능한 형태로 정리했습니다. 현재 런칭 단계에서 무료로 제공하며, 다른 개발자들의 피드백을 수집하고 있습니다. 도움이 된다면 프로젝트를 지원해 주세요.
마무리
결제 디버깅이 법의학 조사처럼 느껴져서는 안 됩니다. ASP.NET Core에서 결제 시스템을 구축한다면 구조화된 로깅은 선택이 아니라 필수입니다. 프로덕션에서 웹훅 감사를 어떻게 처리하고 있는지 여러분의 이야기를 듣고 싶습니다.