SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
2017 프론트엔드

트렌드&인사이트
네이버 FE플랫폼 김태훈
about me
김태훈
NAVER FE플랫폼
SADI HTML5 초빙교수

NHN NEXT WebUI Basic 겸임교수
Project Management Professional(PMP)
페이스북 프론트엔드개발그룹 운영
http://facebook.com/groups/webfrontend
ES.NEXT
BABEL, WEBPACK
WEB ASSEMBLY
jQuery, React, Angular, Vue ...
AMP, PWA
ETC...
ES.NEXT
2015. 06 ECMAScript 6th Edtion / ES2015(ES6)
2016. 06 ECMAScript 7th Edtion / ES2016(ES7)
// ES2017 - Array.prototype.includes
['a', 'b', 'c'].includes('a') //true
['a', 'b', 'c'].includes('d') //false
// ES2017 - exponentiation operator (**)
let squared = 3 ** 2 // 9
Math.pow(x, y) // 9 - produces the same result as
maybe...
2017. 06 ECMAScript 8th Edtion / ES2017(ES8)
http://kangax.github.io/compat-table/es6/
ES.NEXT
데스크탑은 거의 대부분 ES6 지원
특히 Safari(데스크탑 및 iOS)는 100%
IE/안드로이드 하위버전 지원율 낮음
트랜스파일러를 통해
하위 버전인 ES5로의 변환해서 사용
ES2015
let와 const를 통한 블럭 스코프 변수 선언
Arrow function을 통해 함수 표현의 단순화, this 바인딩 제어
rest parameter, spread parameter, default parameter 파라메터 핸들링
destructuring을 통한 데이터 추출 편의성
클래스는 sugar syntex 뿐이라는 논쟁이 있었지만 잘 받아들여짐
iterator, generator 등을 통한 값 생성의 효율성 증가
map, weakmap, set, weakset 등 새로운 컬렉션
비동기 처리를 위한 promise
ES MODULE
가장 주목받는 ES6 기능이지만 브라우저에서 지원하지 않음
TC39는 평가(evaluation) 시점에 모듈을 불러오는
새로운 import() 함수에 대한 표준을 논의 중 - Stage 3
import {foo} from "bar"
import("baz").then((module)=>{/*…*/}).catch((err)=>{/**…*/})
ES.Next 해결해야 할 문제
브라우저에서 원할하게 모듈 로딩
비동기 처리 - promise, async/await 등 브라우저 구현
동시성과 병렬성 - TC 39에서 멀티쓰레딩에 대해 검토 중
구현된다면 멀티코어 프로세서 환경에서 성능 향상 기대
Immutable Native Objects
함수형 프로그래밍 혹은 최근 프레임워크에서 요구하는
불변객체에 대한 네이티브 구현
Babel is a JavaScript compiler.
Use next generation JavaScript, today.
BABEL
Babel은 자바스크립트를 위한

다중 목적 컴파일러
Babel은 ES6로 작성한 자바스크립트 코드를

ES6을 지원하지 않는 브라우저에서 동작하는 코드로 컴파일
source-to-source 컴파일
또는 트랜스파일
https://github.com/thejameskyle/babel-handbook
BABEL
빌드 과정에서 간단하게

babel 트랜스파일 단계를 추가해 사용가능
react, vue 등 새로운 프레임워크들이 ES6 사용
자바스크립트 애플리케이션 개발할 때도
ES6의 새로운 스펙을 사용할 수 있음
브라우저가 ES6를 완벽히 지원하는 것은 현재 어려움
2016년말 2017년초 90~95% 정도될 것으로 예상
하위브라우져와의 호환성 문제 등등

현실적으로 babel 같은 트랜스파일러 사용이 최선
webpack
번들링 - 프로젝트에서 사용하는 다양한 자원들을 묶고
파일들과의 상관관계를 정적으로 분석해 원하는 형태의 파일 출력
다양한 프레임워크에서 이미 기본적인 도구로 사용
ES6를 사용하는 경우 거의 필수
webpack
2017. 01. webpack 2(v2.2.0) 릴리즈
네이티브 ES6 import/export의 지원
ES6를 위한 Tree Shaking 지원
다양한 배포 전략에 따라 원하는 빌드의 구성이 가능
수많은 loader와 plugin을 통해 점점 더 성장
기존의 빌드 도구들은 전반적으로 webpack 전환 할 것
WEB ASSEMBLY
웹브라우저에서 돌릴 수 있는 새로운 형식의 코드
컴팩트한 바이너리 포맷을 제공하는 저수준 어셈블리 언어
C/C++ 등과 같은 언어로 작성하고 컴파일해 웹에서 실행
또한 자바스크립트와 나란히 돌아가면서 서로를 보완
2017년 상반기내 대다수의 브라우저들에서 프리뷰 지원 목표
WEB ASSEMBLY
빠르고, 효과적이고, 이식성이 좋을 것
여러종류의 플랫폼 위에서 거의 네이티브에 가까운 속도로 실행될 수 있음
읽기 쉽고 디버깅이 가능할 것
저수준 어셈블리 언어지만, 작성하고, 보고, 디버깅할 수는 있도록,
사람이 충분히 읽을 수 있는 수준의 텍스트 포맷을 갖고 있다
안전함을 유지할 것
샌드박싱된 실행환경에서 안전하게 돌아갈 수 있도록 설계되
브라우저의 동일한 출처(same-origin)와 권한정책을 강제
웹을 망가뜨리지 않을 것
다른 웹 기술과 마찰없이 사용되면서 하위호환성을 관리할 수 있도록 설계
WEB ASSEMBLY
3D 게임이나, 가상/증강현실, 영상처리, 이미지/비디오 편집
그 외 네이티브 성능을 필요로하는 여러 분야의 사례에서
현재의 웹은 성능상의 문제에 부딪힘
이런 문제를 웹어셈블리를 통해 해결하면서 자바스크립트를 보완
웹어셈블리 코드를 다운로드하고, 컴파일하고, 돌리는 일련의 과정을 자바스크립트로 제어
<script type='module'>같이 ES6 모듈처럼 사용
jQuery
2016. 06. 버전 3.0 발표
레거시 브라우저 지원을 위한 1.x와 2.x의 형태를 버리고 단일 버전 형태로 통합
AJAX 및 이펙트 등을 제거한 slim 버전도 출시해
기존 버전 대비 17~20kb 정도의 가벼운 용량을 제공
jQuery
브라우저의 표준 지원율 향상으로 VanillaJS 만으로도 충분히 개발 가능
최근의 프레임워크는 MV* 아키텍쳐로 DOM 조작을 하지 않음
프레임워크가 웹애플리케이션 개발에 적합하다면
jQuery는 웹페이지 개발에 있어서는 아직도 적합하고 경쟁력 있음(생태계 풍부)
많은 개발자가 jQuery의 사용은 트렌디하지 않게 보고 있는 것은 사실
과거와 같이 주도적이진 않으며 시간이 갈수록 서서히 영향력 감소
React
커뮤니티의 전폭적인 지원을 받으며 계속 발전
많은 베스트 프랙티스가 공유되고 있으며
react-router, Flux/Redux 등의 아키텍쳐와 함께 실질적인 프레임워크로 사용
React
페이스북은 React 스타터 킷인 'Create React App'의 개량된 버전을 직접 릴리즈
react-router도 공식 React 저장소로 머지하기 위한 논의 중
페이스북의 UI 컴포넌트 프레임워크가 나올 것으로 예상
Next.js - Dead simple Universal render & Routing for Node & React
velocity-react - Animations for React
ngular2+
수많은 베타 버전과 7개의 RC 버전 끝에 2016.09. Angular2.0 출시
TypeScript 기반, 모듈, 컴포넌트, Directive, DI 등
AngularJS의 컨셉을 유지하고 있지만 문법이 많이 다름
2017.03 버전3.0을 건너뛰고 4.0을 릴리즈
잦은 버전 변경과 변화가 개발자들에게 혼란을 가중
Angular2+
Zones.js, Change Detection 등을 통한 성능 향상
angular-cli로 개발 편의성 향상
RxJs를 통한 리액티브 프로그래밍
Angular2 vs React
ue.js
MVVM(Model-View-ViewModel) 패턴으로 데이터 관리 및 액션 처리에 집중
Flux에서 영감을 받은 vuex 데이터 플로우 아키텍쳐
VirtualDOM 도입
Angular와 React의 장점들과 유사함
최근 급속하게 사용자층이 늘고 있음
AMP
AMP가 제공하는 컴포넌트를 사용해 뛰어난 퍼포먼스의 페이지 개발
JS 필요없음. 커스텀엘리먼트를 사용하기 때문에 HTML 요소처럼 사용 가능
AMP로 만든 페이지와 리소스는 구글 CDN에 저장
구글 검색 결과에서 클릭시 딜레이없이 페이지를 보여줌
... 35 more
AMP Extended Component
/* AMP 확장 컴포넌트 - 캐러셀 */
<amp-carousel width=300 height=400>
<amp-img src="my-img1.png" width=300 height=400></amp-img>
<amp-img src="my-img2.png" width=300 height=400></amp-img>
<amp-img src="my-img3.png" width=300 height=400></amp-img>
</amp-carousel>
AMP-CAROUSEL
/* AMP 확장 컴포넌트 - lightbox */
<amp-image-lightbox id="lightbox1"
layout="nodisplay">
</amp-image-lightbox>
AMP-IMAGE-LIGHTBOX
/* AMP 확장 컴포넌트 - 사이드바 */
<amp-sidebar id='sidebar'
layout="nodisplay"
side="right"> ...
AMP-SIDEBAR
https://youtu.be/e6slMlFgdCQ
AMP 1년여 굉장히 성공적
86만여개 도메인에 17억개의 AMP 페이지 생성
매주 3500만개의 AMP가 생성
PWA를 결합하기위한 시도
컴포넌트 방식 혹은 iframe/shadow DOM
<amp-bind>
데이터를 바인딩하기 위한 컴포넌트 지원
프로그램 패러다임을 얻고 플랫폼으로 발돋움
AMP NEXT
개선된 Image gallery lightboxes, Parallax scrolling 추가
Thumblr, eBay 페이지 중 상당수 AMP로 전환
Yahoo Japen, Sogou, Baidu 검색엔진에 AMP 페이지 지원
https://ampstart.com/
AMP 개발을 위한 점프 포인트
https://ampbyexample.com/
Learn AMP by Example
AMP NEXT
Progressive Web App
프로그래시브 Progressive
브라우저에 상관없이 모든 사용자에게 동작
반응성 Responsive
어떠한 폼 팩터에도 맞을 것
네트워크 연결과 독립적 Connectivity independent
Service Worker를 통해 오프라인에서도 동작할 것
앱과 비슷한 동작 App-like-interactions
앱과 같은 네비게이션과 동작을 하기 위해
Shell 과 컨텐츠를 합친 어플리케이션 모델을 사용
최신버전 유지 Fresh
Service Worker 를 통해 보이지는 않지만 언제나 최신 버전을 유지할 것
안전 Safe
TLS (Service Worker 의 요구사항)를 통해 스누핑을 방지할 것
검색 가능 Discoverable
W3C Manifest 를 도입하여 "어플리케이션"으로써 인식되고

검색 엔진에 의해 등록 가능할 것
재방문 Re-engageable
OS의 UI를 활용하여 사용자를 다시 방문하게 ex) Push 알림
설치 가능 Installable
앱 스토어가 아니라 브라우저 기반으로 홈화면에 아이콘 추가
연결 가능 Linkable
설치조차도 귀찮다면 앱 설치 없이도 사용 가능하고 공유하기 편할 것
소셜 네트워크에서도 URL의 힘은 강력하다.
Progressive Web App
Progressive Web App - Service Worker
Progressive Web App - Service Worker
가트너그룹은 2019년까지 브랜드의 20%가 모바일 앱을 포기 할 것으로 예상
모바일 사용자는 상위 3개의 앱만 사용하여 80%의 시간을 보냄
Progressive Web App을 모바일 디바이스에서 지원하고
사용자에게 앱과 같은 브라우징 경험을 제공한다면
많은 기업이 앱에 대한 투자 비용을 감소할 것
https://www.washingtonpost.com/
https://www.flipkart.com/
Progressive Web App Next
2016.10. 페이스북에서 새롭게 발표한 npm 클라이언트
기존 npm 레지스트리를 사용. npm의 모든 패키지들 그대로 사용
병렬처리를 통해 npm 보다 향상된 처리 성능
기존의 npm 설정 파일인 package.json을 통해
yarn 설정파일인 yarn.lock 파일을 손쉽게 생성
$ yarn
yarn install v0.16.1
info No lockfile found.
[1/4] Resolving packages...
...
success Saved lockfile.
Done in 34.60s.
Functional Programming
React/Redux가 많이 사용되면서 statless한 애플리케이션에 대한 장점 부각
모든 입력과 출력이 선언적으로 표현되는 순수함수를 통해 사이드 이펙트 감소
이를 기반으로한 Functional Reactive Programming이 추진력을 얻을 듯(RxJs)
Angular2+는 이벤트, XHR 처리에 RxJs 사용
자바스크립트의 뉴 프론티어
chatbot
많은 개발자들이 자바스크립트를 사용해 chatbot을 개발
단순한 Slack 봇에서 부터 복잡한 커머스 트랜잭션 봇까지
IoT
IoT 영역에서도 자바스크립트의 도입을 쉽게 볼수 있다.
삼성은 2015년 IoT 자바스크립트 엔진 JerryScript를 발표
가상현실
웹의 가상현실 기술은 WebVR을 통해 표준화 진행
자바스크립트 API를 통해 가상현실 기기에서 감지되는 위치와 움직임등에 대한 정보 획득
구글은 크롬팀이 리딩해 가상현실 경험을 개발할 수 있는 A-Frame 프레임워크를 개발 중
MS는 HoloLens에서 사용할 수 있는 앱 개발을 위해 HoloJS 프레임워크를 2016.12. 공개
NAVER egjs 2.0 http://naver.github.io/egjs/
네이버의 노하우가 축적된 모던 웹 라이브러리, 오픈소스(PR환영!)
UI인터렉션, 이펙트, 유틸리티 등으로 구성, 네이버의 여러 서비스에서 사용
flicking, visible, infiniteGrid 등등 컴포넌트 제공, 빠른 성능과 안정성 제공
2017년 상빈기 2.0 출시 예정
jQuery 의존성을 버리고 각 컴포넌트가 독립적인 모듈로 운영
360도 이미지 뷰어 컴포넌트 추가 예정
프론트엔드 개발가이드
Front-End Developer Handbook 2017
https://www.gitbook.com/book/frontendmasters/front-end-handbook-2017/
References
http://www.telerik.com/whitepapers/kendo-ui/the-future-of-javascript-2017-and-beyond
http://developer.telerik.com/topics/web-development/javascripts-journey-2016/
https://mobiforge.com/research-analysis/13-statistics-on-mobile-web-performance-in-2017
https://mobiforge.com/news-comment/ampconf-amp-is-a-performance-framework-thats-growing-up
https://www.oreilly.com/ideas/5-web-trends-for-2017
http://d2.naver.com/helloworld/2809766
https://youtu.be/e6slMlFgdCQ
https://www.ampproject.org/amp-conf-2017/
https://developers.google.com/web/progressive-web-apps/
https://www.gitbook.com/book/frontendmasters/front-end-handbook-2017/
https://v8project.blogspot.kr/2016/10/webassembly-browser-preview.html
https://unsplash.com/
#thank you
Atwood's Law
Any application that can be written in JavaScript,
will eventually be written in JavaScript.

Mais conteúdo relacionado

Mais procurados

[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
Sang Don Kim
 

Mais procurados (20)

현실적 PWA
현실적 PWA현실적 PWA
현실적 PWA
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
 
How_to_choose_the_right_framework
How_to_choose_the_right_frameworkHow_to_choose_the_right_framework
How_to_choose_the_right_framework
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍
 
Gae와cloud sql을이용한 전자결재 개발
Gae와cloud sql을이용한 전자결재 개발Gae와cloud sql을이용한 전자결재 개발
Gae와cloud sql을이용한 전자결재 개발
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
 
프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web Apps프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web Apps
 
GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기
 
Google App Engine의 이해
Google App Engine의 이해Google App Engine의 이해
Google App Engine의 이해
 
프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview
 
Vue.js와 Firebase활용기
Vue.js와 Firebase활용기Vue.js와 Firebase활용기
Vue.js와 Firebase활용기
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa
 
Vue.js와 Firebase를 활용한 웹 서비스 개발
Vue.js와 Firebase를 활용한 웹 서비스 개발Vue.js와 Firebase를 활용한 웹 서비스 개발
Vue.js와 Firebase를 활용한 웹 서비스 개발
 
Universal Rendering
Universal RenderingUniversal Rendering
Universal Rendering
 
PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 

Semelhante a 2017. 프론트엔드 트랜드

드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
draghome
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)
Channy Yun
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
Jae Sung Park
 

Semelhante a 2017. 프론트엔드 트랜드 (20)

[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
Webpack&babel
Webpack&babelWebpack&babel
Webpack&babel
 
드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
 
최근 Javascript framework 조사
최근 Javascript framework 조사최근 Javascript framework 조사
최근 Javascript framework 조사
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기
 
W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
Open hab&webapp.net
Open hab&webapp.netOpen hab&webapp.net
Open hab&webapp.net
 
Web assembly 맛보기
Web assembly 맛보기Web assembly 맛보기
Web assembly 맛보기
 
웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)웹 2.0 기술 소개 (2006)
웹 2.0 기술 소개 (2006)
 
One ASP.NET
One ASP.NETOne ASP.NET
One ASP.NET
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 

2017. 프론트엔드 트랜드

  • 2. about me 김태훈 NAVER FE플랫폼 SADI HTML5 초빙교수
 NHN NEXT WebUI Basic 겸임교수 Project Management Professional(PMP) 페이스북 프론트엔드개발그룹 운영 http://facebook.com/groups/webfrontend
  • 3. ES.NEXT BABEL, WEBPACK WEB ASSEMBLY jQuery, React, Angular, Vue ... AMP, PWA ETC...
  • 4. ES.NEXT 2015. 06 ECMAScript 6th Edtion / ES2015(ES6) 2016. 06 ECMAScript 7th Edtion / ES2016(ES7) // ES2017 - Array.prototype.includes ['a', 'b', 'c'].includes('a') //true ['a', 'b', 'c'].includes('d') //false // ES2017 - exponentiation operator (**) let squared = 3 ** 2 // 9 Math.pow(x, y) // 9 - produces the same result as maybe... 2017. 06 ECMAScript 8th Edtion / ES2017(ES8)
  • 6. ES.NEXT 데스크탑은 거의 대부분 ES6 지원 특히 Safari(데스크탑 및 iOS)는 100% IE/안드로이드 하위버전 지원율 낮음 트랜스파일러를 통해 하위 버전인 ES5로의 변환해서 사용
  • 7. ES2015 let와 const를 통한 블럭 스코프 변수 선언 Arrow function을 통해 함수 표현의 단순화, this 바인딩 제어 rest parameter, spread parameter, default parameter 파라메터 핸들링 destructuring을 통한 데이터 추출 편의성 클래스는 sugar syntex 뿐이라는 논쟁이 있었지만 잘 받아들여짐 iterator, generator 등을 통한 값 생성의 효율성 증가 map, weakmap, set, weakset 등 새로운 컬렉션 비동기 처리를 위한 promise
  • 8. ES MODULE 가장 주목받는 ES6 기능이지만 브라우저에서 지원하지 않음 TC39는 평가(evaluation) 시점에 모듈을 불러오는 새로운 import() 함수에 대한 표준을 논의 중 - Stage 3 import {foo} from "bar" import("baz").then((module)=>{/*…*/}).catch((err)=>{/**…*/})
  • 9. ES.Next 해결해야 할 문제 브라우저에서 원할하게 모듈 로딩 비동기 처리 - promise, async/await 등 브라우저 구현 동시성과 병렬성 - TC 39에서 멀티쓰레딩에 대해 검토 중 구현된다면 멀티코어 프로세서 환경에서 성능 향상 기대 Immutable Native Objects 함수형 프로그래밍 혹은 최근 프레임워크에서 요구하는 불변객체에 대한 네이티브 구현
  • 10. Babel is a JavaScript compiler. Use next generation JavaScript, today.
  • 11. BABEL Babel은 자바스크립트를 위한
 다중 목적 컴파일러 Babel은 ES6로 작성한 자바스크립트 코드를
 ES6을 지원하지 않는 브라우저에서 동작하는 코드로 컴파일 source-to-source 컴파일 또는 트랜스파일 https://github.com/thejameskyle/babel-handbook
  • 12.
  • 13. BABEL 빌드 과정에서 간단하게
 babel 트랜스파일 단계를 추가해 사용가능 react, vue 등 새로운 프레임워크들이 ES6 사용 자바스크립트 애플리케이션 개발할 때도 ES6의 새로운 스펙을 사용할 수 있음 브라우저가 ES6를 완벽히 지원하는 것은 현재 어려움 2016년말 2017년초 90~95% 정도될 것으로 예상 하위브라우져와의 호환성 문제 등등
 현실적으로 babel 같은 트랜스파일러 사용이 최선
  • 14. webpack 번들링 - 프로젝트에서 사용하는 다양한 자원들을 묶고 파일들과의 상관관계를 정적으로 분석해 원하는 형태의 파일 출력 다양한 프레임워크에서 이미 기본적인 도구로 사용 ES6를 사용하는 경우 거의 필수
  • 15. webpack 2017. 01. webpack 2(v2.2.0) 릴리즈 네이티브 ES6 import/export의 지원 ES6를 위한 Tree Shaking 지원 다양한 배포 전략에 따라 원하는 빌드의 구성이 가능 수많은 loader와 plugin을 통해 점점 더 성장 기존의 빌드 도구들은 전반적으로 webpack 전환 할 것
  • 16. WEB ASSEMBLY 웹브라우저에서 돌릴 수 있는 새로운 형식의 코드 컴팩트한 바이너리 포맷을 제공하는 저수준 어셈블리 언어 C/C++ 등과 같은 언어로 작성하고 컴파일해 웹에서 실행 또한 자바스크립트와 나란히 돌아가면서 서로를 보완 2017년 상반기내 대다수의 브라우저들에서 프리뷰 지원 목표
  • 17. WEB ASSEMBLY 빠르고, 효과적이고, 이식성이 좋을 것 여러종류의 플랫폼 위에서 거의 네이티브에 가까운 속도로 실행될 수 있음 읽기 쉽고 디버깅이 가능할 것 저수준 어셈블리 언어지만, 작성하고, 보고, 디버깅할 수는 있도록, 사람이 충분히 읽을 수 있는 수준의 텍스트 포맷을 갖고 있다 안전함을 유지할 것 샌드박싱된 실행환경에서 안전하게 돌아갈 수 있도록 설계되 브라우저의 동일한 출처(same-origin)와 권한정책을 강제 웹을 망가뜨리지 않을 것 다른 웹 기술과 마찰없이 사용되면서 하위호환성을 관리할 수 있도록 설계
  • 18. WEB ASSEMBLY 3D 게임이나, 가상/증강현실, 영상처리, 이미지/비디오 편집 그 외 네이티브 성능을 필요로하는 여러 분야의 사례에서 현재의 웹은 성능상의 문제에 부딪힘 이런 문제를 웹어셈블리를 통해 해결하면서 자바스크립트를 보완 웹어셈블리 코드를 다운로드하고, 컴파일하고, 돌리는 일련의 과정을 자바스크립트로 제어 <script type='module'>같이 ES6 모듈처럼 사용
  • 19. jQuery 2016. 06. 버전 3.0 발표 레거시 브라우저 지원을 위한 1.x와 2.x의 형태를 버리고 단일 버전 형태로 통합 AJAX 및 이펙트 등을 제거한 slim 버전도 출시해 기존 버전 대비 17~20kb 정도의 가벼운 용량을 제공
  • 20. jQuery 브라우저의 표준 지원율 향상으로 VanillaJS 만으로도 충분히 개발 가능 최근의 프레임워크는 MV* 아키텍쳐로 DOM 조작을 하지 않음 프레임워크가 웹애플리케이션 개발에 적합하다면 jQuery는 웹페이지 개발에 있어서는 아직도 적합하고 경쟁력 있음(생태계 풍부) 많은 개발자가 jQuery의 사용은 트렌디하지 않게 보고 있는 것은 사실 과거와 같이 주도적이진 않으며 시간이 갈수록 서서히 영향력 감소
  • 21.
  • 22. React 커뮤니티의 전폭적인 지원을 받으며 계속 발전 많은 베스트 프랙티스가 공유되고 있으며 react-router, Flux/Redux 등의 아키텍쳐와 함께 실질적인 프레임워크로 사용
  • 23. React 페이스북은 React 스타터 킷인 'Create React App'의 개량된 버전을 직접 릴리즈 react-router도 공식 React 저장소로 머지하기 위한 논의 중 페이스북의 UI 컴포넌트 프레임워크가 나올 것으로 예상 Next.js - Dead simple Universal render & Routing for Node & React velocity-react - Animations for React
  • 24. ngular2+ 수많은 베타 버전과 7개의 RC 버전 끝에 2016.09. Angular2.0 출시 TypeScript 기반, 모듈, 컴포넌트, Directive, DI 등 AngularJS의 컨셉을 유지하고 있지만 문법이 많이 다름 2017.03 버전3.0을 건너뛰고 4.0을 릴리즈 잦은 버전 변경과 변화가 개발자들에게 혼란을 가중
  • 25. Angular2+ Zones.js, Change Detection 등을 통한 성능 향상 angular-cli로 개발 편의성 향상 RxJs를 통한 리액티브 프로그래밍
  • 27. ue.js MVVM(Model-View-ViewModel) 패턴으로 데이터 관리 및 액션 처리에 집중 Flux에서 영감을 받은 vuex 데이터 플로우 아키텍쳐 VirtualDOM 도입 Angular와 React의 장점들과 유사함 최근 급속하게 사용자층이 늘고 있음
  • 28. AMP AMP가 제공하는 컴포넌트를 사용해 뛰어난 퍼포먼스의 페이지 개발 JS 필요없음. 커스텀엘리먼트를 사용하기 때문에 HTML 요소처럼 사용 가능 AMP로 만든 페이지와 리소스는 구글 CDN에 저장 구글 검색 결과에서 클릭시 딜레이없이 페이지를 보여줌
  • 29. ... 35 more AMP Extended Component
  • 30. /* AMP 확장 컴포넌트 - 캐러셀 */ <amp-carousel width=300 height=400> <amp-img src="my-img1.png" width=300 height=400></amp-img> <amp-img src="my-img2.png" width=300 height=400></amp-img> <amp-img src="my-img3.png" width=300 height=400></amp-img> </amp-carousel> AMP-CAROUSEL
  • 31. /* AMP 확장 컴포넌트 - lightbox */ <amp-image-lightbox id="lightbox1" layout="nodisplay"> </amp-image-lightbox> AMP-IMAGE-LIGHTBOX
  • 32. /* AMP 확장 컴포넌트 - 사이드바 */ <amp-sidebar id='sidebar' layout="nodisplay" side="right"> ... AMP-SIDEBAR
  • 33.
  • 35. AMP 1년여 굉장히 성공적 86만여개 도메인에 17억개의 AMP 페이지 생성 매주 3500만개의 AMP가 생성 PWA를 결합하기위한 시도 컴포넌트 방식 혹은 iframe/shadow DOM <amp-bind> 데이터를 바인딩하기 위한 컴포넌트 지원 프로그램 패러다임을 얻고 플랫폼으로 발돋움 AMP NEXT
  • 36. 개선된 Image gallery lightboxes, Parallax scrolling 추가 Thumblr, eBay 페이지 중 상당수 AMP로 전환 Yahoo Japen, Sogou, Baidu 검색엔진에 AMP 페이지 지원 https://ampstart.com/ AMP 개발을 위한 점프 포인트 https://ampbyexample.com/ Learn AMP by Example AMP NEXT
  • 37.
  • 38.
  • 39. Progressive Web App 프로그래시브 Progressive 브라우저에 상관없이 모든 사용자에게 동작 반응성 Responsive 어떠한 폼 팩터에도 맞을 것 네트워크 연결과 독립적 Connectivity independent Service Worker를 통해 오프라인에서도 동작할 것 앱과 비슷한 동작 App-like-interactions 앱과 같은 네비게이션과 동작을 하기 위해 Shell 과 컨텐츠를 합친 어플리케이션 모델을 사용 최신버전 유지 Fresh Service Worker 를 통해 보이지는 않지만 언제나 최신 버전을 유지할 것
  • 40. 안전 Safe TLS (Service Worker 의 요구사항)를 통해 스누핑을 방지할 것 검색 가능 Discoverable W3C Manifest 를 도입하여 "어플리케이션"으로써 인식되고
 검색 엔진에 의해 등록 가능할 것 재방문 Re-engageable OS의 UI를 활용하여 사용자를 다시 방문하게 ex) Push 알림 설치 가능 Installable 앱 스토어가 아니라 브라우저 기반으로 홈화면에 아이콘 추가 연결 가능 Linkable 설치조차도 귀찮다면 앱 설치 없이도 사용 가능하고 공유하기 편할 것 소셜 네트워크에서도 URL의 힘은 강력하다. Progressive Web App
  • 41.
  • 42. Progressive Web App - Service Worker
  • 43. Progressive Web App - Service Worker
  • 44. 가트너그룹은 2019년까지 브랜드의 20%가 모바일 앱을 포기 할 것으로 예상 모바일 사용자는 상위 3개의 앱만 사용하여 80%의 시간을 보냄 Progressive Web App을 모바일 디바이스에서 지원하고 사용자에게 앱과 같은 브라우징 경험을 제공한다면 많은 기업이 앱에 대한 투자 비용을 감소할 것 https://www.washingtonpost.com/ https://www.flipkart.com/ Progressive Web App Next
  • 45. 2016.10. 페이스북에서 새롭게 발표한 npm 클라이언트 기존 npm 레지스트리를 사용. npm의 모든 패키지들 그대로 사용 병렬처리를 통해 npm 보다 향상된 처리 성능 기존의 npm 설정 파일인 package.json을 통해 yarn 설정파일인 yarn.lock 파일을 손쉽게 생성 $ yarn yarn install v0.16.1 info No lockfile found. [1/4] Resolving packages... ... success Saved lockfile. Done in 34.60s.
  • 46.
  • 47. Functional Programming React/Redux가 많이 사용되면서 statless한 애플리케이션에 대한 장점 부각 모든 입력과 출력이 선언적으로 표현되는 순수함수를 통해 사이드 이펙트 감소 이를 기반으로한 Functional Reactive Programming이 추진력을 얻을 듯(RxJs) Angular2+는 이벤트, XHR 처리에 RxJs 사용
  • 48. 자바스크립트의 뉴 프론티어 chatbot 많은 개발자들이 자바스크립트를 사용해 chatbot을 개발 단순한 Slack 봇에서 부터 복잡한 커머스 트랜잭션 봇까지 IoT IoT 영역에서도 자바스크립트의 도입을 쉽게 볼수 있다. 삼성은 2015년 IoT 자바스크립트 엔진 JerryScript를 발표 가상현실 웹의 가상현실 기술은 WebVR을 통해 표준화 진행 자바스크립트 API를 통해 가상현실 기기에서 감지되는 위치와 움직임등에 대한 정보 획득 구글은 크롬팀이 리딩해 가상현실 경험을 개발할 수 있는 A-Frame 프레임워크를 개발 중 MS는 HoloLens에서 사용할 수 있는 앱 개발을 위해 HoloJS 프레임워크를 2016.12. 공개
  • 49. NAVER egjs 2.0 http://naver.github.io/egjs/ 네이버의 노하우가 축적된 모던 웹 라이브러리, 오픈소스(PR환영!) UI인터렉션, 이펙트, 유틸리티 등으로 구성, 네이버의 여러 서비스에서 사용 flicking, visible, infiniteGrid 등등 컴포넌트 제공, 빠른 성능과 안정성 제공 2017년 상빈기 2.0 출시 예정 jQuery 의존성을 버리고 각 컴포넌트가 독립적인 모듈로 운영 360도 이미지 뷰어 컴포넌트 추가 예정
  • 50. 프론트엔드 개발가이드 Front-End Developer Handbook 2017 https://www.gitbook.com/book/frontendmasters/front-end-handbook-2017/
  • 52. #thank you Atwood's Law Any application that can be written in JavaScript, will eventually be written in JavaScript.