얼굴 아이콘

오버워치 공식 사이트 크롤러를 개발하다

2017-03-12

Node.js Crawler Overwatch

시작은?

처음 오버워치라는 게임을 접하고 정말 재미있는 게임이라고 생각했다. 아무래도 한국인이다 보니 전적을 보여주는 부분에 관심이 정말 많~~~이 생겼고 내가 한번 만들어 볼 수 있다면 얼마나 좋을까?? 라는 생각을 하게 되었다.

무심코 찾아본 API

라이엇 게임즈에선 정말 API를 자~알 만들어 두었다 그러나 블리자드는 그렇지 않았다 시중에 나와있는 대부분의 전적 검색 웹은 공식 사이트의 데이터를 크롤링(스크래퍼)해와 이용 하는 것으로 보였다.

첫 리눅스

리눅스를 처음 사용해 보았다. 아직 터미널 사용이 익숙치 않지만 개발하는데 있어서 생각보다 편리함을 느꼇다, weget이나 tar gzip 같은 명령어로 다운로드나 압축을 쉽게 할 수 있었고 Node.js의 환경을 갖추는건 그렇게 어렵지 않았다.

크롤링을 만들며

처음 그것도 이렇게 대량의 문서(크롤링 후 json의 용량이 약 300kb에 육박했다.)를 크롤링 하다보니 정말 많은 문제에 맞닿았다. 그냥 키 밸류의 데이터 형식이라고 생각했던 JSON이 약 5개 이상의 트리로 넘어가자 헷갈리기 시작했고 이를 이해하는데 꽤 시간을 소모하게 되었다.

하지만 이를 통해 JSON이 가진 편리함을 너무나도 잘 이해할 수 있었고 MongoDb역시 자세히 파고들면 분명히 좋은 비관계형 데이터베이스라고 생각이 들었다.

어떻게 개발했나?

Node.js의 Request 모듈을 사용해 우선 해당 웹사이트의 유저 정보를 Html 문서로 가져왔다.

텍스트로만 이루어진 HTML은 그야말로 아비규환 이었다.

Cheerio를 사용해 일단 데이터를 Jquery 형식으로 접근 할 수 있게 만들었다.

그런 다음 문서의 구조를 분석했다. 구조는 대략



이런식으로 이루어져 있었다 때문에 오히려 구조를 이해하고 나니 간단하게 크롤링 할 수 있었다.

그 이후엔?

아무래도 개인 개발이다보니 클라이언트를 맡아줄 사람이 없었고 내가 개발을 해야했다. 처음 Html, css를 접하게 되었는데

정말로 디자인은 희안하게 하고 싶었다 그 고민의 흔적은 나의 Trello에서 확인 할 수 있다.

가벼히 요약하자면 폴아웃의 느낌으로 만들어 보고 싶었으며 부트스트랩과 같은 UI 프레임워크를 전혀 사용하지 않았다.(사실 어떻게 쓰는지 모르겠어서..)

그리고 무슨 고집에서인지 서버의 자원을 적게 쓰겠다고 상당한 양의 텍스트를 쿠키로 저장하려고 이상한 모듈까지 만들게 되었다.

결말

그렇게 고민을 하고 오랜시간을 투자해서 만들고 보니 전혀 상용으로서 가능성이 없었다. 첫 프로젝트이기도 하고 공부로 삼았다고 생각하며 프로젝트를 덮었다.

그러나 분명히 배운것은 많았다. 생각보다 Html,css를 의미있게 짜는건 어렵고 내가 작성한 코드들은 다시 들여다 보면 정말 유지보수가 가능할까? 라는 생각도 들었기 때문이다.