SlideShare une entreprise Scribd logo
1  sur  88
Télécharger pour lire hors ligne
 	
  
JAVASCRIPT PROMISES
in
ECMAScript6 (Harmony)
01 02 03 04
Promise란
무엇인가?
Promise
사용하기
Promise의
특징
Promise 직접
구현하기
전통적인 콜백 패
턴이 가지고 있는
문제와 Promise 정
의및 사용 방법에
대해서 개괄적으로
살펴본다.
Promise의 정적 메
서드와 인스턴스
메 서 드 , 그 리 고
thenable에 관한
개념 등 조금 더 다
양하고 자세한 내
용을 살펴본다.
Promise에 대해
잘 알려져 있지 않
는 중요한 특징 몇
가지를 소개한다.
ES6
  Promises의
 
 
베 이 스 가
  되 는
 
 
Promise/A+의
 사
 
양을
  직접
  구현해
 
봄 으 로 써
 
 
Promise에
  대한
 
 
이해를
  더욱
  높인
 
다.
 
2	
  
전통적인 콜백 패턴의 문제 1
여러운 비동기 예외 처리
3	
  
try{

setTimeout(function(){

throw new Error('에러가 발생했다.');

}, 1000);

}catch(err){

console.error(err);

console.log('에러를 복구했다.');

}
전통적인 콜백 패턴의 문제 1
여러운 비동기 예외 처리
try{

setTimeout(function(){

throw new Error('에러가 발생했다.');

}, 1000);

}catch(err){

console.error(err);

console.log('에러를 복구했다.');

}	
 
global
4	
  
전통적인 콜백 패턴의 문제 1
여러운 비동기 예외 처리
try{

setTimeout(function(){

throw new Error('에러가 발생했다.');

}, 1000);

}catch(err){

console.error(err);

console.log('에러를 복구했다.');

}	
 
global setTimeout() handler
호출
콜백 등록
5	
  
전통적인 콜백 패턴의 문제 1
여러운 비동기 예외 처리
try{

setTimeout(function(){

throw new Error('에러가 발생했다.');

}, 1000);

}catch(err){

console.error(err);

console.log('에러를 복구했다.');

}	
 
global time eventsetTimeout() handler
호출
콜백 등록
발화
6	
  
전통적인 콜백 패턴의 문제 1
여러운 비동기 예외 처리
try{

setTimeout(function(){

throw new Error('에러가 발생했다.');

}, 1000);

}catch(err){

console.error(err);

console.log('에러를 복구했다.');

}	
 
global time eventsetTimeout() handler
호출
콜백 등록
발화
예외
7	
  
전통적인 콜백 패턴의 문제 1
여러운 비동기 예외 처리
try{

setTimeout(function(){

throw new Error('에러가 발생했다.');

}, 1000);

}catch(err){

console.error(err);

console.log('에러를 복구했다.');

}	
 
global time eventsetTimeout() handler
호출
콜백 등록
발화
예외 통지예외
8	
  
전통적인 콜백 패턴의 문제 2
복수의 비동기 처리
fs.readdir(source, function(err, files){

if(err){

console.log('Error finding files : ' + err);

}else{

file.forEach(function(filename, fileIndex){

console.log(filename);

gm(source + filename).size(function(err, vlaues){

if(err){

console.log('Error identifying file size : ' + err);

}else{

console.log(filename + ' : ' + values);

aspect = (values.width / value.height);

widths.forEach(function(width, wwidthIndex){

height = Math.round(width /aspect);

console.log('resizing ' + filename + 'to ' + height + 'x' + height);

this.resize(width, height).write(
destination + 'w' + width + '_' + filename,
function(err){

if(err){

console.log('Error writing file : ' + err);

}

}
);

});

}

});

});

}

})	
 
9	
  
Promise란?
정의
Promise란 비동기 처리 로직을 추상화한 객체와 그것을 조작하는 방식을 말한다.
E 언어에서 처음 고안됐으며 병렬 및 병행 프로그래밍을 위한 일종의 디자인이다.
비동기
 로직
 
전달	
  
Promise	
  
인
터
페
이
스
 
의존	
  구현	
  
액터	
  
10	
  
Promise란?
효과
전통적인 콜백 패턴이 가진 단점을 일부 보완한다.
비동기 처리 시점을 명확하게 표현한다.
Promise 객체의 인터페이스를 이용해 다양한 비동기 처리를 패턴화할 수 있다.
복잡하고 불편한 비동기 예외 처리를 손쉽게 다룰 수 있다.
11	
  
Promise란?
명세
초기 작업
ES6 DRAFT
Promises/A+
https://github.com/domenic/promises-unwrapping
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-constructor
Promises/A+
 :
 https://promisesaplus.com/
 
12	
  
Promise란?
사용된 곳
if('serviceWorker' in navigator){

navigator.serviceWorker.register('/sw=text/sw.js', {

scope: '/'

}).then(function(sw){

// registration worked

console.log('Registration succeeded.');

}).catch(function(err){

// registration filed

console.log('Registration filed with ' + err);

})

}	
  	
 
function writeArrayToStream(array, writableStream){

array.forEach(chunk =  writableStream.write(chunk));

return writableStream.close();

}



writeArrayToStream([1, 2, 3, 4, 5], writableStream)

.then(() = console.log('All done!'))

.catch(e = console.log('Error with the stream : ' + e));	
 
Service Worker API
Streams API
13	
  
Promise 살펴보기
Promises API
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
strawman(폐기)
 :
 http://wiki.ecmascript.org/doku.php?id=strawman:promises
 
Constructor
var promise = new Promise(function(resolve, reject){

// 비동기 처리 작성
// 처리가 끝나면 resolve 또는 reject 호출
});	
   	
 
Instace Method Static Method
Promise.prototype.then(onFulfilled,
 onRejected)
 
Promise.prototype.catch(onRejected)
 
Promise.all()
 
Promise.race()
 
Promise.resolve()
 
Promise.reject()
 
14	
  
Promise 살펴보기
워크플로우
/**

* @returns {Promise}

*/

function asyncFunction(){

return new Promise(function(resolve, reject){

setTimeout(function(){

resolve('Async Hello world!!');

}, 16);

})

}	
   	
 
asyncFunction().then(function(value){

console.log(value);

}).catch(function(error){

console.log(error);

});	
   	
 
asyncFunction().then(function(value){

console.log(value);

}, function(error){

console.log(error);

});	
   	
 
asyncFunction()은 Promise의 인스턴스를
반환할 뿐이며 비동기 로직은 모두
Promise에 추상화된다.
비동기 처리가 성공했을 때 호출될 콜백은
then(), 실패했을 때 호출될 콜백은
catch()로 등록한다.
catch()는 then()을 이용해 대체할 수도
있다.
15	
  
Promise 살펴보기
상태
초기 상태
성공(또는 해결) 상태
실패(또는 거부) 상태
불편 상태
unresolved
 또는
 Pending,
 
 
성공도
 실패도
 아닌
 초기
 상태
 
has-resolution
 또는
 Fulfilled,
 
 
성공(resolve)했을
 때의
 상태
 
has-rejection
 또는
 Rejected,
 
 
실패(reject)했을
 때의
 상태
 
Settled,
 성공
 또는
 실패
 했을
 때의
 상태.
 
Fulfilled
Rejected
Pending
16	
  
Promise 맛보기
객체 생성
1.  new Promise(fn)으로 promise 객체를 생성한다.
2.  fn에는 비동기 처리를 작성한다.
•  처리 결과가 정상이라면 resolve(결과 값)을 호출한다.
•  처리 결과가 비정상이라면 reject(error)을 호출한다.
function getJSON(URL){

return new Promise(function(resolve, reject){

var req = new XMLHttpRequest();



req.open('GET', URL, true);

req.onload = function(){

if(req.status === 200){

resolve(JSON.parse(req.responseText));

}else{

reject(new Error(req.statusText));

}

};



req.onerror = function(){

reject(new Error(req.statusText));

};



req.send();

})

}	
   	
 
function doSomething(callback){

var value = 42;



if(value === 42){

callback(null, value);

}else{

callback(new Error('에러'), null);

}

}	
  	
 
17	
  
Promise 맛보기
객체 사용
Promise의
 인스턴스
 메서드를
 이용해
 객체의

Contenu connexe

Tendances

7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍Hyunsoo Jung
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Young-Beom Rhee
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리은숙 이
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료욱진 양
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자Circulus
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple OverviewKim Hunmin
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Ji Hun Kim
 
Promise in javascript
Promise in javascriptPromise in javascript
Promise in javascriptnamwook lim
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Circulus
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Functionwonmin lee
 

Tendances (20)

7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
javascript02
javascript02javascript02
javascript02
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple Overview
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5
 
Promise in javascript
Promise in javascriptPromise in javascript
Promise in javascript
 
Enum
EnumEnum
Enum
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 

Similaire à JavaScript Promises

Promise and Bluebird
Promise and BluebirdPromise and Bluebird
Promise and BluebirdDaniel Ku
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가홍준 김
 
03 realm 쓰기 & 질의
03   realm 쓰기 & 질의03   realm 쓰기 & 질의
03 realm 쓰기 & 질의Lee-Jong-Chan
 
Code complete chapter 19, 20 organize
Code complete chapter 19, 20 organizeCode complete chapter 19, 20 organize
Code complete chapter 19, 20 organizehanstar17
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3성일 한
 
120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장tedypicker
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 

Similaire à JavaScript Promises (14)

Promise and Bluebird
Promise and BluebirdPromise and Bluebird
Promise and Bluebird
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가
 
03 realm 쓰기 & 질의
03   realm 쓰기 & 질의03   realm 쓰기 & 질의
03 realm 쓰기 & 질의
 
Code complete chapter 19, 20 organize
Code complete chapter 19, 20 organizeCode complete chapter 19, 20 organize
Code complete chapter 19, 20 organize
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
 
처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3
 
120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
자바스크립트 클래스의 프로토타입(prototype of class)
자바스크립트 클래스의  프로토타입(prototype of class)자바스크립트 클래스의  프로토타입(prototype of class)
자바스크립트 클래스의 프로토타입(prototype of class)
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 

Plus de 우영 주

스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리우영 주
 
스트리밍과 플레이어
스트리밍과 플레이어스트리밍과 플레이어
스트리밍과 플레이어우영 주
 
프런트엔드개발, 지금과 다음
프런트엔드개발, 지금과 다음프런트엔드개발, 지금과 다음
프런트엔드개발, 지금과 다음우영 주
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
아재가 젊은이에게 사랑받는 마크업을 하는 방법
아재가 젊은이에게 사랑받는 마크업을 하는 방법아재가 젊은이에게 사랑받는 마크업을 하는 방법
아재가 젊은이에게 사랑받는 마크업을 하는 방법우영 주
 
Introduce Guetzli
Introduce GuetzliIntroduce Guetzli
Introduce Guetzli우영 주
 
스코프와 실행문맥
스코프와 실행문맥스코프와 실행문맥
스코프와 실행문맥우영 주
 
좋은 기능을 만드는 방법
좋은 기능을 만드는 방법좋은 기능을 만드는 방법
좋은 기능을 만드는 방법우영 주
 
서비스를 성공적으로 만드는 방법
서비스를 성공적으로 만드는 방법서비스를 성공적으로 만드는 방법
서비스를 성공적으로 만드는 방법우영 주
 
다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!우영 주
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.우영 주
 
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강 [토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강 우영 주
 
명세부터 깨우치는 FILEAPI
명세부터 깨우치는 FILEAPI명세부터 깨우치는 FILEAPI
명세부터 깨우치는 FILEAPI우영 주
 
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기우영 주
 
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)우영 주
 
Javascript Test Double Sinon.js
Javascript Test Double Sinon.jsJavascript Test Double Sinon.js
Javascript Test Double Sinon.js우영 주
 
HTML5 BOILERPLATE를 소개합니다.
HTML5 BOILERPLATE를 소개합니다.HTML5 BOILERPLATE를 소개합니다.
HTML5 BOILERPLATE를 소개합니다.우영 주
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기우영 주
 

Plus de 우영 주 (19)

스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리
 
스트리밍과 플레이어
스트리밍과 플레이어스트리밍과 플레이어
스트리밍과 플레이어
 
프런트엔드개발, 지금과 다음
프런트엔드개발, 지금과 다음프런트엔드개발, 지금과 다음
프런트엔드개발, 지금과 다음
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
아재가 젊은이에게 사랑받는 마크업을 하는 방법
아재가 젊은이에게 사랑받는 마크업을 하는 방법아재가 젊은이에게 사랑받는 마크업을 하는 방법
아재가 젊은이에게 사랑받는 마크업을 하는 방법
 
Introduce Guetzli
Introduce GuetzliIntroduce Guetzli
Introduce Guetzli
 
스코프와 실행문맥
스코프와 실행문맥스코프와 실행문맥
스코프와 실행문맥
 
좋은 기능을 만드는 방법
좋은 기능을 만드는 방법좋은 기능을 만드는 방법
좋은 기능을 만드는 방법
 
서비스를 성공적으로 만드는 방법
서비스를 성공적으로 만드는 방법서비스를 성공적으로 만드는 방법
서비스를 성공적으로 만드는 방법
 
다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!다함께, FluxUtils 한바퀴!
다함께, FluxUtils 한바퀴!
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.
 
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강 [토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
 
명세부터 깨우치는 FILEAPI
명세부터 깨우치는 FILEAPI명세부터 깨우치는 FILEAPI
명세부터 깨우치는 FILEAPI
 
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
 
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
 
Javascript Test Double Sinon.js
Javascript Test Double Sinon.jsJavascript Test Double Sinon.js
Javascript Test Double Sinon.js
 
LESS와 EMMET
LESS와 EMMETLESS와 EMMET
LESS와 EMMET
 
HTML5 BOILERPLATE를 소개합니다.
HTML5 BOILERPLATE를 소개합니다.HTML5 BOILERPLATE를 소개합니다.
HTML5 BOILERPLATE를 소개합니다.
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기
 

JavaScript Promises