Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Popular Convention 개발기
Search
Outsider
October 14, 2013
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Popular Convention 개발기
Deview 2013 Day 1에서 발표한 발표자료
Outsider
October 14, 2013
More Decks by Outsider
See All by Outsider
GitHub Actions의 다양한 기능 활용하기 - GitHub Universe '24 Recap
outsider
0
1.1k
당근 개발자 플랫폼은 어떤 문제를 해결하고 있는가?
outsider
1
4.2k
오픈소스에 기여할 때 알면 좋을 개발 프로세스
outsider
0
1.9k
DevOps를 가속화하는 플랫폼 엔지니어링
outsider
0
4.2k
클라우드 시대에 맞는 사이트 신뢰성 엔지니어
outsider
0
1.9k
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척? : GitHub Copilot, 어디까지 알아보셨나요
outsider
0
1.9k
Citizen 개발기
outsider
0
1.1k
오픈소스 뒤에 메인테이너 있어요
outsider
0
150
오픈소스에 기여할 때 해도 되는 일과 하면 안되는 일
outsider
0
110
Other Decks in Technology
See All in Technology
kaonavi Tech Night#1
kaonavi
0
130
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
360
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
130
全員がリーダーである世界へ キリマンジャロ登頂とシェアド・リーダー
jinwatanabe
0
110
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
450
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
290
AIが当たり前の組織で エンジニアはどう育つか
nishihira
1
540
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
440
GoでCコンパイラを作った話
repunit
0
140
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
450
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
11
4.1k
仕様駆動開発、導入半年。「本当に速くなってるの?」にデータで答える / AICon2026_hirakawa
rakus_dev
0
260
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
320
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Designing for humans not robots
tammielis
254
26k
Producing Creativity
orderedlist
PRO
348
40k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
Marketing to machines
jonoalderson
1
5.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Skip the Path - Find Your Career Trail
mkilby
1
170
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
Popular Convention 개발기 Outsider 2013.10.14 at Deview 2013
Outsider 코딩을 좋아하는 프로그래머
아이디어 Proof of Concept 실제 구현 서비스 대회 결과 공지
후 리팩토링
Popular Convention ?
Github의 코드를 기반으로 코딩 관례를 분석
None
Github Data Challenge II
https://github.com/blog/1544-data-challenge-ii-results
메인 페이지 18위 Hacker News
아이디어
Github 데이터 챌린지 공지 https://github.com/blog/1450-the-github-data-challenge-ii
http://www.flickr.com/photos/photoloni/6321527653/ 만들어 볼만한 아이디어가 없을까?
Github에는 엄청냔 양의 코드가 있으므로 잠재력이 높다
http://dailyjs.com/2012/12/24/javascript-survey-results/
Github에 실제 코드가 있는데 코딩 관례를 설문조사로 할 필요가 있을까?
Proof of Concept
http://www.flickr.com/photos/morberg/ 3842815564/
Github 타임라인으로 분석할 수 있는가? http://www.flickr.com/photos/morberg/ 3842815564/
Github 타임라인으로 분석할 수 있는가? http://www.flickr.com/photos/morberg/ 3842815564/ API로 분석할 코드를
얻을 수 있는가?
Github 타임라인으로 분석할 수 있는가? http://www.flickr.com/photos/morberg/ 3842815564/ API로 분석할 코드를
얻을 수 있는가? 코드를 기반으로 관례를 분석할 수 있는가?
초기에는 세부사항을 무시하라
Google BigQuery 사용해 본적 없음. 인증 어려움. 불필요한 과정에 시간
소비. http://www.flickr.com/photos/jezpage/ 4259659744/
구글의 Ilya Grigorik 매 시간마다 타임라인이 JSON 파일로 올라옴 $
wget http://data.githubarchive.org/2013-10-14-10.json.gz http://www.githubarchive.org/
Github Archive에서 JSON 파일 다운로드
Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트
Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트 타임라인의 PushEvent
추출
Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트 타임라인의 PushEvent
추출 Push의
Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트 타임라인의 PushEvent
추출 Github commits API로 커밋 내용 확인 Push의
Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트 타임라인의 PushEvent
추출 Github commits API로 커밋 내용 확인 커밋의
Github Archive에서 JSON 파일 다운로드 mongoimport로 MongoDB에 임포트 타임라인의 PushEvent
추출 Github commits API로 커밋 내용 확인 JavaScript 파서로 코딩 관례 분석 커밋의
가능하겠는데...
여기서 잠시 샛길로...
개인 프로젝트는 보통 학습의 목적 http://www.flickr.com/photos/lethaargic/3660097148/
보통 끝이 나지 않는다
None
None
None
아키텍처 설계도 많은 고민 후 테스트 코드를 철저히
http://www.flickr.com/photos/mattijn/4103100036/ 이렇게 하는게 과연 좋은가?
제약을 받아들여라
30여일 정도의 프로젝트 기간 기능과 시간에 대한 타협이 필요 http://www.flickr.com/photos/tacoekkel/
2770755895/
실제 구현
Server-side
d3.js Client-side
Goals 만들어진 데이터를 다른 사람들에게도 의미있는가? 코딩관례 분석으로 의미있는 데이터를
만들 수 있는가?
Github Archive에서 JSON 파일 다운로드
Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트
Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업
목록 컬렉션에 추가
Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업
목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리
Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업
목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리 Commits API로 지원하는 언어이면 파싱
Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업
목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리 Commits API로 지원하는 언어이면 파싱 커밋별로 관례의 점수를 매긴 후 디비에 저장
Github Archive에서 JSON 파일 다운로드 JSON 파일 MongoDB에 임포트 작업
목록 컬렉션에 추가 배치로 작업목록에 있는 타임라인을 처리 Commits API로 지원하는 언어이면 파싱 커밋별로 관례의 점수를 매긴 후 디비에 저장 한시간의 데이터를 언어별로 합산
핵심만 간단히 구현 코딩관례 분석은 커밋에서 추가된 라인을 기준으로 JSON
다운로드/타임라인 처리등은 수동으로 시작 파일 전체 소스 분석을 하 면 커밋마다 관리해야 한다 전체 소스의 파싱은 작업이 너무 크다 삭제된 라인은 의미없음
파서 구현 언어별로 별도로 구성 정규식으로 단순 비교 해당 패턴에
맞으면 +1 파서만 테스트 코드 작성 전체 완성후 다른 언어를 추가 Java Scala Python
http://www.flickr.com/photos/newtown_grafitti/ 5243248959/ 해결해야 할 어려움
API 갯수 제한 문제 Github는 인증한 경우 시간당 5,000 API
요청 한시간에 PushEvent가 2~3,000개 하나의 PushEvent에 다수의 commit이 존재 파일 종류라도 알아내려면 commits API 필요 Star, fork 기준으로 정렬해서 API 갯수 만큼만 처리
실 데이터로 인한 오류 오류의 원인을 찾기 어려움 API 제한
갯수를 초과하면 갱신을 기다려야 함 파싱에서 오류 발견되면 데이터를 리셋해야 함 서비스 로직이 너무 복잡해짐
d3.js를 처음 사용함 http://www.flickr.com/photos/honestlyspeakin/8658496702/
내가 생각한 D3.js
내가 만든 D3.js
써보고 싶은 욕심 약간 가벼워 보이는 Flight 선택 불필요하게 원페이지
사이트로 작성함 결국 오픈후 제거함
데이터의 선형적인 증가 http://www.flickr.com/photos/78428166@N00/3829063385/
매 시간마다 하나의 도큐먼트가 생성 정확한 커밋 수 파악을 위해
Sha를 모두 보관 MongoDB 문서 한계인 4MB 초과로 오류 발생 Map-Reduce를 도입 데이터가 쌓일수록 처리시간이 오래 걸려서 캐싱 추가
서비스
심사를 받기 위해 데이터가 필요하므로 일주일정도 데이터를 쌓음
제출후에는 모든 배치를 멈춤
약간 기대?
대회 결과 공지 후
5월 20일 경 발표 예정 실제 발표는 6월 27일
Node.js CPU 100% MongoDB CPU 100% http://www.flickr.com/photos/neoporcupine/1866929252/
성능 테스트를 제대로 하지 않음
더이상 데이터를 쌓지 않으므로 사실상 정적 페이지나 마찬가지
nginx Node.js WAS
nginx Node.js WAS Varnish
미리 준비하자 http://www.flickr.com/photos/51025521@N04/6576977663/
None
코드 수정은 직접 해야 한다 http://www.flickr.com/photos/scallau/4767358384/
리팩토링
잘 해놓고 기회를 날려버린 건 아닌가?
None
모델링을 다시해서 데이터 양을 줄임
Ruby, C# 추가
공지 추가
http://www.flickr.com/photos/ralphandjenny/460698734/ 고객 대응은 중요하다
None
IBBDLFEE࠶۽Ӓನझറ
0 7500 15000 22500 30000 1w 2w 3w 4w 5w
6w 7w 8w 9w 10w 11w 12w 13w 14w 15w 16w Github의
81 174 189 575 262 151 54 900 451 325
135 325 발표 2주 후 현재
모래 사장에 나무 막대기만 갖고도 많은 일을 해낼 수 있습니다.
아이디어만 있다면 말이죠.. - Alan Kay
http://www.flickr.com/photos/20106852@N00/2238271809/
Question ? @Outsideris
[email protected]