아하
생활

생활꿀팁

운좋은왕나비214
운좋은왕나비214

일반적인 쇼핑몰의 주문 및 결제 프로세스는 어떻게 이뤄지나요?

일반적인 쇼핑몰의 주문 및 결제 프로세스에 대해 질문이 있습니다.

아래와 같이 주문, 주문상품, 상품 테이블이 있습니다. (최대한 간략화)

대략적으로 주문 및 결제 프로세스를 그려보면.. (제 개인적인 생각입니다.)

1. 고객이 상품을 선택하고 주문을 합니다.

2. 그리고 결제수단을 선택하고 "결제하기" 버튼을 클릭합니다.

3. 버튼 클릭 후 결제모듈을 호출하기 직전에 서버를 호출하여 주문정보를 주문테이블에 저장(최초 주문상태는 "미결제")하고 생성된 주문번호를 클라이언트에게 반환해줍니다.

4-1. 결제모듈이 호출된 후 잔액부족, 카드정지 등의 사유로 인해 정상적으로 승인이 떨어지지 않고 결제실패가 된 경우 클라이언트에게 실패에 관한 응답값이 반환되고(콜백함수로) 콜백함수에서 반환받은 응답값을 처리합니다. (서버를 호출하여 주문상태 값을 "결제실패"로 변경)

4-2. 결제모듈이 호출되고 PG사로부터 정상적으로 결제 승인이 떨어진 후 클라이언트에게 정상 응답값이 반환되고(콜백함수로) 콜백함수에서 반환받은 응답값을 가지고 서버를 호출합니다.

5. 서버에서 주문 테이블의 주문상태값을 "결제완료"로 업데이트 합니다.

위와 같은 흐름일 것 같습니다.

질문은 다음과 같습니다.

질문1. 위 절차 중 3번에서 주문 테이블에 데이터를 넣고 주문상품에도 데이터를 넣어야 될까요? (주문상품 테이블에 데이터를 넣고 주문번호까지 넣음)

만약 고객이 "결제하기" 버튼을 클릭하고 결제모듈이 호출된 상태에서 결제창을 꺼버리거나 브라우저를 종료해버리면 주문 테이블에는 "미결제" 또는 "결제실패"의 데이터가 쌓이게 될텐데 이시점에 각각의 주문 데이터에 주문상품의 데이터가 맵핑이 되어있는게 맞나요? 아니면 주문상품에 데이터는 정상적으로 결제완료가 된 후에 인서트하는게 맞을까요??

질문2. 위 절차 중 3번에서 주문 테이블과 주문상품 테이블에 모두 데이터를 넣는게 맞다고 하면 사용자가 결제모듈을 호출하고 꺼버리고 반복된 행동을 할 경우 주문상품 테이블에 중복된 데이터가 계속 쌓일텐데 그래도 별 문제가 없을까요?

질문3. 위 절차 중 3번에서 주문 테이블엔 인서트하고 주문상품 테이블에 인서트를 하지 않는다면 정상적으로 "결제완료"가 된 후에만 주문상품 테이블에 데이터를 넣고 주문번호를 넣어주면 될까요?

현업에서 주문과 결제 프로세스를 경험해보지 못해서 궁금한 점이 많네요.

혹시나 제가 생각한 절차가 이상하다거나 잘못된 부분이 있을경우 말씀해주시면 감사하겠습니다.

많은 조언 부탁드립니다.

감사합니다.

3개의 답변이 있어요!