Github 데이터 챌린지 참가 후기

최근에 열린 Github 데이터 챌린지 행사에 개인적으로 참여한 경험을 공유합니다.

Github 데이터 챌린지

Github 데이터 챌린지는 Git 저장소 서비스인 Github가 주최하는 행사로 작년에 처음 열리고 올해로 두 번째입니다. Github 전체 회원의 활동에 대한 타임라인 데이터를 주고 이 데이터를 활용해서 만드는 것 외에는 어떠한 제한도 없습니다. (대부분의 행사들이 자사의 API를 사용하라거나 하는 등의 제약이 있는데 이러한 자유로움이 Github의 매력이죠.) 물론 모여서 대회를 하는 건 아니고 기간 내에 각자 개발해서 이메일로 결과물을 Github에 보내는 행사입니다. 이 데이터는 구글의 BigQueryGithub 아카이브 사이트에서 다운로드 받을 수 있게 제공하고 있습니다. 작년 1회 행사 때는 Github 활동의 전체 통계를 보여주는 대시보드나 커밋 메시지를 통해서 언어별로 감정 그래프를 보여준 프로젝트가 수상을 했습니다.

보통 이런 류의 해카톤 행사에 관심은 많지만 아이디어가 많은 편은 아니라 자주 참여하고 있지는 않았습니다. 그래서 평소처럼 행사 공지를 보고 고민을 하기 시작했습니다. 이제는 오픈 소스의 표준 저장소가 되어버린 Github이기에 그 안에 담겨있는 데이터의 잠재성은 엄청날 것이라고 생각했기에 고민을 좀 더 하다 보면 쓸만한 아이디어가 나올 거라고 생각했습니다. 그러던 중 생각난 것이 컨벤션을 조사하는 것이었습니다. 언어별로 다양한 컨벤션이 존재하고 권장사항도 존재하지만 개발자 별로 다양하게 쓰고 있기도 하고 사실 누가 어떤 컨벤션을 선호하는지 모르고 있기에 보통 설문조사를 통해서 파악하기 마련인데 Github에는 엄청난 양의 코드가 올려져 있으므로 이를 바탕으로 컨벤션의 선호도를 파악할 수 있을 것 같았습니다.

처음에는 생각한 아이디어를 실제로 구현할 수 있는지 프로토타이핑을 시작했습니다. 프로토타이핑을 통해서 Github가 제공한 데이터에 어떤 내용이 들어있고 Github API를 통해서 커밋에 들어있는 소스의 변경 사항등을 가져 올 수 있는지를 파악하고 이를 통해서 분석을 할 수 있는지를 테스트해보았는데 가능할 것 같아서 바로 개발에 들어갔습니다. 그 당시에 만들고 있던 개인 프로젝트가 있었지만 이 새로운 프로젝트에 꽂혀버려서 기존 하던 작업은 멈추고 Github 데이터 챌린지를 준비하기 시작했습니다.

사용 기술

보통 사용하는 기술은 익숙한 기술 혹은 사용하고 싶었던 기술을 가져다 쓰는 편입니다.

  • Node.js : 오랫동안 사용하고 있기에 많이 익숙한 편이고 특히 해카톤처럼 빠르게 구현해야 할 때 유용하기 하므로 별 고민없이 선택했습니다.
  • CoffeeScript : 커피스크립트는 자바스크립트의 트랜스파일러로 커피스크립트로 작성하면 자바스크립트로 변환됩니다. 몇 년 전에 공부를 좀 했었는데 최근에 다른 일로 만져보고 있던 터라 Node.js 상에서 커피스크립트를 사용하기로 결정했습니다. 커피스크립트를 사용하면 더 간단한 코드로 의미 있게 작성할 수 있습니다.
  • MongoDB : 데이터스토어는 MongoDB를 선택했는데 개인 프로젝트에서는 많은 설계를 하고 가기 보다는 작업하면서 그때그때 변경해가면서 사용하게 되기 때문에 스키마가 없는 MongoDB가 편한 점도 있고 자바스크립트 같은 경우 JSON을 그대로 넣을 수 있기 때문에 개인 프로젝트에서 많이 사용하는 편입니다.
  • Grunt : 자바스크립트용 빌드 도구입니다. 나온지는 얼마 안됐지만 자바스크립트에서는 표준으로 자리잡아가고 있고 자동화 등에 아주 유용하게 사용할 수 있습니다.
  • Express : Node.js에서 가장 인기 있는 웹 프레임워크입니다.
  • Bootstrap : 디자인 능력이 부족한 개발자가 사이트를 만들때는 유일하다고도 할 수 있는 선택이죠.
  • FlatUI : Bootstrap의 UI Kit으로 색감이 독특하면서 잘 만들어졌습니다. 권장 색상코드까지 함께 제공하고 있기 때문에 색감선택능력이 부족한 개발자도 괜찮은 품질의 사이트를 만들 수 있게 도와줍니다.(부트스트랩 기본 테마는 이제 너무 많이 봐서 식상해졌죠.)
  • mocha : Node.js에서 인기있는 테스트 프레임워크입니다. Assert 라이브러리를 선택해서 사용할 수 있고 유연한 장점이 있습니다. Assert 라이브러리는 should.js를 사용했습니다.
  • bower : 트위터에서 만든 프론트엔드용 의존성 관리도구입니다. 프론트앤드 버전의 maven(의 의존성관리 부분)이나 npm을 생각하시면 됩니다. 프로젝트마다 Bootstrap이나 jQuery등을 저장소에 올리는 건 불필요한 일이고(변경사항 추적도 필요 없죠.) 이젠 프론트엔드 라이브러리도 사용해야 하는 것이 많아졌으므로 bower를 사용하면 일일이 찾아 다니면서 다운로드 받을 필요도 없고 편합니다.
  • Flight : 마찬가지로 트위터에서 만든 자바스크립트 UI 프레임워크입니다. 이벤트 기반으로 동작하는 프레임워크로 모듈 별 의존성을 분리해서 개발할 수 있습니다. 한번 쯤 써보고 싶었던 프레임워크라 사용했지만 막상 UI가 그리 복잡하지 않아서 불필요하게 사용한 결과가 되긴 했습니다.
  • d3.js : 차트 라이브러리로 기존의 다른 차트라이브러리와는 다르게 통계 도구에 가깝다고 볼 수 있습니다. 기존에는 데이터를 전달하면 보여주는 역할만 했다면 d3는 데이터를 통계 내서 보여주는 역할까지 하고 있기에 아주 강력합니다. 다만 상당히 복잡하기 때문에 간단히 문서 약간 보고 활용하기에는 무리가 있어서 저도 프로젝트에서는 간단한 정도로만 사용했습니다. 제대로 활용하려면 많은 학습이 필요해 보입니다.

보통 개인 프로젝트는 다양한 고민과 시도를 하면서 학습에 치중하는 편이지만 이번에는 마감 기한도 있고 해서 구현에 초점을 맞추었습니다. 테스트도 필요한 수준의 최소한 정도로만 작성해서 구현하면서 기간 내에 구현할 수 있는 부분만 구현해 나가는 방식으로 진행했습니다. 처음에는 다양한 기능들을 생각했지만 구현해 나가면서 시간이나 구조상 많은 부분을 버리면서 처음에 생각했던 아이디어에 중요한 부분만 구현해서 개발을 완료했습니다.

프로젝트 완료 후

원래는 한 달 정도 개발을 하고 5월 말 정도에 공지가 나오기로 했었는데 6월이 지나도 결과가 나오지 않았습니다. 그래서 기대감을 접고 잊고 있었는데 6월 말에 공지가 나왔는데 운 좋게 2위를 했습니다.  만들면서 재미있었던 것 만으로 만족할려고 했는데 Github에서 수상까지 하게 되는 것이 현실이 될 것이라고는 생각도 못했습니다.

Popular Convention이라는 이름으로 공개한 프로젝트가 Github 블로그를 통해서 공개된 이후 수 많은 사람이 방문해서 처음에는 사이트가 장애가 났습니다.(너무 많이 와서라기 보다는 성능을 별로 고려 안하고 만들었기 때문이죠.) 처음에는 대회용으로만 만들었던 것이지만 소셜 네트워크등으로 통해서 많은 사람이 저의 아이디어를 좋아해주고 다른 언어도 추가해 달라는 요청을 많이 해와서 현재는 지속적으로 데이터를 수집해서 서비스 할 수 있도록 추가개발을 하고 있습니다.

Platform Software 개발1팀에서 프론트앤드 개발을 하고 있으며 신기술 및 생산성을 높여줄 다양한 도구에 관심이 많이 있습니다. 온라인에서는 Outsider라는 닉네임을 쓰고 있고 블로그도 운영하고 있습니다.

Twitter 

공유하기