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

서정범님의 프로필 이미지

작성한 질문수

견고한 결제 시스템 구축

결제 승인 기능 구현

주문, 결제 로직에 대해서 질문이 있습니다.

24.08.28 22:44 작성

·

49

0

이커머스를 기반으로 가정하고 사용자의 결제가 진행되는 과정을 정리했을 때 다음과 같이 고려해볼 수 있을 것 같습니다.

 

  1. 단일 구매 혹은 장바구니를 통해 결제 페이지로 이동

  2. 결제 페이지에서 사용자가 필요한 데이터를 작성한 후 결제하기 버튼을 클릭

  3. 백엔드 서버는 해당 결제 요청으로부터 PSP에게 결제 진행을 요구하기 위해서 요청을 보내고 토큰과 같은 형태로 받아옴

  4. 토큰을 사용자에게 반환한 후 사용자가 결제를 진행

  5. 결제가 성공적으로 진행되었을 경우 백엔드 서버는 결제 승인 요청을 PSP로 전송

  6. 결제 승인 응답이 돌아오면 결제 완료

    이커머스는 상품의 유효성 검증은 2번과 3번 모두 검증한다고 해도 재고 감소와 같은 로직 및 주문 번호를 생성하는 로직은 어느 시점에 두어야 될 지 고민이 됩니다.

재고 수량의 감소를 3번에서 진행하는 것으로 고려하고 있는데 이와 같은 경우 결제 페이지로 사용자가 결제에 필요한 데이터를 입력하고 재고가 부족하다는 입력을 받을 수 있어서 사용자 경험 측면에서 안좋을 수 있다고 생각이 되긴 합니다.

 

하지만 2번에서 진행할 경우 재고를 결제 페이지로 이동할 때 감소시켜야 하기 때문에 실제로 결제가 이루어지지 않을 수 있는 많은 상황이 있을 수 있기 때문에 이 또한 고려해야 되는 부분이라고 생각합니다.

 

어떤 시점에 재고를 감소시키는 것이 좋을지 의견을 듣고 싶습니다.

 

추가적인 질문으로 현재 강의에서 진행하고 있는 결제 이벤트를 DB에 반영하는 시점이 정확히 어떤 시점인지 헷갈립니다. NOT_STARTED 상태로 저장되는 시점이 결제 페이지로 이동하는 시점인지 아니면 결제 구매 버튼을 누른 시점인지 알려주시면 감사하겠습니다!

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 08. 30. 22:46

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

사용자의 결제 과정과 관련해 재고 감소 시점과 결제 이벤트를 DB에 반영하는 시점에 대한 질문이시군요.

재고 감소의 경우, 사용자 경험과 시스템의 정확성을 고려해야 합니다. 재고 감소를 결제 승인(5번 단계) 후에 진행하는 것을 추천드립니다. 이 방식은 사용자가 결제를 성공적으로 마치고 나서야 재고를 감소시키므로, 결제가 실제로 이루어지지 않는 경우에 재고 오류를 방지할 수 있습니다. 물론, 이는 대량의 트래픽이나 동시에 같은 상품을 구매하는 상황에서 재고 관리에 주의가 필요합니다.

결제 이벤트를 DB에 반영하는 시점은 일반적으로 사용자가 결제 구매 버튼을 누른 시점(NOT_STARTED 상태)에서 시작됩니다. 이는 사용자가 결제를 진행하려는 의사를 백엔드 시스템에 전달한 시점이므로, 이후 처리되는 결제 승인 요청 등의 과정에서 발생할 수 있는 다양한 상태 변화를 기록하기 위해 초기 상태(NOT_STARTED)를 먼저 DB에 저장하는 것이 일반적인 접근입니다.

재고 관리와 결제 이벤트 처리는 이커머스 시스템에서 매우 중요한 부분이므로, 시스템의 설계 단계에서 충분한 고민과 테스트를 거치는 것이 중요합니다. 특히, 고가의 상품이나 높은 동시 요청이 예상되는 경우, 재고와 결제 처리 로직을 더욱 세심하게 설계해야 할 필요가 있습니다.

질문하신 내용 외에도 구체적인 구현 방법이나 추가적인 상황에 대해서 더 알고 싶으시다면 언제든지 질문해 주세요.