안녕하세요 @realmankwon입니다.
스몬봇을 오픈을 하지는 않았지만 현재는 SCT 운영진과 kr 의 몇몇분을 통해 열심히 베타테스트 중에 있습니다.
전체 92개의 계정이 하나의 봇에서 실행이 되고 있습니다.
한꺼번에 92개의 계정을 실행시키면 좋겠지만 스몬 api 가 동시 호출에 에러가 났던 적이 있기 때문에 동시 실행은 하지 않습니다.
최초에는 혼자 사용을 할려고 하다보니 가장 쉬운 for 방식으로 개발을 했었습니다.
하지만 계정이 늘어날수록 한 계정이 실행되는 시간 간격이 너무나 길어지게 되는 단점이 있었습니다.
그래서 메인 계정을 기준으로 그룹을 나누어 실행하도록 변경하였습니다.
for 문으로 메인 계정을 입력하여 부계정들을 실행시키게 하여서 예전보다는 시간간격이 줄었습니다.
하지만 문제는 그룹들 중 가장 먼저 끝난 녀석부터 setTimeout이 시간을 카운팅하기 시작하는 것이었습니다.
promise 만 쓰면 무조건 동기로 되는 줄 알았는데 아니었던 것입니다.
내부에서 호출되는 모든 함수들이 promise로 생성이 되어 있어야지만 await로 했을때 대기를 하고 있었습니다.
그렇다 보니 아직 함수 실행이 끝나지 않았는데 다시 실행이 되었습니다.
예전에는 async 라이브러리에서 parallel 함수를 사용하면 되었다는 것이 기억이 나서 해 보았지만 이것 역시 내부적으로 promise로 구현되지 않은 부분 때문에 기다려 주지 않았습니다.
결국은 node.js 에서는 callback 이 답이었습니다.
그래서 메인 계정을 기준으로 하는 것이 아니 정해진 수를 통해서 그룹을 나누었습니다.
한 그룹에 10개씩이라면 10을 상수로 지정하여 10개씩 잘라서 실행을 하도록 하였습니다.
그 후 한 게임이 끝나면 callback 함수를 호출하여 현재 플레이가 완료된 개수를 1씩 증가시켰습니다.
그래서 모든 계정의 수와 동일해지면 재실행하여 게임을 다시 진행하도록 처리하였습니다.
이것을 해결하기 위해 아주아주 많은 애를 썼는데 막상해 놓으니 정말 좋은 것 같습니다.
예점처럼 게임이 중복되는 경우가 발생하지 않으니까요.
일단 이렇게 안정화와 최적화를 진행 중에 있습니다.
가장 우려되는 것은 바로 서버의 사양인데 현재는 한달에 5만원짜리 서버로 돌리고 있는데 제 봇들이 많다보니 뻗을랑 말랑하고 있습니다.
메모리가 풀이 차는 거죠... ㅎ
그런데 계정이 더 많아지고 있고 dec 전송, 카드 전송 등등 많은 트랜잭션이 발생하고 있어서 데이터 사용량도 동시에 늘어나다보니 비용이 걱정이 좀 되는군요.
사용하시는 분들도 유료화를 말씀을 하시는데 어떤 방식으로 유료화를 할지가 참 고민이네요.
계정들마다 벌어들인 DEC 의 30~40%씩을 떼는 방식도 생각해 봤는데 그럼 유저간 형평에서 너무 차이가 나기도 하고 계산상으로 하루에 천원 정도 수익이 들어오니 서버비로는 턱없이 모자랄 것 같기는 하군요.
일단 베타 테스트 기간이니 어떻게 되는지 상황을 지켜봐야겠습니다 ㅎㅎ
그래도 사용하신 분들이 다 만족하신다닌 잘 뿌듯합니다 ㅎㅎ
앞으로도 더 잘 관리해서 좋은 서비스가 되도록 해야겠습니다.
헉 92개의 계정을 돌린다니 대단하네요.