동시 주문처리 방법 문의
본문
안녕하세요.
영카트의 관련된 질문은 아닙니다.
그러나 PG사 이용에 관한 내용이라서 올려봅니다.
예를들어 한정수량인 경우 1개가 남았는데
두사람이 동시에 주문하면 어떻게 처리되는지요?
PG사 결제창이 뜨기 전에는 체크가 가능하지만
뜨고나서 결제하는 동안에
다른 사람이 먼저 주문을 끝냈을 경우
어떻게 처리하면 좋을지 모르겠습니다.
PG사에 문의를 해봐야 하나요?
즐거운 하루되세요.
답변 3
https://sir.kr/qa/178819?stx=%EB%8F%99%EC%8B%9C+%EC%A3%BC%EB%AC%B8&sst=wr_num&unanswered=0&s_tag=
여기 참고 하시면될것 같아요.
PHP로 MySql을 이용한 처리방법들에서는
보통 단발성 (즉각 수행 되는 형태) 처리 라서 큰 무리가 없지만
시스템이 복잡해지고 연동이 많아지면 많아질수록
머무르는 시간이 길어지게되서 트랜잭션 처리를 합니다.
트랜잭션 처리를 하더라도 질문하신 내용과 같이
동시에 동일 Record 의 요소(item)을 접근하는경우
상태를 누구에게 주도권을 줄것이지에 대한 고민은 항상 따라옵니다.
보통 지정석 / 한정물품 따위들에 대해 이런 현상이 나옵니다만
이럴때는 선점(진행중)자에게 lock 을 걸어주는 경우도 있습니다.
그누보드 방식에서는 lock 처리가 안되기때문에
상태를 미리 변경해주는것도 방법입니다.
하지만
장바구니 라던지 / 진행중인 대상이 처리가 완료되지 않고
머무르기도하고, 시스템이 다운되기도하고, 사용자가 화장실을 갔다가 잊어버리도 하고 등등
발생할수있는 케이스는 다양합니다.
따라서,
진행중인 대상이 특정시간/혹은 일자가 경과할때 상태를 환원시켜주는게 필요하고
진행중인상태(수량 가감)에 대한 처리가 이루어지면
이후 발생건은 동시진행이 불가능하게 됩니다.
(임의의 예를들어서)
item 상태가
1. 가능
2. 진행중
3. 완료
4. 취소
가 있다고 하면
주문상태는
1. 대기 <-- 대기가 필요한경우
2. 신청중 또는 결제중
3. 입금대기 또는 결제완료
4. 주문완료
5. 주문취소
(중간에 배송단계가 추가될수도 있지만)
위 주문상태에서 item과 연결되 키값이 존재해야 합니다.
item의 수량 혹은 상태와 직결되는 정보가 있다면
취소/완료시에 함께 완료/수량값을 변경처리 해야죠
item의 상태에 따라
단일물품, 장소, 시간예약 등에 해당될경우
상태를 가능여부로 관리해줘야 합니다.
단일물품,상태를 관리한느경우
Record를 수정관리하는것보다
Record 가 새로 생성되는 인스턴스 개념으로 관리하는게
훨씬 효율적이라고 생각합니다.
방법은 다양하니, 연관관계를 설계해서 진행하실때 참고하세요