스몬봇 로직 수정

avatar

안녕하세요 @realmankwon입니다.

주말에 강의를 들으러 간 동안에 시간이 나서 스몬봇을 업그레이시켰습니다.
기존에는 Loop문을 사용하여 한번 한 계정만 배틀을 진행하고 한 계정이 끝이 나야 다음 계정이 배틀을 하도록 되어 있었습니다.
현재는 계정이 10개 정도 밖에 안 되기 때문에 큰 문제는 없지만 앞으로 계정을 더 많이 늘리게 되면 기존 로직으로는 해결이 되지 않았습니다.

그래서 promise.all 을 이용하여 한번에 모든 계정을 실행시키도록 로직을 변경하였습니다.
일단 결론적으로는 소스 수정에 성공을 하였습니다.
하지만 그 과정은 생각보다 험난했습니다.

가장 힘든 부분이 전역변수를 제거하는 것이었습니다.
한번에 한 계정만 실행이 되기 때문에 굳이 파라미터를 넘기게 작성하지 않았습니다.
그런데 동시에 여러 계정을 실행하게끔 하니 파라미터로 넘겨야 했습니다.
그래서 일단 전역변수를 삭제하고 함수 호출을 하는 곳마다 파라미터를 추가하였습니다.
이때 this를 사용한 부분에서 문제가 발생했습니다.
클래스에 있는 this 와 클래스 밖에 있는 this의 범위가 다른데 동일시 여기는 바람에 생각했던 것과 다르게 동작을 하였습니다.
이 부분도 this를 전부 삭제한 상태로 처리를 하여 로직을 바로 잡았습니다.

다음으로 await 로 함수를 실행하더라도 대기를 하지 않는 것이 있었습니다.
javascript의 무지에서도 오류였습니다.
await로 함수를 호출하면 async 함수로 선언만 하면 되는 줄 알았는데 실제로는 async로 선언하지 않고 promise로 작성만 하면 되었습니다.
promise 내부에서 await 로 함수 호출을 한다면 내부에서 async를 부쳐주면 되었습니다.
기존의 async 함수에서 async를 제거하고 promise를 추가하여 함수를 바로 잡았습니다.
이렇게 작성을 해 주니 promise.all 로 해당 함수를 호출하였을때 모든 함수가 실행이 될때까지 대기를 하고 있었습니다.

다음으로 맥의 환경과 aws 의 환경이 달라서 동일한 라이브러리를 호출하였지만 오류가 발생하였습니다.
해당 라이브러리는 node-fatch 라는 것인데 이것은 axios로 변경하여 처리하였더니 해결이 되었습니다.
애초에 axios로 작성하면 되었지만 잘 모르는 상황에서 개발을 하다보니 시간에 따라 사용한 라이브러리가 달랐습니다.

위에 언급한 것 외에도 몇가지가 있었지만 잘 마무리 되어서 이제는 계정을 늘리기만 하면 될 것 같습니다.
앞으로 몇개까지 늘리게 될지 모르겠지만 계정을 많이 늘어나게 되면 기존 aws 보다 라즈베리파이에서 봇을 돌리는 것이 더 나을수도 있겠다는 생각이 듭니다.
물론 집에 설치해 놓으면 외부에서 원격으로 접속하는 것이 좀 불편하기는 하겠지만 장애가 나더라도 큰 문제가 되지 않으니 괜찮을 것 같습니다.
앞으로 스몬봇을 틈틈히 업그레이드 시켜서 DEC 채굴을 계속해야겠습니다. ^^



0
0
0.000
0 comments