Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Popular Convention 개발기

Outsider
October 14, 2013

Popular Convention 개발기

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

Outsider

October 14, 2013
Tweet

More Decks by Outsider

Other Decks in Technology

Transcript

  1. Google BigQuery 사용해 본적 없음. 인증 어려움. 불필요한 과정에 시간

    소비. http://www.flickr.com/photos/jezpage/ 4259659744/
  2. 구글의 Ilya Grigorik 매 시간마다 타임라인이 JSON 파일로 올라옴 $

    wget http://data.githubarchive.org/2013-10-14-10.json.gz http://www.githubarchive.org/
  3. Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트 타임라인의 PushEvent

    추출 Github commits API로 커밋 내용 확인 JavaScript 파서로 코딩 관례 분석 커밋의
  4. Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업

    목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리
  5. Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업

    목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리 Commits API로 지원하는 언어이면 파싱
  6. Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업

    목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리 Commits API로 지원하는 언어이면 파싱 커밋별로 관례의 점수를 매긴 후 디비에 저장
  7. Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업

    목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리 Commits API로 지원하는 언어이면 파싱 커밋별로 관례의 점수를 매긴 후 디비에 저장 한시간의 데이터를 언어별로 합산
  8. 핵심만 간단히 구현 코딩관례 분석은 커밋에서 추가된 라인을 기준으로 JSON

    다운로드/타임라인 처리등은 수동으로 시작 파일 전체 소스 분석을 하 면 커밋마다 관리해야 한다 전체 소스의 파싱은 작업이 너무 크다 삭제된 라인은 의미없음
  9. 파서 구현 언어별로 별도로 구성 정규식으로 단순 비교 해당 패턴에

    맞으면 +1 파서만 테스트 코드 작성 전체 완성후 다른 언어를 추가 Java Scala Python
  10. API 갯수 제한 문제 Github는 인증한 경우 시간당 5,000 API

    요청 한시간에 PushEvent가 2~3,000개 하나의 PushEvent에 다수의 commit이 존재 파일 종류라도 알아내려면 commits API 필요 Star, fork 기준으로 정렬해서 API 갯수 만큼만 처리
  11. 실 데이터로 인한 오류 오류의 원인을 찾기 어려움 API 제한

    갯수를 초과하면 갱신을 기다려야 함 파싱에서 오류 발견되면 데이터를 리셋해야 함 서비스 로직이 너무 복잡해짐
  12. 매 시간마다 하나의 도큐먼트가 생성 정확한 커밋 수 파악을 위해

    Sha를 모두 보관 MongoDB 문서 한계인 4MB 초과로 오류 발생 Map-Reduce를 도입 데이터가 쌓일수록 처리시간이 오래 걸려서 캐싱 추가
  13. 0 7500 15000 22500 30000 1w 2w 3w 4w 5w

    6w 7w 8w 9w 10w 11w 12w 13w 14w 15w 16w Github의
  14. 81 174 189 575 262 151 54 900 451 325

    135 325 발표 2주 후 현재