91
Popular Convention 개발기 Outsider 2013.10.14 at Deview 2013

Popular Convention 개발기

Embed Size (px)

DESCRIPTION

Deview 2013 Day 1에서 발표한 발표자료

Citation preview

Page 1: Popular Convention 개발기

Popular Convention 개발기

Outsider2013.10.14 at Deview 2013

Page 2: Popular Convention 개발기

Outsider코딩을 좋아하는 프로그래머

Page 3: Popular Convention 개발기

아이디어Proof of Concept

실제 구현

서비스

대회 결과 공지 후

리팩토링

Page 4: Popular Convention 개발기

PopularConvention?

Page 5: Popular Convention 개발기

Github의 코드를 기반으로

코딩 관례를 분석

Page 6: Popular Convention 개발기
Page 7: Popular Convention 개발기

Github Data Challenge II

Page 9: Popular Convention 개발기

메인 페이지 18위

Hacker News

Page 10: Popular Convention 개발기

아이디어

Page 11: Popular Convention 개발기

Github 데이터 챌린지 공지

https://github.com/blog/1450-the-github-data-challenge-ii

Page 12: Popular Convention 개발기

http://www.flickr.com/photos/photoloni/6321527653/

만들어 볼만한아이디어가 없을까?

Page 13: Popular Convention 개발기

Github에는 엄청냔 양의 코드가 있으므로 잠재력이 높다

Page 15: Popular Convention 개발기

Github에 실제 코드가 있는데

코딩 관례를 설문조사로 할 필요가 있을까?

Page 16: Popular Convention 개발기

Proof of Concept

Page 19: Popular Convention 개발기

Github 타임라인으로 분석할 수 있는가?

http://www.flickr.com/photos/morberg/3842815564/

API로 분석할 코드를 얻을 수 있는가?

Page 20: Popular Convention 개발기

Github 타임라인으로 분석할 수 있는가?

http://www.flickr.com/photos/morberg/3842815564/

API로 분석할 코드를 얻을 수 있는가?

코드를 기반으로 관례를 분석할 수 있는가?

Page 21: Popular Convention 개발기

초기에는 세부사항을

무시하라

Page 22: Popular Convention 개발기

Google BigQuery

사용해 본적 없음.

인증 어려움.

불필요한 과정에 시간 소비.

http://www.flickr.com/photos/jezpage/4259659744/

Page 23: Popular Convention 개발기

구글의 Ilya Grigorik

매 시간마다 타임라인이 JSON 파일로 올라옴

$ wget http://data.githubarchive.org/2013-10-14-10.json.gz

http://www.githubarchive.org/

Page 24: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

Page 25: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

mongoimport로 MongoDB에 임포트

Page 26: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

mongoimport로 MongoDB에 임포트

타임라인의 PushEvent 추출

Page 27: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

mongoimport로 MongoDB에 임포트

타임라인의 PushEvent 추출Push의����������� ������������������  담긴����������� ������������������  Commit����������� ������������������  정보가����������� ������������������  담겨있다

Page 28: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

mongoimport로 MongoDB에 임포트

타임라인의 PushEvent 추출

Github commits API로 커밋 내용 확인

Push의����������� ������������������  담긴����������� ������������������  Commit����������� ������������������  정보가����������� ������������������  담겨있다

Page 29: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

mongoimport로 MongoDB에 임포트

타임라인의 PushEvent 추출

Github commits API로 커밋 내용 확인커밋의����������� ������������������  patch����������� ������������������  내용이����������� ������������������  JSON에����������� ������������������  담겨있다

Push의����������� ������������������  담긴����������� ������������������  Commit����������� ������������������  정보가����������� ������������������  담겨있다

Page 30: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

mongoimport로 MongoDB에 임포트

타임라인의 PushEvent 추출

Github commits API로 커밋 내용 확인

JavaScript 파서로 코딩 관례 분석

커밋의����������� ������������������  patch����������� ������������������  내용이����������� ������������������  JSON에����������� ������������������  담겨있다

Push의����������� ������������������  담긴����������� ������������������  Commit����������� ������������������  정보가����������� ������������������  담겨있다

Page 31: Popular Convention 개발기

가능하겠는데...

Page 32: Popular Convention 개발기

여기서 잠시 샛길로...

Page 33: Popular Convention 개발기

개인 프로젝트는 보통 학습의 목적

http://www.flickr.com/photos/lethaargic/3660097148/

Page 34: Popular Convention 개발기

보통 끝이 나지 않는다

Page 35: Popular Convention 개발기
Page 36: Popular Convention 개발기
Page 37: Popular Convention 개발기
Page 38: Popular Convention 개발기

아키텍처 설계도 많은 고민 후

테스트 코드를 철저히

Page 39: Popular Convention 개발기

http://www.flickr.com/photos/mattijn/4103100036/

이렇게 하는게 과연 좋은가?

Page 40: Popular Convention 개발기

제약을받아들여라

Page 41: Popular Convention 개발기

30여일 정도의 프로젝트 기간

기능과 시간에 대한타협이 필요

http://www.flickr.com/photos/tacoekkel/2770755895/

Page 42: Popular Convention 개발기

실제 구현

Page 43: Popular Convention 개발기

Server-side

Page 44: Popular Convention 개발기

d3.js

Client-side

Page 45: Popular Convention 개발기

Goals

만들어진 데이터를 다른 사람들에게도 의미있는가?

코딩관례 분석으로 의미있는 데이터를 만들 수 있는가?

Page 46: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

Page 47: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

JSON 파일 MongoDB에 임포트

Page 48: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

JSON 파일 MongoDB에 임포트

작업 목록 컬렉션에 추가

Page 49: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

JSON 파일 MongoDB에 임포트

작업 목록 컬렉션에 추가

배치로 작업목록에 있는 타임라인을 처리

Page 50: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

JSON 파일 MongoDB에 임포트

작업 목록 컬렉션에 추가

배치로 작업목록에 있는 타임라인을 처리

Commits API로 지원하는 언어이면 파싱

Page 51: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

JSON 파일 MongoDB에 임포트

작업 목록 컬렉션에 추가

배치로 작업목록에 있는 타임라인을 처리

Commits API로 지원하는 언어이면 파싱

커밋별로 관례의 점수를 매긴 후 디비에 저장

Page 52: Popular Convention 개발기

Github Archive에서 JSON 파일 다운로드

JSON 파일 MongoDB에 임포트

작업 목록 컬렉션에 추가

배치로 작업목록에 있는 타임라인을 처리

Commits API로 지원하는 언어이면 파싱

커밋별로 관례의 점수를 매긴 후 디비에 저장

한시간의 데이터를 언어별로 합산

Page 53: Popular Convention 개발기

핵심만 간단히 구현

코딩관례 분석은커밋에서 추가된라인을 기준으로

JSON 다운로드/타임라인처리등은수동으로 시작파일 전체 소스 분석을 하

면 커밋마다 관리해야 한다전체 소스의 파싱은 작업이 너무 크다

삭제된 라인은 의미없음

Page 54: Popular Convention 개발기

파서 구현 언어별로 별도로 구성 정규식으로 단순 비교 해당 패턴에 맞으면 +1 파서만 테스트 코드 작성 전체 완성후 다른 언어를 추가

Java Scala Python

Page 56: Popular Convention 개발기

API 갯수 제한 문제

Github는 인증한 경우 시간당 5,000 API 요청

한시간에 PushEvent가 2~3,000개

하나의 PushEvent에 다수의 commit이 존재

파일 종류라도 알아내려면 commits API 필요

Star, fork 기준으로 정렬해서 API 갯수 만큼만 처리

Page 57: Popular Convention 개발기

실 데이터로 인한 오류

오류의 원인을 찾기 어려움

API 제한 갯수를 초과하면 갱신을 기다려야 함

파싱에서 오류 발견되면 데이터를 리셋해야 함

서비스 로직이 너무 복잡해짐

Page 58: Popular Convention 개발기

d3.js를처음 사용함

http://www.flickr.com/photos/honestlyspeakin/8658496702/

Page 59: Popular Convention 개발기

내가 생각한 D3.js

Page 60: Popular Convention 개발기

내가 만든 D3.js

Page 61: Popular Convention 개발기

써보고 싶은 욕심

약간 가벼워 보이는 Flight 선택

불필요하게 원페이지 사이트로 작성함

결국 오픈후 제거함

Page 62: Popular Convention 개발기

데이터의선형적인 증가

http://www.flickr.com/photos/78428166@N00/3829063385/

Page 63: Popular Convention 개발기

매 시간마다 하나의 도큐먼트가 생성

정확한 커밋 수 파악을 위해 Sha를 모두 보관

MongoDB 문서 한계인 4MB 초과로 오류 발생

Map-Reduce를 도입

데이터가 쌓일수록 처리시간이 오래 걸려서 캐싱 추가

Page 64: Popular Convention 개발기

서비스

Page 65: Popular Convention 개발기

심사를 받기 위해 데이터가 필요하므로

일주일정도 데이터를 쌓음

Page 66: Popular Convention 개발기

제출후에는 모든 배치를 멈춤

Page 67: Popular Convention 개발기

약간 기대?

Page 68: Popular Convention 개발기

대회 결과 공지 후

Page 69: Popular Convention 개발기

5월 20일 경 발표 예정실제 발표는 6월 27일

Page 70: Popular Convention 개발기

Node.js CPU 100%MongoDB CPU 100%

http://www.flickr.com/photos/neoporcupine/1866929252/

Page 71: Popular Convention 개발기

성능 테스트를 제대로 하지 않음

Page 72: Popular Convention 개발기

더이상 데이터를 쌓지 않으므로 사실상 정적 페이지나 마찬가지

Page 73: Popular Convention 개발기

nginx

Node.jsWAS

Page 74: Popular Convention 개발기

nginx

Node.jsWAS

Varnish

Page 75: Popular Convention 개발기

미리준비하자

http://www.flickr.com/photos/51025521@N04/6576977663/

Page 76: Popular Convention 개발기
Page 77: Popular Convention 개발기

코드 수정은 직접 해야 한다http://www.flickr.com/photos/scallau/4767358384/

Page 78: Popular Convention 개발기

리팩토링

Page 79: Popular Convention 개발기

잘 해놓고 기회를 날려버린 건 아닌가?

Page 80: Popular Convention 개발기
Page 81: Popular Convention 개발기

모델링을 다시해서데이터 양을 줄임

Page 82: Popular Convention 개발기

Ruby, C# 추가

Page 83: Popular Convention 개발기

공지 추가

Page 84: Popular Convention 개발기

http://www.flickr.com/photos/ralphandjenny/460698734/

고객 대응은 중요하다

Page 85: Popular Convention 개발기
Page 86: Popular Convention 개발기

haackedd의 블로그 포스팅 후

Page 87: Popular Convention 개발기

0

7500

15000

22500

30000

1w 2w 3w 4w 5w 6w 7w 8w 9w 10w 11w 12w 13w 14w 15w 16w

Github의����������� ������������������  발표

해외����������� ������������������  블로그에서����������� ������������������  소개됨

방문자

Page 88: Popular Convention 개발기

81174189

575

262

151

54

900

451

325

135

325발표 2주 후 현재

Page 89: Popular Convention 개발기

모래 사장에 나무 막대기만 갖고도 많은 일을 해낼 수 있습니다.

아이디어만 있다면 말이죠..

- Alan Kay

Page 91: Popular Convention 개발기

Question

?@[email protected]