결제와 주문 데이터 생성 시점에 관해 여쭙고 싶습니다.
현재 제가 구현한 어플리케이션은 화면상으로는 여러 예약 가능한 장소들 목록을 선택해서 다음 화면으로 넘어가면 추가적인 정보(연락처, 인적사항)를 입력하고 결제하기 버튼을 누르면 토스페이먼츠 결제 인증 요청이 뜨도록 구현되어 있습니다.
처음에는 인증과 승인 과정이 모두 끝나고, 즉 결제 프로세스가 완전히 종료될 때 장소에 대한 예약 객체를 만들어서 db에 저장하고 싶었습니다. 그런데 결제 인증 요청부터 결제가 완전히 종료될 때 까지 예약 객체를 만들기 위해 필요한 데이터를 백엔드나 프론트가 계속 갖고 있어야하는데 이걸 구현하는 것이 무척 어려웠습니다.
그래서 결제하기 버튼을 누르면 예약에 필요한 정보가 백엔드로 넘어가면 예약 엔티티를 만들어서 이 내용을 담고 db에 저장하고 paymentstatus를 예약 엔티티의 필드로 두어 결제 인증과 승인 과정을 거치면서 필드를 관리하는 방법이 떠올랐습니다. 그런데 실제로 이런 방법이 일반적인지, 또 이렇게 했을 때 어떤 문제가 발생할지 잘 모르겠어서 토스 개발자분들께 여쭙고 싶습니다.
1. 주문에 필요한 여러 정보를 입력하고 결제를 할 때 가장 마지막 단계에서 주문 내용을 담은 예약 객체를 만든다면 여러 프로세스를 거치는 동안 주문에 필요한 정보들은 어떤식으로 갖고 있어야 하는지?
2. 위와 같은 방법이 아니라 결제하기 버튼을 누를 때 예약 엔티티를 만들어 db에 저장하고 필드로 결제 상태를 관리하는 방법은 괜찮은 방법인지?
3. 일반적으로 커머스에서는 어떤식으로 결제와 주문 생성 시점을 결정하는지 알고싶어요
항상 감사합니다 저번 질문도 자세히 알려주셔서 큰 도움이 됐어요
5 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
일반적으로는 결제요청전에 DB에 1차적으로 주문정보를 저장합니다.
이후 결제 완료되었을 때 결제정보를 update합니다.
결제정보와 주문정보는 서로 다른 table을 사용하실 수도 있고요. 이부분은 db설계에 따라 다르겠네요
DB에 저장하는 것이 일반적인 방법입니다.
그 이유는 step 별로
1. 고객이 결제버튼 누름(insert)
2. 고객이 인증을 완료함(update, 금액위변조 검증)
3. 승인이 완료됨(update)
이런 정보들을 step 별로 저장해야 고객이 결제 도중 멈추거나 flow 가 중단되었을때 trace 가능하기 때문입니다.
기본사항을 알려드렸지만, DB I/O 의 성공 실패여부에 따라 Transaction 기능도 구현하시면 더 좋습니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
늦은 시간에도 답변 주셔서 감사합니다 !! 설명해주신대로 구현해보겠습니다~~
자세한 답변 감사드립니다!! 말씀해주신 내용 참고해서 꼼꼼하게 구현해보겠습니다 감사합니다 !!!