Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Callback Hell

Avatar for AHN JAE-HA AHN JAE-HA
November 06, 2014

Callback Hell

Node.js 에 대한 기초적인 설명 + 비동기 프로그래밍에 대한 설명

Avatar for AHN JAE-HA

AHN JAE-HA

November 06, 2014

Other Decks in Programming

Transcript

  1. Node.js는 Ryan Dahl에 의해 2009년에 처음 시작되었으 며, 그가 일하던

    Joyent라는 회사에서 개발 및 운영을 담당 Ryan Dahl은 Flickr의 파일 업로드 프로그래스바를 보았 을 때, 파일이 얼마나 업로드 되었는지 알지 못했고, 알기 위해서는 서버에 쿼리를 날려야한다는 점을 보고 조금 더 쉬운 방법을 찾는 과정에서 Node.js를 고안 처음부터 JavaScript를 Server Side로 옮기려던 것은 아니 었고, 자신의 목적에 적합했던 언어가 마침 JavaScript 였 음 NodeJS 시작
  2. • 단 하나의 쓰레드가 이벤트 룹을 구동 • V8 엔진

    내부적으로 코드를 컴파일하여 구동 • Event 방식으로 비동기 I/O를 구현 • 익명의 함수(Anonymous function)와 클로져 (Closure)를 사용 (자바스크립트 특성) • HTML5 표준 중 하나인 WebSockets를 라이브러리 형 태로 지원 • …… NodeJS 특징
  3. • Node는 내부적으로 컴파일 된 바이너리 형태로 구동 하므로 속도가

    빠르다. • 서버와 클라이언트가 언어가 통일되고, 주요 로직이 쉽 게 공유 될 수 있다. • 쓰레드(혹은 프로세스)의 소비가 없기 때문에 메모리 과다 할당 문제가 없다. 따라서, 같은 메모리 크기로 더 많은 동시 접속을 받을 수 있다. • 스크립트 언어의 특성상 코드의 수정과 테스트가 편리 하다. NodeJS 장점
  4. • 이벤트 구동 방식 프로그래밍은 기존의 제작 방식에 비 해

    학습이 어려울 수 있다. • 실수로 동기적 코드를 이용하는 경우 치명적인 성능 저 하를 유발 할 수 있다. NodeJS 단점
  5. 5 개의 동기 작업을 순차적으로 수행하려면? for ( var i

    = 0 ; i < 5 ; I ++ ) { sync(i); } console.log( “작업완료”); 동기와 비동기
  6. 5 개의 비동기 작업을 순차적으로 수행하려면? for ( var i

    = 0 ; i < 5 ; I ++ ) { async(i); } console.log( “작업완료????????”); 동기와 비동기
  7. 5 개의 비동기 작업을 순차적으로 수행하려면? for ( var i

    = 0 ; i < 5 ; I ++ ) { async(i); } console.log( “작업완료????????”); 동기와 비동기
  8. 5 개의 비동기 작업을 순차적으로 수행하려면? async( 1, function ()

    { async( 2, function () { async(3, function () { async(4, function () { async(5, function () { console.log( “작업완료????????”); }); }); }); }); }); 동기와 비동기
  9. 5 개의 비동기 작업을 순차적으로 수행하려면? async( 1, function ()

    { async( 2, function () { async(3, function () { async(4, function () { async(5, function () { console.log( “작업완료????????”); }); }); }); }); }); 동기와 비동기
  10. Promise • 많은 구현이 존재 es6, bluebird, promise/a+, deffer, q

    …. • 약간의 성능 저하가 있으나 callback hell 을 탈출하기 위한 가장 적합한 방식. • 최근 chrome에 promise 가 native 로 지원됨 • nodejs에서도 0.11 버전부터 native로 지원할 예정임.
  11. Promise asyncThing1() .then(function() { return asyncThing2();}) .then(function() { return asyncThing3();})

    .catch(function(err) { return asyncRecovery1();}) .then(function() { return asyncThing4();}, function(err) { return asyncRecovery2(); }) .catch(function(err) { console.log("Don't worry about it");}) .then(function() { console.log("All done!");});
  12. Promise function sequential ( item ) { if( item )

    { async(item) .then( function () { return sequential( array.shift() ); }) } else console.log("완료"); } //순차적으로 수행 sequential( array.shift() );