Haxbotron 헥스볼 봇 근황과 자평
안녕하세요.
Haxbotron를 만들던 개발자입니다.
오랫만에 포스팅을 하는데 이 프로젝트의 근황을 좀 적어보려합니다.
간혹 검색어를 통해 찾아오시거나 디코로 질문을 주시는 분이 있어 글을 남깁니다.
겸사겸사 제 프로젝트에 대해 자평도 조금 하겠습니다.
일단 github에서 보시는 바와 같이 이 프로젝트의 개발은 현재 진행중이지 않습니다.
업데이트를 한 지도 마지막으로 몇 달이 되었습니다.
그렇다고 Haxbotron이 기능하지 못하는 것은 아닙니다.
기본적인 틀은 헥스볼이 크게 바뀌지 않는 이상 그대로이기 때문에 여전히 사용할 수 있습니다.
몇가지 사소한 이슈나 의존성 패키지의 문제가 아니라면 딱히 오류가 생길 일이 없습니다.
개발을 중단한 이유는
1. 기본적인 기능과 추가로 생각했던 요소를 거의 다 구현했고
2. 생각보다 관심을 못 받아서
입니다.
2번때문에 삐친건 당연히 아니고 원래 하는 일도 있고 바쁘기도 해서 개발을 지속할 동기가 사라졌습니다.
없는 기능이 많으면 모를까 사실 갖춰놓을건 다 갖춰놓은 상태입니다.
솔직히 현재 수준만 하더라도 다른 봇보다 기능이 더 많고 확장성도 좋습니다.
다른 분들을 다짜고짜 매도하고 무시하는 것은 아닙니다만
국내/외에 공개된 헥스볼 봇은 전부 아래와 같은 문제를 못해도 두어개 갖고 있습니다.
1. 실체가 없다
항상 스크린샷이나 글로 뭔가 대단하고 거창하게 홍보를 합니다만 실제로 구동되거나 확인할 수 있는 실체가 없습니다.
소위 페이퍼 플랜이라던지, 뇌내망상 같은 거라고 생각합니다. 왜 있지도 않는걸로 허장성세를 부리는지 모르겠습니다.
실체도 없으면서 대규모 프로젝트인 것처럼 네이밍과 버전 넘버링을 하는 건 개발의 본질에서 벗어난 일인듯 합니다.
반면에 Haxbotron은 위키 메뉴얼을 통해 사용방법부터 메뉴얼까지 가이드를 제시하고 있고, 실제로 구동도 가능합니다.
이용자에게 대단한 걸 요구하지도 않고, 그저 node를 설치한 후 최초 1회의 빌드만을 필요로 합니다.
2. 소스코드가 비공개이다
비공개 라이센스는 사실 소프트웨어 세계에서 흔합니다만 헥스볼의 경우에는 좀 다르다고 생각합니다.
제가 아는 봇들은 대부분의 소스코드가 누군가의 것을 보고 참고하고 베낀 건데
마치 온전히 자기 것인듯 마냥 비공개로 꽁꽁 감춰두는건 상도덕에 어긋난다고 생각합니다.
한 90% 자기가 만든 것이면 모를까 남의 것을 갖다 써놓고 이러는건 원작자의 의도와도 배치되는 경우가 대부분입니다.
국내에는 봇을 공유하고 서로 정보를 주고받는 분위기가 전무합니다만
이런 부질없는 독점욕은 버리고 전향적인 태도로 상호 협력했다면 더 좋았으리라 회고합니다.
그럼에도 불구하고 저는 헥스볼 개발자가 공개하고 있는 위키를 보고 봇의 구조에 대해 고민하면서
동시에 github에도 주기적으로 커밋하여 다른 분들도 저의 고민의 흔적을 따라가며 참고하실 수 있도록 노력하였습니다.
또한 MIT 라이센스로 제 코드를 공개하였기 때문에 충분히 용도에 맞게 이용하실 수 있습니다.
국내에서 많이들 사용하는 핫휴, 핫빅, 핫스몰같은 맵들 역시 원저작자 분의 양해를 구해 정식으로 봇에 탑재하였습니다.
3. 단일 소스코드의 덩치가 지나치게 비대하다
공개된 거의 모든 봇은 스크립트 파일 하나를 통째로 클립보드에 복사하여, 브라우저의 개발자 도구에 붙여넣고 디버그 모드로 실행하는 방식입니다.
직접 해보신 분은 알겠지만 이렇게 하면 유지보수가 굉장히 어려워집니다. 물론 남들이 보기에도 어렵습니다.
저는 이 문제를 런처와 봇 본체를 분리하는 방식으로 해결하였습니다. electron으로 런처를 구현한 후, puppeteer를 통해 봇을 로딩하여 수많은 구조와 기능을 별개의 파일로 분리하는데 성공했습니다.
따라서 제 봇은 브라우저를 별도로 킬 필요가 전혀 없습니다. 별도의 독립된 프로그램을 실행하여 방 개설과 관리가 가능합니다.
한편 런처 부분을 제거하고 약간의 수정만 거친다면 콘솔 환경에서도 충분히 구동이 가능하다는 특장점도 있습니다.
이는 Typescript를 전면적으로 도입하였기 때문에 가능한 일이었습니다. 설계 단계에서부터 구조에 대한 많은 이점을 얻었고, 끝에는 디버그에 이르기까지 컴파일-정적 타입 언어의 많은 장점을 누릴 수 있었습니다.
4. 국제화에 대한 고려가 전혀 없다
유창한 외국어 실력같은건 사실 논외입니다만 그럼에도 불구하고 대부분의 봇은 설계단에서 국제화에 대한 고려가 전혀 없습니다.
반면에 저는 국제화를 지원하는 방법에 대해 고민하면서 부족한 실력이나마 서로 다른 번역파일 간에 교체가 가능하도록 설계하였고, 더불어 마치 대사를 수정하듯이 봇의 메시지 데이터에도 쉽게 접근하여 수정할 수 있도록 배려를 하였습니다.
5. 플레이어 데이터의 지속성을 담보할 수 없다
3번과도 관련된 내용입니다. 브라우저의 개발자 도구에 복사-붙여넣기하여 실행하는 봇들은 게임에 참가한 플레이어의 데이터를 영구적으로 저장할 수 있는 기능이 없습니다. 봇을 종료하면 그저 데이터가 증발해버릴 뿐입니다.
반면 제 봇은 로컬 환경에 접근하여 파일의 형태로 플레이어의 데이터를 보존합니다. 쿠키나 세션, 혹은 데이터베이스 서버 등을 고려하여 설계하였기 때문입니다.
따라서 봇을 켜고 끄는 일을 수없이 반복해도 플레이어의 전적과 같은 중요 데이터가 절대로 사라지지 않습니다.
이 부분을 응용하여 웹서버를 도입해 게임 외부에서 플레이어 데이터를 조회하는 기능을 만든다거나, 혹은 리그 홈페이지를 제작하여 봇과 연동할 수도 있습니다. 로그인을 통한 인증 기능도 충분히 가능합니다.
이렇게 적어놓고 보니 마치 제가 가장 뛰어나고 대단한 것처럼 자랑하는 일이 되어버렸지만
저는 개발이 본업도 아니고 실력이 탁월하지도 않기 때문에 이런 비판은 이만 마치고자 합니다.
개발하며 노력하는 모든 분들의 꿈과 발자취를 존중하고 응원합니다.
정리하자면, Haxbotron의 설계단계부터 확장성과 국제화에 신경을 많이 썼기 때문에
부족한 실력이나마 많은 고민과 시행착오를 거치며 맨땅에서부터 차근차근 개발을 했습니다.
코드가 좀 지저분하고 보다 잘 만들 수도 있었겠지만 수요가 별로 없는 듯 하여 손을 놓은 상황입니다.
정말 크리티컬한 문제나 질문같은건 따로 연락을 주시면 대응하겠습니다.
앞으로 생각이 나면 가끔씩 개발을 진행 할 수도 있고, 하여간 여건이 되면 종종 글을 남기도록 하겠습니다.
찾아주시는 분들께 항상 감사드립니다.
아무쪼록 즐거운 하루 되시길 바랍니다.