인프런 커뮤니티 질문&답변

bluebamus님의 프로필 이미지

작성한 질문수

파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편

결제결과를 받는 3번째 방법 - webhook

웹훅 사용과 관련하여 질문 드립니다.

작성

·

25

0

다이어그램을 면, 장고 서버에 네트워크 장애 등으로 인해 client에서 받은 콜백을 넘기지 못하는 경우 웹훅을 사용하는게 안정적이라 하셨는데,

네트워크 장애로 아임포트에서 웹훅 연결이 안되는 경우 처리가 어떻게 되는지 알고 싶습니다.

retry가 얼마나 되는지, 대기를 얼마나 하는지 등 웹훅을 이용한 메시지 전송 보장이 어떻게 되는지 질문 드립니다.

만약, 웹훅의 100% 전송 보장이 안된다면 웹훅 또한 별도의 시나리오로 결과를 이중으로 확인 하도록 처리를 해야 하는 건지요? 실제 개발 하셨을 때에는 이 부분에 대해 어떻게 구현 하셨는지도 알고 싶습니다.

예를 들어 웹훅을 더 신뢰하는 것으로 가정한다면, 웹훅의 return을 기준으로 결과를 처리하고 일정 시간동안 타임아웃이 발생하면, 재결제를 시도하는 방식 등이 될거 같은데 실재로는 어떻게 구현이 되고 사용되는지 알고 싶습니다.

답변 2

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

포트원에서의 웹훅 정책에 대해서는 공식문서를 통해 확인하실 수 있습니다. 해당 문서에서 아래 내용을 가이드하고 있구요. 웹훅은 기본 1회만 전송하고, 포트원 측에 따로 요청하면 최대 5회까지 1분 간격으로 재시도토록 설정할 수 있다고 합니다.

image.png

현재의 결제 구현에서 웹훅은 "결제 프로세스"가 끝났음을 알려주는 알림 메시지일 뿐이구요. 웹훅이 없더라도 order.update() 메서드를 호출하여 직접 결제 상태를 갱신하실 수도 있습니다. 결제가 끝난 유저의 주문 페이지에서 "결제상태 새로고침" 버튼을 노출하여, 유저가 그 새로고침 버튼을 클릭하면 결제상태를 갱신토록 하셔도 좋겠구요. 혹은 유저에게 그 버튼을 노출하기 전에, 서비스 내부적으로 새로고침을 한 번 수행해보는 접근도 좋을 듯 합니다. 혹은 주문페이지의 프론트 단에서 JS로 수 초 단위로 새로고침 요청을 해도 좋겠죠. :-)

0

안녕하세요, 인프런 AI 인턴입니다. bluebamus님.

웹훅을 사용하는 이유는 여러 시스템 간의 비동기적이고 실시간적인 통신을 가능하게 하여, 결제 혹은 기타 트랜잭션이 발생했을 때 발생된 이벤트를 서버에 전달하기에 매우 유용합니다. 하지만, 웹훅 사용 시 발생할 수 있는 네트워크 장애 등에 대한 대비책이 중요합니다.

  1. 네트워크 장애 발생 시 처리:

    • 일반적으로, 웹훅을 통해 이벤트 전송이 실패할 경우 대부분의 서비스에서는 자동으로 동일한 요청을 다시 시도하는 메커니즘을 갖추고 있습니다. 예를 들어, 아임포트는 웹훅 전송이 실패했을 때 재시도를 시도합니다.
    • 그러나 이러한 재시도가 무제한으로 되는 것은 아니며, 보통 일정 횟수나 시간 제한 내에서만 재시도가 이루어집니다. 아임포트의 경우, 웹훅 전송 실패 시 몇 차례 재시도를 시도하지만, 정확한 횟수나 시간은 공식 문서를 참고하시는 것이 좋습니다.
  2. 중복/보완 로직 구현:

    • 네트워크 장애나 다른 오류로 인해 웹훅이 예상대로 작동하지 않을 경우에 대비해, 별도의 보완 로직을 구현하는 것이 좋은 방법입니다. 예를 들어, 결제 완료 후 주기적으로 상태를 검증하는 방식이나 필요에 따른 수동 개입이 필요할 수 있습니다.
    • 데이터의 무결성을 보장하기 위해, 웹훅과 별도로 정기적으로 결제 상태를 검증하는 작업을 백그라운드에서 실행할 수도 있습니다. 이를 통해 결제 상태가 불확실한 경우 후속 조치를 취할 수 있도록 합니다.
  3. 실제 구현 사례:

    • 웹훅의 신뢰성을 최대화하기 위해, 실제 서비스에서는 웹훅을 통한 이벤트 수신과, 그에 따른 비즈니스 로직 적용을 우선적으로 수행하지만, 웹훅 전송 실패에 대비한 정기적인 재검증 루틴을 마련하기도 합니다. 이러한 루틴은 주로 Celery와 같은 비동기 작업 큐를 통해 일정 주기로 실행되거나 필요 시 수동으로 실행됩니다.

위 내용이 질문자님께서 구현하시려는 방향을 설정하는 데 도움이 되었으면 좋겠습니다. 덧붙여, 아임포트의 웹훅 가이드 문서를 참고하시면, 웹훅 사용 시의 공식적인 가이드라인을 확인하실 수 있으며, 보다 구체적인 처리 로직을 설계하는 데 유용할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.