주문 상태 흐름
결제·배송·취소 상태를 미리 정해야 CS와 정산이 안 틀어져요. 상태를 몇 개 둘지보다 어디서 어디로 넘어가도 되는지가 먼저예요.
쉽게 말하면
계산대 옆 벽에 전표 걸이를 세 개 박아 뒀다고 생각해 보세요. 접수 · 준비 · 나감 순서로요. 전표는 왼쪽에서 오른쪽으로만 옮기기로 정했고, 손님이 무르면 따로 박아 둔 취소 걸이로 빼요. 이 벽에 그려 둔 화살표가 주문 상태 흐름이에요. 상태 이름을 짓는 일이 아니라, 어느 걸이에서 어느 걸이로 옮겨도 되는지를 미리 정해 두는 일이에요.
그래서 상태를 몇 개 둘지보다 화살표를 몇 개 허락할지가 먼저예요. 상태가 여섯 개면 옮길 수 있는 경우의 수는 서른 가지인데, 실제로 열어 둘 길은 예닐곱 개뿐이에요.
발송이 끝난 주문을 접수로 되돌리는 실수가 나와요. 그 한 번에 재고 숫자와 정산 숫자가 같이 어긋나요.
막아 둔 길은 사람이 실수해도 눌리지 않아요. 사고가 나고 수습하는 게 아니라 사고가 안 생겨요.
돈 줄과 물건 줄을 따로 그려요
주문 하나에는 사실 줄이 두 개예요. 돈이 어디까지 갔는가와 물건이 어디까지 갔는가는 따로 움직여요.
이 둘을 한 줄로 합치면 표현할 수 없는 상황이 반드시 생겨요. 결제는 승인됐는데 물건은 아직 창고에 있는 상태, 물건은 나갔는데 환불이 진행 중인 상태를 적을 자리가 없어지거든요.
| 줄 | 여기서 쓰는 상태 | 바뀌는 계기 | 틀리면 생기는 일 |
|---|---|---|---|
| 돈 줄 | 결제대기 · 결제완료 · 결제취소 · 환불완료 | 결제대행사가 보내 주는 통보 | 정산 금액이 안 맞아요 |
| 물건 줄 | 접수 · 준비중 · 발송완료 · 배송완료 | 내가 손으로 바꾸거나 송장이 들어올 때 | 손님 문의가 몰려요 |
| 둘이 만나는 자리 | 취소 가능 · 반품접수 | 돈 줄과 물건 줄을 함께 봐야 정해져요 | 받아 주면 안 될 취소를 받아 줘요 |
| 기록 줄 | 누가 언제 무엇을 바꿨는지 | 상태가 바뀔 때마다 한 줄씩 쌓아요 | 분쟁에서 증명할 게 없어요 |
돈은 상태가 아니라 사건이에요
결제 승인, 결제 취소, 환불은 한 번 일어난 사건이에요. 지웠다 다시 쓰는 값이 아니라 아래로 쌓이는 기록으로 남겨요. 그래야 정산과 입금 내역과 한 줄씩 맞춰 볼 수 있어요.
허락할 화살표를 표로 적어요
여기까지 정했으면 표 한 장으로 옮겨요. 이 표가 그대로 개발 지시서가 되고, 알바에게 주는 응대 기준이 돼요.
| 지금 상태 | 갈 수 있는 곳 | 막아 둘 곳 | 돈이 움직이나 |
|---|---|---|---|
| 결제대기 | 결제완료 · 주문취소 | 준비중 · 발송완료 | 아직 안 움직여요 |
| 결제완료 | 준비중 · 주문취소 | 결제대기로 되돌리기 | 취소하면 결제 취소가 나가요 |
| 준비중 | 발송완료 · 주문취소 | 결제대기 | 취소하면 결제 취소나 환불이 나가요 |
| 발송완료 | 배송완료 · 반품접수 | 주문취소 | 반품이 끝난 뒤에 환불이 나가요 |
| 배송완료 | 반품접수 · 거래종료 | 발송완료로 되돌리기 | 부분환불이 섞일 수 있어요 |
| 주문취소 | 여기서 끝 | 다시 살리기 | 환불 기록이 남아요 |
표에서 가장 값진 칸은 막아 둘 곳이에요. 실수를 줄이는 건 교육이 아니라 눌리지 않는 버튼이에요.
여기서 CS와 정산이 틀어져요
사고는 늘 같은 순서로 커져요. 웹훅(결제사가 결과를 먼저 알려 주는 통보)이 몇 초 늦게 도착하는 자리에서 시작해요.
- 1손님이 결제하고 완료 화면을 봐요. 우리 쪽에는 결제대행사의 통보가 아직 도착하지 않아서 주문은 결제대기로 남아 있어요.
- 2손님이 새로고침해도 결제대기라 결제 버튼을 다시 눌러요. 같은 주문에 승인이 두 건 잡혀요.
- 3뒤늦게 통보 두 건이 함께 도착해요. 화살표를 안 정해 뒀으면 두 번째 통보가 첫 번째 기록을 그대로 덮어써요.
- 4문의를 받은 창구는 취소를 한 건만 처리해요. 남은 한 건은 아무도 모르는 채 정산에 들어가요.
- 5월말에 주문 수와 입금액이 안 맞아요. 원인을 찾는 데 하루가 들고, 그사이 손님은 카드사에 이의를 넣어요.
같은 통보가 두 번 와도 한 번만 처리되게
결제대행사는 우리 서버에서 잘 받았다는 답을 못 들으면 같은 통보를 다시 보내요. 고장이 아니라 정상 동작이에요. 그래서 이미 결제완료인 주문에 결제완료 통보가 또 오면 아무 일도 하지 않도록 정해 둬요. 화살표 표에 한 줄 넣는 것으로 충분해요.
가게에서 실제로 겪는 장면
장면 1 · 알바가 물었다
“손님이 방금 취소해 달라는데, 송장은 아침에 이미 찍었어요. 취소 눌러도 되나요?”
이 질문이 나온다는 건 화살표 표가 없다는 뜻이에요. 발송완료에서 주문취소로 가는 길은 막아 두고, 대신 반품접수라는 다른 길을 열어 둬요. 두 길은 돈이 나가는 시점이 달라요. 취소는 지금 나가고, 반품은 물건을 받아 확인한 뒤에 나가요. 차이는 결제취소와 환불의 차이에서 봐요.
장면 2 · 외주 개발자가 말했다
“상태는 그냥 글자로 저장해 뒀어요. 나중에 필요하면 값 추가하시면 돼요.”
편해 보이지만 이러면 누구든 아무 값이나 넣을 수 있어요. 넣을 수 있는 값의 목록과 화살표를 코드에 박아 달라고 요구해요. 목록에 없는 값은 저장 자체가 거부되게요. 사장님이 표 한 장만 건네면 개발자는 그대로 옮기면 돼요.
헷갈리기 쉬운 것
상태 이야기에서 사장님들이 가장 자주 부딪히는 오해 네 가지예요. 여기서 어긋나면 표를 아무리 잘 그려도 소용이 없어요.
| 흔한 오해 | 실제로는 |
|---|---|
| 상태를 잘게 나눌수록 정확해진다 | 내 행동이 달라지지 않는 구분은 상태가 아니에요. 알림만 늘고 직원 손이 더 가요 |
| 취소를 누르면 돈도 같이 돌아간다 | 주문 상태와 돈은 따로 움직여요. 결제 취소 요청이 별도로 나가고, 실패할 수도 있어요 |
| 상태를 되돌리면 원래대로 돌아온다 | 이미 나간 알림과 이미 잡힌 정산은 안 돌아와요. 되돌리기 대신 새 기록을 쌓아요 |
| 상태는 화면 표시일 뿐이다 | 재고 차감·정산·증빙이 전부 상태에 매달려 있어요. 표시가 아니라 장부예요 |
자주 묻는 것
- Q. 상태를 몇 개부터 시작하면 되나요?
- 결제대기·결제완료·준비중·발송완료·배송완료·주문취소 여섯 개면 물건 파는 가게 대부분이 돌아가요. 반품과 부분환불이 실제로 생긴 다음에 늘려도 늦지 않아요.
- Q. 이미 운영 중인데 지금 화살표를 정해도 되나요?
- 돼요. 순서가 있어요. 먼저 지금 쌓인 주문에 어떤 상태 값이 들어 있는지 세어 보세요. 표에 없는 값이 나오면 그 자리가 그동안 새던 곳이에요. 그 값을 어디로 보낼지 정한 뒤에 새 규칙을 켜요.
- Q. 손님에게도 이 상태 이름을 그대로 보여주나요?
- 안 그러는 편이 좋아요. 안에서 쓰는 이름과 손님 화면에 쓰는 말은 따로 정해요. 표기를 고르는 요령은 주문 상태 관리에 있어요.
- Q. 부분취소는 어느 화살표인가요?
- 주문 전체가 아니라 품목마다 상태를 따로 두는 이야기예요. 금액 계산에 배송비와 쿠폰이 얽히니 부분환불을 먼저 읽고 설계해요.
- Q. 상태가 바뀔 때마다 손님에게 알림을 보내야 하나요?
- 전부 보낼 필요는 없어요. 손님의 기다림이 달라지는 지점에서만 보내요. 보통 결제완료·발송완료·환불완료 셋이면 충분해요.
확인해 보세요
손님이 결제 버튼을 두 번 눌러 승인이 두 건 잡혔어요. 다시 안 생기게 하려면 무엇을 먼저 정해야 할까요?
하나 더
발송이 끝난 주문에 손님이 취소를 요청했어요. 표에는 어떻게 적어 두는 게 맞을까요?
직접 해보기
내 가게 화살표 표를 화면으로 만들어 보세요
에이전트 스튜디오에 이렇게 적어 보세요. "주문 상태를 결제대기·결제완료·준비중·발송완료·배송완료·주문취소로 두고, 정해진 순서로만 바꿀 수 있게 해줘. 막힌 이동은 버튼이 아예 안 눌리게 하고, 상태가 바뀔 때마다 시각과 바꾼 사람을 기록으로 남겨줘." 표로 적어 둔 규칙이 화면에서 어떤 버튼으로 바뀌는지 만들어 보면 바로 알아요.
에이전트 스튜디오 열기더 깊이 (안 읽어도 괜찮아요)
지금 상태는 한 칸, 기록은 여러 줄 · 주문 표에는 지금 상태 한 칸만 두고, 바뀐 내역은 별도 기록 표에 한 줄씩 쌓아요. 지금 상태만 읽으면 목록 화면이 빨라지고, 기록을 펼치면 분쟁 때 시각까지 증명돼요. 남기는 요령은 누가 무엇을 했나 기록에 있어요.
돈이 움직이는 화살표는 한 묶음으로 · 결제 취소 요청과 주문 상태 변경은 둘 다 되거나 둘 다 안 되어야 해요. 하나만 성공하면 돈은 나갔는데 주문은 살아 있는 상태가 돼요. 묶는 방법은 한 묶음으로 처리하기에서 봐요.
표에 없는 값이 들어오면 멈추게 · 상태를 자유로운 글자로 받으면 오타 하나가 조용히 저장돼요. 목록에 없는 값이 오면 저장을 거부하고 기록만 남기도록 요구해요. 조용히 들어간 이상한 값은 몇 달 뒤 정산에서야 발견돼요.
이것만 기억하세요
- ·상태 목록보다 화살표 목록이 먼저예요. 어디서 어디로 갈 수 있는지 표로 적어요
- ·돈 줄과 물건 줄을 따로 그려요. 결제는 사건이라 기록으로 쌓아요
- ·막아 둘 화살표를 정하면 사람이 실수해도 사고가 안 생겨요
- ·같은 통보가 두 번 와도 한 번만 처리되게 못 박아요
- ·발송이 끝난 뒤의 취소는 반품 길로 보내요. 돈이 나가는 시점이 달라요