피드로 돌아가기
Dev.toBackend
원문 읽기
Frontend Redirect 의존성 제거를 통한 결제 데이터 무결성 확보 및 Webhook 기반 백엔드 검증 아키텍처 설계
Your Checkout Redirect Is Not Payment Confirmation
AI 요약
Context
클라이언트 브라우저의 Redirect URL 도달 여부를 결제 성공으로 판단하는 설계의 취약점 분석. 네트워크 단절, 브라우저 종료, 수동 URL 접속 등 비정상적 경로로 인한 데이터 부정합 및 결제 누락 위험 상존.
Technical Solution
- Redirect 기반의 상태 업데이트를 배제하고 Payment Provider의 Webhook을 Single Source of Truth로 설정한 아키텍처 전환
- Webhook 수신 시 Signature Verification 및 Event Type 검증을 통한 요청 위변조 방지 및 데이터 신뢰성 확보
- 클라이언트 요청 금액을 무시하고 DB 기반의 Order Amount를 재계산하여 결제 세션을 생성하는 Server-side Validation 적용
- 결제 상태를 단순 성공/실패가 아닌 Pending, Processing, Expired 등 세분화된 Internal Status로 정규화하여 상태 전이 관리
- Webhook과 Redirect의 도착 순서 불일치 문제를 해결하기 위해 성공 페이지 내 Polling 또는 Pending 상태 UI 처리 로직 구현
- 동일 이벤트 중복 수신에 대비한 Idempotency 보장 로직 설계
실천 포인트
- 결제 완료 판단 로직이 `/payment/success` 같은 라우트 기반인지 확인하고 Webhook 기반으로 이전 - Frontend에서 전달받은 금액/통화 데이터를 그대로 결제 요청에 사용하는지 점검하고 Server-side에서 재검증 - Payment Provider별 서로 다른 상태 값을 내부 표준 상태(Internal Status)로 매핑하는 Layer 구현 - Webhook Endpoint에 대해 API Key 검증 및 Signature Verification 적용 여부 확인 - 결제 프로세스 내 'Happy Path' 외의 예외 상황(세션 만료, 네트워크 지연)에 대한 상태 정의 및 처리 로직 검토