박호준
시니어 소프트웨어 엔지니어
LinkedIn
www.linkedin.com/in/justindoit
토종 개발자가 바라본
실리콘벨리 개발 트랜드
2
오늘은,
 간략한 소개
 링크드인 빅데이타 활용 사례
 링크드인 개발 프로세스 소개
 프로젝트 개발 스택 공유
 질의 응답
3
소개
 링크드인 비지니스 데이타 분석팀 시니어 소프트웨어 개발자 (현재)
 실리콘벨리 스타트업 프론트엔드 개발자 (Gala-net, SugarCRM)
 뉴욕 주립대 컴퓨터 공학 학사
 한국에서 5년간 웹 개발자 및 DBA (네오액트, 지니키즈, WCG)
4
링크드인 소개
11 years old
5
링크드인 소개
330,000,000
Members
6
링크드인 소개
25,000,000,000
Page Views
7
링크드인 소개
20,000,000,000
Connections
8
링크드인 소개
4,000,000
Companies
9
링크드인 비지니스 모델
LTS
Talent Solution
LMS
Marketing
Solution
LSS
Sales Solution
Hire Market Sell
webdev @ Linked[in]
Vertical Teams
Horizontal Teams
Play at Linkedin
Dust.li
Team
Money
Sales
Navigator
Branding
And
Marketing
pEMBERly
Recruit
Platform
Slideshare
REST.li
Linkedin
Profile[in]Mail
Davinci
11
링크드인 빅데이터 팀
What can we do
with Linkedin data
?
Sales
Talent flow between companies
Product & engineering
Is it simple?
Member attributes Page View events data
Photo Credit: https://www.flickr.com/photos/johnjoh/1060267344
Our data vineyard
Data infra: collect & ferment data
Collect & Ferment Data
Kafka + Hadoop
Serve Data
Pinot
Taste Data
Easy-to-use visualization
Data Computation
ETL
HDFS
Y
A
R
N
Map-Reduce Spark Tez
Pig Hive Cubert
Data infra: collect & ferment data
Collect & Ferment Data
Kafka + Hadoop
Serve Data
Pinot
Taste Data
Easy-to-use visualization
Products for members/customers with real-time
interactive analytics
• Who’s Viewed Your Profile
• Ads Reporting
• Jobs Analytics
Categories of interactive analytics products
Interactive business analytics for internal use
• How feature X is performing
Real-time business monitoring
• Page view changes across mobile devices
Reporting UI: serve & taste data
Collect & Ferment Data
Kafka + Hadoop
Serve Data
Pinot
Taste Data
Easy-to-use visualization
I want to access big data without
running SQL
Business need
Start a new dashboard with one click
Select what metrics/dimensions you want
Charts are rendered in just a few seconds
Zoom into a single chart
Filter on various dimensions
28
링크드인 개발 프로세스
How build a product at Linkedin
Daily Scrum
How build a product at Linkedin
 매일 오전 스크럼을 통한
의견교환
How build a product at Linkedin
 매일 오전 스크럼을 통한
의견교환
 개발자 스스로 결정하는
완료시점
How build a product at Linkedin
 매일 오전 스크럼을 통한
의견교환
 개발자 스스로 결정하는
완료시점
 언제 어디서든 진행상황을
공유가능
How build a product at Linkedin
How build a product at Linkedin
Rest.li (Data API)
https://github.com/linkedin/rest.li/wiki
Rest.li (Data API)
코드 리뷰
https://www.reviewboard.org/
코드 리뷰
코드 리뷰
코드 리뷰
41
A/B Testing (내부 테스트)
42
A/B Testing
43
A/B Testing (전체 유저대상)
44
A/B Testing
재발생되는 버그를 잡기 위해 웹드라이버 테스트를 활용
45
테스팅: Selenium WebDriver Tests
46
LID (Linkedin Deployment)
47
CRT
48
[in]Graph (Monitoring)
49
링크드인 개발 스택
50
Web Frameworks, recommend?
 Play
 Spring
 Ruby on Rails
 Yii
 Node.JS
 …
 Angular
 Backbone
 jQuery
 YUI
 Require
 Knockout
 Bootstrap
 …
51
Comparison
 http://todomvc.com/
52
We’re using,
53
개발 사례: BackboneJS on PHP
 Pure SPA
 Metadata Manager
 Data Manager
54
개발 사례: BackboneJS on Java Play
 Hybrid Web Application
 sbt-concat, sass compiler
 Model Hierarchy
55
개발 사례: AngularJS on Java Play
 Pure SPA
 Grunt Builder
 Less compiler by Grunt
56
왜 리소스 관리자가 중요한가?
 수많은 JS/CSS 라이브러리의 증가
 라이브러리 버젼 관리
 중복된 리소스 로딩으로 인한 페이지 로딩 지연
57
파일 및 디렉토리 구성(1)
 리소스 종류별로 구분
58
파일 및 디렉토리 구성(2)
 각 기능별로 구성
59
메타 데이타 관리자
 Sort the dependent modules (필수 모듈 순서대로 정렬)
FlexListView
extends: ListView
ListView
DashableListView
extends: ListView
RecordListView
Extends: FlexListView
ListView
FlexListView
extends: ListView
DashableListView
extends: ListView
RecordListView
Extends: FlexListView
Great Design patterns are reusable, modular
expressions of what’s going on in your code.
좋은 패턴 디자인은 재사용이 가능하고
무엇을 하려고 하는지 코드에 그대로 표현되어 나타난다.
They allow you to communicate to other
developers simply by the way you code,
in addition to being easily maintainable
themselves
패턴 디자인은 다른 개발자와의 코드 교환이 쉬우며,
각자가 관리 및 유지하기가 쉽게 해준다. 60
왜 디자인 패턴을 사용해야 하나?
61
디자인 패턴들
 Factory
 Singleton
 MVC
 Strongly OOP
 Mixin
 Event Driven
62
객체 지향적 프로그래밍
 코드를 재활용하고 재사용가능
 직관적인 코드 디자인
 시간당 생산량 증가
ListView
FlexListView
SubPanelListView
DashableListView
RecordListViewSelectionListView
Mixin pool
63
Decorator: 믹스인 (플러그인)
RecordListView
extends: ListView
ErrorDecoration
Editable
MergeDuplicates
CreateView
Audit
FindDuplicates
Tooltip
ListView MergeDuplicateView
Timeago
ActivityStreamView
64
성능 튜닝
 중복된 이벤트 감시자를 줄인다
 이벤트 감시자 최적화
 Backbone: _events stack
 Angular: $__watchers, and $scope variables in $digest cycle
 다음은 얼마나 많은 감시자가 추가 되었을지 생각해 봅시다.
65
브라우져는 죄가 없습니다.
66
메모리 관리
 개별적으로 할당한 메모리는
책임지고 해지 시켜준다
67
메모리 관리: 계속
 유닛 테스트를 활용하여 메모리
누수 여부를 파악 한다
68
디버깅
 파이어버그
 크롬 개발자 도구
 Network filtering
 Recording
 Profiler
 Local Storage in resources tab
69
유닛 테스트
 Jasmine, Karma, Sinon
 Travis CI
 Selenium WebDriver
70
Q & A
71
개인적인 질문
편하게 이메일로 보내주세요
^^

토종 개발자가 바라본 실리콘밸리 개발 트랜드

Editor's Notes

  • #3 크라우드 서비스의 발전은 프론트엔드와 연관됨
  • #4 SugarCRM에서 BackboneJS, PHP API Framework을 이용하여 싱글페이지어플리케이션을 개발
  • #5 11주년
  • #6 3억3천만명, 200+ 국가, 23개 언어
  • #7 년간 2백5십억 페이지뷰
  • #8 200억, 액티브 30만개의 잡포스팅
  • #9 4백만 회사 페이지, 만여개의 프로패녀설 스킬셋, 3백만개의 활동하고 있는 회사 프로파일 페이지
  • #16 자료의 복잡성
  • #18 Easybi steps -> 1. connect the source in pinot (bottle opener), 2. select time/dimension/metrics (choose glass), 3. group charts in one dashboard (taste) Acquire Parse Filter Mine Represent Refine Interact
  • #19 링크드인에서는 아파치 카프카 (which is built and opensourced at Linkedin)를 이용해 모든 실시간 자료를 기록하고 있습니다. 카프카를 포함한 모든 다른 데이타 리소스는 ETL (Extract, Transform, Load) 과정을 통해서 하둡 데이터 웨어하우스에 기록됩니다. 데이타 사이언티스트들은 주로 Pig, Hive or java MR 등을 사용하여 분석이 필요한 메트릭스 자료를 수집하고 계산해냅니다. 하지만 링크드인역시 엄청난 데이타 사이즈로 인해서 조인등 데이타 수집과정에 엄청한 시간이 소요되기때문에 Cubert라는 자체 프레임워크를 개발하여 분산 처리된 자료를 데이타 사이언티스트와 같은 빅데이타 수요자 인프라에 제공합니다.
  • #20 그럼 복잡하고 다양한 데이타 분석자료를 어떻게 가공하고 만들어낼까요?
  • #21 링크드인은 데이타 회사로 내부에서 일어나는 빅데이타를 여러가지 측면에서 활용하고 있습니다. 수많은 활동을 분석하여 트랜드를 공개하는 who’s viewed your profile: 이 제품을 통해 어떤 분야 있는 사람이 어떤 구직자들에게 관심을 가지고 있는지를 파악할 수 있게됩니다. Ads Reporting은 광고주에게 광고된 자료가 어떤 효과가 있는지를 객관적으로 분석하여 보여줌으로써 광고효과를 파악하게 해줍니다. 프리미엄서비스를 사용해보시면 이외에 수많은 수치 자료들을 확인해보실 수 있습니다.. 다음으로 중요하게 사용되고 있는 분야는 PM들에게 현재 공개된 제품의 반응을 실시간적으로 파악하게 해줍니다. Business Monitoring: 가장 중요한 부분중 하나인 비지니스 퍼포먼스 모니터링입니다. 실시간적으로 실제 성장과 가장 민감하게 연결된 자료를 파악함으로써 문제점 혹은 경쟁사의 영향력등을 파악하고 있습니다. The origin of this infrastructure is in team money with monetization use cases. There were many analytics usecases from jobs, ads to recruiter that were demanding a single leverageable system. We did extensive research and couldn’t find any existing systems that’s designed specifically for this at that time. That’s how Pinot was born. Now the leverage is so huge that the WVMP page is powered by Pinot. Little later, the Business Analytics team saw the power of the system, they wanted to take the data that is in hadoop and provide an ability to interact with it. We worked with them and setup a cluster to support Sponsored Content In Network Updates Dashboard. This is to help our PM’s interact with the data and get insights on how their product is being used. Once that’s proven to be useful, now we are trying to use pinot to monitor on business metrics, like monitoring ads revenue drop across geo etc.
  • #22 Easybi steps -> 1. connect the source in pinot (bottle opener), 2. select time/dimension/metrics (choose glass), 3. group charts in one dashboard (taste) Acquire Parse Filter Mine Represent Refine Interact
  • #23 Easybi steps -> 1. connect the source in pinot (bottle opener), 2. select time/dimension/metrics (choose glass), 3. group charts in one dashboard (taste) Acquire Parse Filter Mine Represent Refine Interact
  • #24 Dashboard name: Marketing Hide left bar at first Time range doesn’t match
  • #25 Dashboard name: Marketing Hide left bar at first Time range doesn’t match
  • #26 Dashboard name: Marketing Hide left bar at first Time range doesn’t match
  • #27 Dashboard name: Marketing Hide left bar at first Time range doesn’t match
  • #28 Dashboard name: Marketing Hide left bar at first Time range doesn’t match
  • #33 원격으로 공유가능
  • #36 툴은 인턴들 과제로 많이 할당됨
  • #37 Startup은 Github를 주로 사용하는 추세
  • #38 https://www.reviewboard.org/ Startup은 Github를 주로 사용하는 추세
  • #39 https://www.reviewboard.org/ Startup은 Github를 주로 사용하는 추세
  • #51 좋은것은 없다 다만 MVC 패턴이 잘갖춰진 프레임워크를 고르자
  • #52 좋은것은 없다 다만 MVC 패턴이 잘갖춰진 프레임워크를 고르자
  • #53 좋은것은 없다 다만 MVC 패턴이 잘갖춰진 프레임워크를 고르자
  • #60 데모와 함께 소개
  • #61 A joy is not to be attached deeply cause attachement brings suffer
  • #62 JS 경우 event based async 랭귀지이기때문에 설계가 중요 Front-end also follows software design patterns
  • #63 데모와 함께 소개
  • #67 크롬 시크릿(incognito) 모드로 체크할것!
  • #68 크롬 시크릿(incognito) 모드로 체크할것!