결제 및 취소 로직 구현 - DB 저장 오류 발생 시 처리 문의
안녕하세요,
결제 로직을 처음 구현하다 보니, 일반적인 처리 흐름이나 예외 처리 방식에 대해 문의드립니다.
예를 들어 카드 결제를 기준으로 로직을 구성한 상황에서 아래와 같은 흐름을 가정하고 있습니다:
결제 API 호출 성공 (confirm 성공) → DB 반영 성공
→ 문제 없이 결제 완료 및 서비스 제공 가능
결제 API 호출 성공 (confirm 성공) → DB 반영 실패
→ 실제 결제는 완료되었지만, 시스템에 반영되지 않아 상품 이용이 불가능해지는 문제 발생
이 경우, 저는 두 번째 시나리오에 대비하여 cancel API를 즉시 호출하여 자동 환불되도록 처리했는데요,
실제 현업에서는 이런 방식이 일반적으로 사용되는지 궁금합니다.
혹은 다음과 같은 구조를 더 선호하는지 알고 싶습니다:
트랜잭션 기반 처리 방식
DB에 최소한의 결제 요청 정보만 우선 insert
이후 API 통신 성공 시, 응답값을 포함해 update
통신 실패 시 트랜잭션 rollback 처리
이 경우, DB에 결제 요청 흔적이 남지 않으므로 추가 취소 처리를 하지 않아도 됨
즉,
"결제가 실제로 완료되었지만 시스템 DB에는 실패한 상태"
를 방지하기 위해 업계에서는 어떤 방식이 더 보편적이며, 안정적으로 운영되고 있는지 궁금합니다.
동일한 방식으로
환불에 관해서도 실제 환불이 됐지만 db저장에 실패한 경우엔 어떻게 처리하는지 궁금합니다.
4 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
저는 두 번째 시나리오에 대비하여 cancel API를 즉시 호출하여 자동 환불되도록 처리했는데요, 실제 현업에서는 이런 방식이 일반적으로 사용되는지 궁금합니다.네 일반적으로 이렇게사용하십니다. DB 에 어떻게 남기실지에 대한 부분은 가맹점마다 생각하시는게 달라서 저희가 뭐라고 말씀드리기는 어렵습니다.
이 경우, DB에 결제 요청 흔적이 남지 않으므로 추가 취소 처리를 하지 않아도 됨이렇게 말씀하셨는데 이래도 저희쪽에는 실제 결제가 된상태이므로 취소처리를 해주셔야 합니다. 환불의 경우는 환불을 취소할 방법이 없기때문에 DB 처리 실패여부와 무관하게 환불된 상태로 저장해 주셔야 하고 DB 를 어떻게든 보정해서 취소 완료로 해주셔야 합니다.
오.. 방향성이 많이 고민이 됐는데 답변 감사합니다!
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.