[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서...

Post on 21-Jan-2018

420 views 7 download

Transcript of [SOSCON 2017] 네이버의 FE 오픈소스: jindo에서...

   네이버의 FE 오픈소스에서  까지

  2017.10.26 

 박재성

네이버의 FE 오픈소스Front-End open source

 

 

 

History (2007 ~ 2017)2007.03 Jindo 개발

2008.12.31

2010 Jindo 외부 공개 (네이버 개발자센터)

2010.12.15  ( )

2010.12.29 Jindo Component(JC) 공개

2011.08.16

2012.04 Jindo v2.0

2014.12.23 JindoJS -   /   /   (GitHub 공개)

2015.12.24  - jQuery 기반의 UI 컴포넌트

2016.10.24

2017.06.08  - 차트 라이브러리

2017.08.17 egjs v2.0 - jQuery 의존성 제거

SmartEditor v1.0 공개

SmartEditor v2.0 Repo

Jindo Mobile Component(JMC) 공개

Jindo JMC JC

egjs 발표

JindoJS 개발 중단 발표

billboard.js 공개

초기의 개발은실무적인 고민의 결과물로,

오픈소스로 공개를 위한

목적의 개발은 아니었다.

오늘 발표는 과거 경험을 공유해

성공적인 오픈소스 등장에도움을 주고 싶기 때문

네이버에서의 시행착오는

다른 미래의 오픈소스 성공을 위한

도움이 될수 있지 않을까?

'역사'를 아는 것은현재를 더 잘 이해하고,

더 나은 미래를 위해

중요하기 때문[참고] A Brief History of JavaScript:  ,   

  

#1 #2A brief history of CSS until 2016

A history of HTMLSolar System of JS

FE가 전문 영역으로 인정된 것은

불과 최근 몇년 전에 불과우리는 주로 '소비'하는 입장

다른 영역에서 성공한 국내 오픈소스들도 있지만...

FE 기술영역에서는 두드러진 결과를 얻고 있지는 못하다.

혹시, 기억하시나요?

 0:00 / 0:31

https://www.youtube.com/watch?v=vZwbdgzg3Tc

기억하고 계시다면... '아ㅈ' 아, 아닙니다.

수많은 자체 개발 FE 라이브러리들이

이전에도 그리고 지금도네이버 서비스의 곳곳에서 '여러분'들을 만나고 있습니다.

지난 10년의 기록2007 ~ 2017

 

2007 ~ 2016

AJAX 프레임워크

당시 라이브러리들에 대한 아쉬움네이버 서비스들에서의 빠른 이슈대응 필요성

[참고]   ( ) 자바스크립트 UI 개발과 Jindo 프레임워크 무료 eBookNHN DeView 2008: Jindo & SmartEditor

2013년 무렵까지 네이버 서비스의

기본 라이브러리로 사용

최초 버전은 Native 객체를 확장

["apple", "banana", "orange"].has("orange"); // Jindo classic

Jindo2 - wrapper 클래스를 사용

$A(["apple", "banana", "orange"]).has("orange"); // Jindo2

 Architecture

[참고] NHN의 안과 밖: Jindo와 jQuery

 

2008 ~ present ( 은 미공개)v3.0

WYSIWYG 웹에디터카페/블로그 등 UGC 서비스를 위한 필요성공통 에디터가 없었음당시 기존 에디터들의 기능 미약외부 사용자들의 요구는 점점 커지고 다양해짐

최초 버전은 5명이 6개월간 개발

[참고]    

NAVER Inside: SmartEditor그 이름은 '스마트 에디터™' 입니다.네이버 스마트에디터가 나오기까지

는 

네이버의 다양한 UGC 플랫폼에서 기본 에디터로 사용

[참고]   / GitHub Online Demo

 

Mobile Component (JMC)2011 ~ 2016

 후, 2009/11월 iPhone 3GS 국내출시

모바일의 폭발적인 성장으로 인한 필요성크로스 플랫폼과 앱스러운 UI/UX 개발 위해

[참고]    

DEVIEW 2011: 모바일 웹 UI 개발 아직도 맨땅에 삽질부터 하십니까?쉽고 빠른 모바일 웹 UI 개발 Jindo 기반 모바일 전용 컴포넌트, JMC

40여개 이상의

모바일 UI 컴포넌트다양한 모바일 환경 지원 강점 

[참고] JMC API

Behind Story당시 코드네임은 개 품종에서 차용 관례

JindoHuskySharpeiBeaglePekingeseCollie

[참고] http://www.akc.org/dog-breeds/

 

2015 ~ present

개발 당시는 웹 프레임워크들 등장 초기 시점

jQuery → 업계의 de facto standardjQuery에서 사용 가능한 모바일 컴포넌트 필요기존 JMC의 대체 라이브러리 역할도 포함

[참고] 네이버의 모던 웹 라이브러리

10종의 모바일/데스크탑UI/UX 컴포넌트들

Component Description

사용자 입력 반응 응용

캐로셀 UI 구성

무한 카드 UI 스크롤

360도 뷰어

요소의 뷰포트 노출 확인

브라우저 정보

화면 회전 이벤트

페이지 상태 저장 (BFCache)

jQuery 애니메이션 진행 제어

jQuery animate 확장

Axes

Flicking

InfiniteGrid

View360

Visible

Agent

Rotate

Persist

$PauseResume

$Transform

egjs-flickingBrown

egjs-axes

 

2017.06.08 ~ present

재사용 가능한 쉬운 인터페이스 차트 라이브러리

C3.js fork 프로젝트

네이버 블로그/포스트 통계 개선으로 시작라이브러리 사용의 공통화

[참고]   [네이버 블로그] 블로그 통계가 새로워졌습니다![네이버 포스트] 훨씬 좋아진 통계, 지금 제공합니다!

Declarative APIReadable & Understandable: 쉬운 인터페이스

bb.generate({ bindto: "#chart", data: { columns: [ ["data1", 30, 200, 100, 400, 150, 250], ["data2", 100, 80, 130, 240, 350, 90], ["data3", 150, 120, 58, 135, 258, 159] ], type: "bar", colors: { data1: "#2acefd", data2: "#f87070", data3: "#1f77b4" }, labels: true } });

[참고] billboard.js API

Let's Play Chart!

bar   line   spline   pie   gauge   area‑spline   step   donut   scatter

30

200

100

400

150

250

100

80

130

240

350

90

150

120

58

135

258

159

0 1 2 3 4 5

0

50

100

150

200

250

300

350

400

450

data1 data2 data3

초기 웹개발 환경에선

'네이버'가 만든 것에 대한 신뢰가 존재

그러나,점점 '네이버'만의 것은 범용성과 

글로벌한 '성장'은 한계성 존재

반성각각의 Product 들은 목적이 분명했다.

그러나 그 목적이 '오픈소스'와 완전히 부합 했다고 보기는 힘들었던 것 같다.

형식적 '오픈소스' 였던 것은 아닐까?

관점의 변화Phase 1: 2007 ~ 2014

내부 경쟁력과 빠른 대응을 위해

Phase 2: 2015 ~ 현재오픈소스를 바라보는 '관점'과 '원칙'의 변화

기본 원칙 1오픈소스의 활용

좋은 오픈소스가 있다면, 사용한다.

필요한 경우, 커스터마이징 한다.

기본 원칙 2직접 개발하는 경우

기능/성능이 아쉬운 경우

전략적 기술확보 필요성

필요한 기능을 가진 라이브러리가 없는 경우

새로운 원칙에 따른

 개발 중단

무엇이 부족했나?외부 레퍼런스, 교육비용, 호환성

빠른 변화, 환경의 민첩한 대응

개발자들의 long term 커리어 및 발전 기여

기술적 고찰오픈소스의 중요 요소들

오픈소스의 중요 요소들안정성, 충분한 문서 그리고 책임감

[참고] http://opensourcesurvey.org/2017/

안정성 확보 방안들각 단계별 품질 유지를 위한 자동화 검사

커밋 관리를 위한 일관된   적용정적 검사(linting): 

을 통한 자동 검사 수행를 통한 품질 자동화 검사

커밋 로그 룰eslint-config-naver

commit/push hookCI

테스트 코드다양한 도구 활용:  ,  ,  , 

를 활용한 TC 수행커밋에는 TC가 포함 되어야 함

Mocha Chai Sinon KarmaHeadless browser

도구의 활용품질 향상을 위한 많은 도구들이 상용인 경우라도 

오픈소스에는 무료로 제공된다.

[참고]   Tools for Open SourceGitHub Marketplace

기웃거리기유명한 오픈소스 프로젝트들의 사례를 참고

commit log rule & hook (AngularJS, jQuery)

환경구성 (linting, test, build, etc.)

다른 프로젝트들의 package.json은 많은 것을 알려줄 수 있다.

집중과 선택JMC에서 경쟁력 있다고 판단된 것들만 

egjs 컴포넌트로 재개발

<JMC → egjs 전환비율>

오픈소스 사용 전환 (67%)

직접 개발 (22%)

개발 중단 (11%

)

능동적 변화전통적인 DOM 직접 핸들링(like jQuery) → Framework 개발 패러다임 전환

의존성을 갖지 않는 컴포넌트 요구 증가

 v2.0은? 

1개의 공통 라이브러리에서, 

10개의 독립된 컴포넌트로의 전환

흐름에 맡기다.의 경우, 

프로젝트 지속성 의문에 따른 fork 

C3.Js 기능 확장 개발로 시작 → Fork 후 외부공개

[참고] DEVIEW 2017: 14일 만에 GitHub 스타 1K 받은 차트 오픈소스 개발기

적극적 참여 시도2015, jQuery 재단 멤버십

[참고] Wayback Machine: jQuery Foundation Members

좋은 오픈소스 개발을 위한더 깊은 이해를 위한 노력들

Internal 분석 시리즈다른 라이브러리에 대한 이해

AngularJS 도입 선택 가이드jQuery 세부 분석 시리즈React 적용 가이드 시리즈AMP는 어떻게 웹 페이지의 성능을 높일 수 있나

JavaScript/FE 개발 동향 & 기술분석생태계와 기술에 대한 이해 & 분석

2017년과 이후 JavaScript의 동향2016년과 이후 JavaScript의 동향하드웨어 가속에 대한 이해와 적용웹 컴포넌트터치 이벤트를 이용한 사용자 제스처 분석JavaScript 표준을 위한 움직임: CommonJS와 AMD

홍보전략오픈소스의 성장

특정 tag 들에 대한 답변시도 ( ,  , etc.)carousel jquery

Reputation(평판/활동 점수)?   

신규 tag 생성과 신뢰도 등, 활동을 위한 기본적 조건을 위해 필요

라이브러리 자체 인지도가 낮아 큰 반응 얻지 못함

직접 발로 뛰어 보기다수의 'Echo' 사이트에 등록하기

 

 

많은 곳에서 해당 사이트에 등록된 정보를 활용, 재전파 한다.

뉴스레터 소개 요청하기 JavaScript Weekly

[참고] FE 관련 뉴스레터는 사실, 한 곳에서 발행 https://cooperpress.com/

JavaScript Weekly 소개

Issues 308 (16.11.03): Issues 338 (17.06.09): Issues 353 (17.09.22): 

egjs: jQuery-Based UI Interactions, Effects, and Utilities Librarybillboard.js: A Chart Library, based on D3 v4+billboard.js: A Simple Chart Library Based on D3 V4

 Trending!: JavaScript 언어부문 3위 기록

[참고] https://github.com/trending/javascript

오픈소스어떤 의미와 가치일까?

오픈소스성공을 위한 조건들공개는 완성이 아니라, 이제 시작일 뿐

빠른 피드백과 대응

충실한 문서와 데모

지속적 기능 추가/bug fix 및 정기적 릴리즈

Corporate Open Source?패러다임의 전환 

개인의 노력을 통한 발전에서 기업의 후원을 받는 개발로의 전환 

Angular(Google) / React(Facebook)

다른 이들에게 좋지만, 우리(기업)에게 더 좋을 수 있는

내부 이슈의 빠른 대응성신규 기능 구현 가능성 상승대외적 이미지 향상 ...

Why Do

Open Source?세상에서 내가 도움 받은 것에 대해 다시 기여하는 의미있고 가치있는 행동

[참고]   네이버 오픈소스 가이드GitHub Open Source Guides

The Bad

[참고] Equifax blames open-source software for its record-breaking security breach: Report

The Good

[참고] https://twitter.com/s0yuka/status/874530243595436032

지난 10년간의

시간과 도전을 통해우리만의 것이 아닌 모두를 위한 개발

시도할 수록 더 나은 결과

글로벌한 오픈소스 개발의 자신감

오픈소스는 어렵지만, 큰 가치 존재

❤ 

 

T

h

a

n

k

 

Y

o

u!