CI 묻고 답하기

제목 ajax 통신시 동시다발적 문제.
글쓴이 방문넷 작성시각 2015/04/13 17:05:42
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 14341   RSS
시나리오는 아래와 같습니다.

1. A회원(20,000원 보유)이 사이트에 게임 1,000원짜리 아이템을 구입요청(ajax로 금액부분과 아이템 가격 체크)
2. A회원의 포인트를 체크하여 아이템 구매할수있는지 없는지 체크후에 구입할수있으면 구입 승인.
3. A회원이 아이템을 구입한후에 금액을 차감후에 구입완료 메세지와 차감된 금액을 반환(ajax로 반환)


이런 시나리오 인데 현재 이렇게 진행중인데 코드를 제가 잘 못짜서 그런지 동시다발적으로 3~5개 신호를 날리면 3~5개가 전부 성공이 되고 디비에는 1개 아이템을 구매한 금액만 차감이 됩니다(즉 2만원 보유를 한상태에서 5개의 아이템을 같은 시간분초에 신호를 동시다발적으로 날리면 1개분만 대해서 금액만 빠지고 나머지에 대해선 차감이없습니다)

코드 문제에 대해선 어느정도 잡아둔상태인데 같은시간분초에 들어간거에 대해선 어찌 막을 방도가 없더라구요..........

동시에 여러 PC에서 접속해서 동시에 신호 날리면 위와 같은 문제가 발생합니다..

혹시 이런경우 원천 차단 할수있는 방법이나 노하우 좀 살짝 알려주시면감사하겠습니다..

 
 다음글 페이지 질문이에요.. (3)
 이전글 [자답]로그가 안남겨 지는거 같은데 .. (1)

댓글

한대승(불의회상) / 2015/04/13 17:15:18 / 추천 0
ajax가 비동기라서... 다중으로 감싸는 방법밖에는 없더군요.
$.get( "ajax/step1", function( data ) {
  if(data == 1) {
 $.get( "ajax/step2", function( data ) {
   if(data == 1) {
  $.get( "ajax/step3", function( data ) {
    if(data == 1) {
   $.get( "ajax/step4", function( data ) {
     if(data == 1) {
       alert('success');
     }  
   });
    }  
  });
   }  
 });
  }  
});
변종원(웅파) / 2015/04/13 18:50:46 / 추천 0
구매 관련은 ajax가 아닌 기존 방식(페이지 이동)으로 처리하는게 좋을 겁니다.

팝업이나 레이어로 띄우고 그 안에서 처리..
방문넷 / 2015/04/14 12:39:44 / 추천 0
@웅파 // 기존에 개발되어있던 소스다보니(제가 만든게 아님;;) 페이지로 하기에도 에메하고 참 거시기 하더라구요...
하늘치 / 2015/04/14 12:53:19 / 추천 0
음.. 좀 궁금해지네요.
ajax로 동시접속이 5건 정도 일어나는 정도면..
mysql 동시접속가능자 수 내에서 처리 되지 않나요? 
이래저래 생각해보다가 아무래도 프로그램단에서 해결될 문제가 아닌 듯 해서 생각해보니 물음표 부호가 떠올라서요. ^^;

혹시 제가 잘못 생각한 거라면 정정 부탁드립니다~ 
kaido / 2015/04/14 23:11:24 / 추천 0
하늘치님 말씀대로...

ajax로 5건이 일어나든 동기화로 5건이 일어나든 mysql 에서는 전혀 다르지 않습니다. 무엇으로 호출 하든, mysql을 호출 한 것은 동일 합니다.

리턴받아 올 때 동일한 브라우져로 비동기 5건이 동시 진행 된다면 이야기가 다르겠지만...

단순히 5건으로 mysql을 호출 하는 건 이상할 부분이 없습니다. 


코드가 100% 무결하다는 조건 이라면, mysql 의 프로세스가 무얼 하고 있는지 확인해 보셔야 할 것같습니다.

트리거가 잡혀있는지, 트랜잭션이 잡혀서 락이 걸려있는 건지...