SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
네이버의
모던웹
라이브러리
•egj
s
•
24th October, 2016
박재성 - AU개발랩
프롤로그
OOO 기능을 개발해야 하는 상황,
어떻게 하시나요?
아마도 다음 옵션 중 한가지
1) 직접 개발
2) 오픈소스 사용
1) 직접 개발
다양한 환경에서의 동작 보장 필요
체크 리스트
성능?
특정 단말기에서의 버그/이슈 처리?
안정성 보장은 어떻게?
지속적 업데이트(기능개선, 버그픽스, 등) 수행 계획은?
2) 오픈소스 사용
안정성과 검증된
라이브러리를 찾는게 중요
체크 리스트
컴포넌트? 모듈? 라이브러리?
충분한 성능과 환경에서 검증이 되었나?
꾸준한 업데이트가 이루어지는가?
잠깐,
오픈소스 검색은
어떻게 하시나요?
너 믿고 쓸만하니?
github 지표들 (star, fork, watch)
인기도 -
stackover៯�ow 게시글(질문/답변) 수
마지막 commit 날짜
충분한 레퍼런스 문서 여부
기타 등등...
https://stats.js.org/
비용과 안정성 고려시
오픈소스 사용이
현실적 방법
 
egjs는 주요 웹 UI/UX 개발을 돕는 UI 인터랙션, 이펙트, 유
틸리티로 구성된 자바스크립트 라이브러리
5개의 컴포넌트
4개의 jQuery 확장 플러그인
2개의 커스텀 이벤트
egjs architecture
주요 구성요소
컴포넌트
eg 유틸리티 모음
MovableCoord 사용자의 동작을 가상 좌표계의 논리적 좌표로 변경
Flicking 플리킹 UI를 구현
in៯�niteGrid 콘텐츠가 있는 카드 엘리먼트를 그리드 레이아웃에 무한으로 배치
Visible 엘리먼트가 기준 엘리먼트나 뷰포트 안에 보이는지 확인
jQuery
확장 플러그인
persist 웹 페이지의 현재 상태를 JSON 형식으로 저장하는 캐시 인터페이스
pre៯�xCss CSS 벤더 프리픽스를 지원하지 않는 일부 jQuery 버전을 사용할 때 제조사 접두어를 지원
animate jQuery.animate() 메서드를 확장해 transform과 3D 가속을 지원
pause / resume jQuery.animate()로 실행한 애니메이션을 일시 정지 및 재실행
이벤트
rotate 모바일 기기의 회전을 감지하는 이벤트
scrollend 스크롤의 마지막 시점을 감지하는 이벤트
Is yet another
library?
빠른 이슈 대응과 내부
니즈(UI/UX/기능) 충족을 목표
(2004)
(2010)
(2011)
Jindo
Jindo Component
Jindo Mobile Component
▪ [2011 deview]
▪ [2014 deview]
모바일 웹UI 개발, 아직도 맨땅에 삽질부터 하십니까?
자바스크립트 라이브러리 개발/운영 경험기
그러나... lack of
외부 레퍼런스, 교육비용, 호환성
빠른 변화, 환경의 민첩한 대응
개발자들의 long term 커리어 및 발전 기여
아쉽지만, fade-out 결정
좋은 라이브러리를
만들기 위한 여정
의 경험과 노하우를 잇자.
기본 원칙 1
오픈소스의 활용
좋은 오픈소스가 있다면, 사용한다.
필요한 경우, 커스터마이징 한다.
기본 원칙 2
직접 개발하는 경우
기능/성능이 아쉬운 경우
전략적 기술확보 필요성
필요한 기능을 가진 라이브러리가 없는 경우
도전적인 문제들
브라우저 커버리지
레거시 부터 최신까지
네이버 접속 브라우저 점유율 (2016/09기준)
71.7%
19.8%
IE Chrome Edge Safari Samsung Browser Firefox WebView inapp-search etc
레거시 브라우저는?
IE 7,8: 약 8% 내외
Android 2.3.x ~ 4.3.x: 약 6.5% 내외
국내 전체 점유율은? (IE8 약 1%) (참고: )StatCounter 2015/09 ~ 2016/09
사용자 니즈가 다할때까지
그 외?
성능, 성능, 그리고 성능
안정성
글로벌 사용자/컨트리뷰터 확보를 통한 경쟁력
네이버 서비스만이 아닌 웹 생태계 도움되는
필요에 의해
만들다.
원칙 : 필요한 기능을 가진 라이브러리가 없는 경우
사례#1: 불편한 사용자 경험
긴 동적 목록형 컨텐츠를 스크롤해서
보다가, 해당 컨텐츠를 보고
다시 돌아왔더니 목록 처음으로
이동 되어버려서 보고있던 곳까지
다시 스크롤 해서 이동하다보면...
!@#!@@#!
?
(Back-Forward)
BFCache
이전 페이지로 복귀 시, 이전 상태로 복원하는 캐시
컨텐츠 소비 흐름
페이지 상태 값?
페이지의 스크롤 위치
동적으로 구성된 컨텐츠 UI
자바스크립트의 특정 상태 값, 등등
BFCache 지원환경:
iOS Safari 4.x+는 지원
Android 4.4+ stock &
Chrome(스크롤 위치만 지원) 미지원
$.persist()
페이지 상태 값의
'데이터 저장/복원' 캐시 인터페이스
처음 개발땐
BFCache의 복원과 유사하게
이벤트 바인딩 형식
  $(window).on("persist", 
    function(event, state) { 
        ... 
  });
어라?
데이터 복원 시점이 서비스 마다 다름
이벤트 발생 시점과 데이터 사용 시점의 불일치
API 형태로 변경
원하는 시점에 API 호출
  $.persist("CACHE­KEY");        // getter 
  $.persist("CACHE­KEY", data);  // setter
스토리지 문제
브라우저 마다 다른 저장
Private mode 에서 Web Storage 이슈 ( )
quota limit
Safari
$.persist() 스토리지 사용순서:
(session → local)
→
Web Storage
history.state
사례#2: 기능성 부족
애니메이션을 쉽게 구현할 수 있는 .
하지만, 크로스 브라우징 이슈로 'transform' 속성 지원되지 않음
jQuery.animate()
  $el.animate({ 
    transform: "translate3d(0,200,0)" 
  }, 1000);
이미 있었다.
jquery.transit
jquery.transform
그런데...
transform3d 미지원
.animate() 인터페이스 및 기능 미약
고민 #1
fork/contribution 접근
jquery.transit
→ $el.transition() 인터페이스 다름
jquery.transfrom
→ heterogeneous(동치 좌표계) matrix를
transform 변경
향후, transform3d 고려시 어려움
▪ [참고] Understanding the CSS Transforms Matrix
고민 #2
인터페이스와 상대 값의 처리는?
기존 transform 사용 방법과 동일하게 처리 필요
상대 값 처리를 위한 '+=, -='등의 표현식 사용
고민 #3
transform 처리는
고려 요소가 많더라.
적용 순서
 .animate({ transform:  // (1) 
    "scale(2) rotate(45deg) translateX(100px)" 
 }); 
 .animate({ transform:  // (2) 
    "rotate(45deg) translateX(100px) scale(2)" 
 }); 
 .animate({ transform:  // (3) 
    "translateX(100px) scale(2) rotate(45deg)" 
 });
Reset 1 2 3
http://codepen.io/netil/pen/JRwAGN
체이닝: 상대 값
 $elem 
  .animate({transform:  //(1) 
    "scale(2) rotate(45deg) translateX(100px)"}) 
  .animate({transform:  //(2) 
    "+=translateX(100px) +=rotate(45deg)"});
Reset 1 2 chaining
http://codepen.io/netil/pen/xEmvzG
체이닝: 절대 값
 $elem 
  .animate({transform:  // (1) 
    "scale(2) rotate(45deg) translateX(100px)"}) 
  .animate({transform:  // (2) 
    "translateX(100px)"});
Reset 1 2 chaining
http://codepen.io/netil/pen/EgGqOj
transform 순서
완벽한 중간 값은 복잡 matrix 연산 필요
Matrix 연산 줄이고, transform 연산으로 자연스럽게
그러나, 일부 상황(움직임 적은)에서 약간 부자연
유명 라이브러리들(ex. )도 순서 고려 못함
결국, 순서는 사용자 몫
Velocity.js
▪ [참고] jQuery 애니메이션은 어떻게 작동하는가? - / /기본 심화 응용
오픈소스 활용과
기술확보
원칙 : 좋은 오픈소스는 활용하자
eg.Flicking
패널을 쓸어 넘김 형태로 이동하는 플리킹 UI를 구현
Why?
흔히 사용되는 UI/UX
빠른 이슈 대응 필요
높은 브라우저 커버리지
지속적 성능요인 개선을 빠르게 적용
터치 제스처는 활용Hammer.js
렌더링 성능 향상
렌더링 성능을 위해 하드웨어 가속 적용
Layer hack이 일반적 (ex. translateZ(0))
will-change
변경이 발생할 속성을 브라우저에 힌트 주면, 사전 최적화
효율적 리소스 관리
(ex. GPU 메모리의 사용을 관리, 과도한 composite layer 생성 제한)
하드웨어 가속?
https://www.youtube.com/watch?v=jTRe1tvFYdE
▪ [Hello world] 하드웨어 가속에 대한 이해와 적용
시행착오
will-change
패널 이동하기 직전 설정, 이동 후 제거
브라우저가 holding 하고 있을수 있는 리소스 release 위해
사용 후, 제거 권고 ( )
설정 제거가 단시간에 반복해 이루어지는 형태엔 부적합
→ 프레임별 rasterization 비용이 크게 증가
Always Remove will-change
시행착오 (cont'd)
CSS z-index
Stacking order로 의도치 않은 하드웨어 가속
(composite layer 생성)
방지 위해 적절하다고 판단되는 'z-index:2000' 설정
vseg.Flicking Slick
Initialization
100개의 패널을 갖도록 구성 (각각 10회 실행/결과 값은 ms)
Chrome 54 (Win7) iOS 10 (iPhone7) Android 6 (Galaxy S6 edge+)
20
50
100
140
180
eg.Flicking eg.Flicking (defaultIndex:99) Slick Slick (initialSlide:99)
Chrome 54 (Win7) iOS 10 (iPhone7) Android 6 (Galaxy S6 edge+)
eg.Flicking 18.812 21.05 86.6657
eg.Flicking
(defaultIndex:99)
20.303 21.56 85.5166
Slick 40.8045 37.8225 173.6231
Slick (initialSlide:99) 35.554 85.5166 166.6841
Moving from panel 1 to 10
300ms 스피드로 패널 1에서 10 까지 순차적으로 이동 (각각 10회 실행/결과 값은 ms)
Chrome 54 (Win7) iOS 10 (iPhone7) Android 6 (Galaxy S6 edge+)
eg.Flicking#1 eg.Flicking#2 Slick#1 Slick#2
Chrome 54 (Win7) iOS 10 (iPhone7) Android 6 (Galaxy S6 edge+)
eg.Flicking#1 307.786 322.1025 311.9379
eg.Flicking#2 309.0655 322.185 311.9109
Slick#1 302.475 305.9175 303.6311
Slick#2 302.202 304.8545 303.8173
▪ eg.Flicking:
▪ Slick:
http://s.codepen.io/netil/debug/zKaYGA/
http://s.codepen.io/netil/debug/ZpREbY/
기존 오픈소스에
대한 아쉬움
원칙 : 기능과 성능이 부족한 경우 직접 개발한다.
eg.InfiniteGrid
카드 엘리먼트를 그리드 레이아웃에 무한으로 배치
Why?
- 대표적 라이브러리
카드 배치 속도의 문제
카드 추가(무한)시 성능의 문제
Masonry
성능향상
DOM Recycling
일정 수 노드만 유지
뷰포트 밖 요소 제거
물리적 DOM과
논리적 데이터 분리
이미지 포함한 경우,
크기를 구하기 위해
complete 속성 비동기 확인
시행착오
스크롤 시 paint 비용을 줄이기 위해 하드웨어 가속
그러나,
카드 UI 특성상 컨텐츠가 매번 변경
composite layer의 잦은 업데이트는 성능저하 요인
하드웨어 가속은 무조건 좋은 것이 아니다.
상황에 맞게 적용 고려
▪ [2014 deview]
▪ [Hello world]
네이버 모바일 홈을 움직이는 반응형 무한스크롤의 비밀
네이버 쇼핑의 새로운 카드형 UI 라이브러리, eg.In៯�niteGrid
vseg.IniniteGrid Masonry
in塅�nityGrid VS masorny (Mobile) appending TEST
https://youtu.be/6Kv-NV0dZXw
라이브러리를 보다
잘 만들어 보자
환경 구분
1) 하드웨어 가속 환경에 대한 white list
수년간 직접적인 테스트를 통한 단말기 구분
  // 하드웨어 가속 사용이 적절한 단말기 여부를 반환  
  eg.isHWAccelerable(); 
https://naver.github.io/egjs/latest/doc/eg.html#isHWAccelerable
2) Transition 속성 사용환경 구분
  // CSS transition 사용이 적절한 환경 여부를 반환 
  eg.isTransitional(); 
https://naver.github.io/egjs/latest/doc/eg.html#isTransitional
안정성 확보 방안들
기본 고려 사항들
브라우저 호환성
다양한 환경(모바일, 테블릿, 데스크탑) 호환성
성능
[ 목표 ]
일관된 코드 품질 유지
지속적이며 끊김없는 테스트 수행을 목표
모든 코드에는 unit test가 존재해야 한다.
코드 스타일 유지
(부제: 너는 나 나는 너)
코드 스타일 검사 ( - 향후, ESLint로 전환 예정)
코드 정적 검사 ( )
개발자간 에디터와 IDE 등에서의 코드 스타일 유지
( )
JSCS
https://github.com/naver/egjs/blob/master/.jscsrc
JSHint
https://github.com/naver/egjs/blob/master/.jshintrc
EditorCon៯�g
https://github.com/naver/egjs/blob/master/.editorcon៯�g
자동화된 테스트
Total test cases: 3,591 (93% coverage)
Commit/Push 마다
commit hook( )을 통한 linting
CI( )를 통한 push 단위별 검증
husky
TravisCI
https://github.com/naver/egjs/tree/master/test/unit
실 환경 수동 QA
163개의 수동 테스트 케이스를 통한 검증
네이버의 수많은 사용자들을 통해 검증
https://github.com/naver/egjs/tree/master/test/manual
Road Map
ES6/7 전환
다양한 프레임워크(Angular, React) 지원
jQuery 의존성 제거
VanillaJS로 전환, 의존성 줄여 사용환경 개선
( [참고] )
모듈별 개별 라이브러리로 분리
light 하게, 기능 중심적 및 사용성 증대
Is jQuery Still Relevant?
맺으며
갈길 멀다.
여러분의 적극적 참여로 발전하는 라이브러리 목표
github repo를 통해 모든 activity 공개
PR은 언제나 환영
개발자(국내/해외)과 웹 생태계 기여
국내 FE 오픈소스들 중 두드러지는 성공 케이스 부재
유명 오픈소스들 best practice 도입/참고
여러분들의 참여를
기다립니다!
github.com/naver/egjs
고맙습니다!
사용하러 가기 Go Go!
https://github.com/naver/egjs/

Mais conteúdo relacionado

Mais procurados

[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료치웅 이
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5Taegon Kim
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview민태 김
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기복연 이
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스Dan Kang (강동한)
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효NAVER D2
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Chanwoong Kim
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성NAVER D2
 
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님NAVER D2
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기Jay Park
 
비 개발자를 위한 웹 개발 기초
비 개발자를 위한 웹 개발 기초비 개발자를 위한 웹 개발 기초
비 개발자를 위한 웹 개발 기초Gihyo Joshua Jang
 

Mais procurados (20)

Inside node.js
Inside node.jsInside node.js
Inside node.js
 
현실적 PWA
현실적 PWA현실적 PWA
현실적 PWA
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성
 
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
 
비 개발자를 위한 웹 개발 기초
비 개발자를 위한 웹 개발 기초비 개발자를 위한 웹 개발 기초
비 개발자를 위한 웹 개발 기초
 

Destaque

Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까
C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까
C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까NAVER D2
 
Seed2016 - 개미수열 한주영 (annotated)
Seed2016 - 개미수열 한주영 (annotated)Seed2016 - 개미수열 한주영 (annotated)
Seed2016 - 개미수열 한주영 (annotated)Jooyung Han
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례Hyoungjun Kim
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJSKyung Yeol Kim
 
Ionic adventures - Hybrid Mobile App Development rocks
Ionic adventures - Hybrid Mobile App Development rocksIonic adventures - Hybrid Mobile App Development rocks
Ionic adventures - Hybrid Mobile App Development rocksJuarez Filho
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기정웅 박
 

Destaque (10)

Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까
C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까
C5 모바일 웹ui개발 아직도 맨땅에 삽질부터 하십니까
 
CSS Functions
CSS FunctionsCSS Functions
CSS Functions
 
Seed2016 - 개미수열 한주영 (annotated)
Seed2016 - 개미수열 한주영 (annotated)Seed2016 - 개미수열 한주영 (annotated)
Seed2016 - 개미수열 한주영 (annotated)
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
 
Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJS
 
Ionic adventures - Hybrid Mobile App Development rocks
Ionic adventures - Hybrid Mobile App Development rocksIonic adventures - Hybrid Mobile App Development rocks
Ionic adventures - Hybrid Mobile App Development rocks
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기
 

Semelhante a [DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs

[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)
[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)
[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)NAVER D2
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템Young Soo Kim
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER Engineering
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법YoungSu Son
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항 YoungSu Son
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER Engineering
 
반응형 웹 디자인
반응형 웹 디자인반응형 웹 디자인
반응형 웹 디자인준극 김
 
OpenSource Big Data Platform - Flamingo v7
OpenSource Big Data Platform - Flamingo v7OpenSource Big Data Platform - Flamingo v7
OpenSource Big Data Platform - Flamingo v7BYOUNG GON KIM
 
OpenSource Big Data Platform - Flamingo 소개와 활용
OpenSource Big Data Platform - Flamingo 소개와 활용OpenSource Big Data Platform - Flamingo 소개와 활용
OpenSource Big Data Platform - Flamingo 소개와 활용BYOUNG GON KIM
 

Semelhante a [DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs (20)

[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)
[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)
[141]지난 1년간의 웨일 브라우저와 그 미래 (부제: 제품 매니저가 들려주는 생생한 기술/제품 이야기)
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 
반응형 웹 디자인
반응형 웹 디자인반응형 웹 디자인
반응형 웹 디자인
 
Flamingo project v4
Flamingo project v4Flamingo project v4
Flamingo project v4
 
OpenSource Big Data Platform - Flamingo v7
OpenSource Big Data Platform - Flamingo v7OpenSource Big Data Platform - Flamingo v7
OpenSource Big Data Platform - Flamingo v7
 
OpenSource Big Data Platform - Flamingo 소개와 활용
OpenSource Big Data Platform - Flamingo 소개와 활용OpenSource Big Data Platform - Flamingo 소개와 활용
OpenSource Big Data Platform - Flamingo 소개와 활용
 

Mais de Jae Sung Park

[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenes[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenesJae Sung Park
 
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기Jae Sung Park
 
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지Jae Sung Park
 
How jQuery event works
How jQuery event worksHow jQuery event works
How jQuery event worksJae Sung Park
 
현실적 Angular js
현실적 Angular js현실적 Angular js
현실적 Angular jsJae Sung Park
 
가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJSJae Sung Park
 
Web Components & Polymer
Web Components & PolymerWeb Components & Polymer
Web Components & PolymerJae Sung Park
 
모바일 웹 디버깅
모바일 웹 디버깅모바일 웹 디버깅
모바일 웹 디버깅Jae Sung Park
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구Jae Sung Park
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기Jae Sung Park
 
How to create Aptana Ruble
How to create Aptana RubleHow to create Aptana Ruble
How to create Aptana RubleJae Sung Park
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
Developing game audio with the Web Audio API
Developing game audio with the Web Audio APIDeveloping game audio with the Web Audio API
Developing game audio with the Web Audio APIJae Sung Park
 
Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3Jae Sung Park
 

Mais de Jae Sung Park (18)

[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenes[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenes
 
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
 
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
 
How jQuery event works
How jQuery event worksHow jQuery event works
How jQuery event works
 
현실적 Angular js
현실적 Angular js현실적 Angular js
현실적 Angular js
 
가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS
 
Web Components & Polymer
Web Components & PolymerWeb Components & Polymer
Web Components & Polymer
 
모바일 웹 디버깅
모바일 웹 디버깅모바일 웹 디버깅
모바일 웹 디버깅
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기
 
How to create Aptana Ruble
How to create Aptana RubleHow to create Aptana Ruble
How to create Aptana Ruble
 
Web Audio API
Web Audio APIWeb Audio API
Web Audio API
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Developing game audio with the Web Audio API
Developing game audio with the Web Audio APIDeveloping game audio with the Web Audio API
Developing game audio with the Web Audio API
 
Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3
 
Web Application SG
Web Application SGWeb Application SG
Web Application SG
 

[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs