기본 콘텐츠로 건너뛰기

라벨이 node.js인 게시물 표시

[node.js] promise와 async비교 - 1

비동기의 특성을 가진 javascript에서 이런 문제점을 해결하기위해 promise패턴과 혹은 async모듈을 사용한다. 그럼 이둘의 차이점은 무엇일까?? 우선 이름에서부터 차이가 존재한다 promise는 패턴이라는 수식어가 붙고 async는 모듈이라는 수식어가 붙는다. 이 둘이 어떤 차이가 있을까??? 우선 간단하게 확인하는 방법으로는 웹브라우저의 개발자 도구를 이용하는 방법이다. Promise를 입력하면 function이라고 뜬다. 그러나 async는 정의가 되지 않았다고 뜬다. node에서도 마찬가지이다. Promise는 바로 사용이 가능하지만 async는 모듈을 require해야만 사용할 수 있다. 이러한 이유가 발생하는 이유는 async는 비동기를 처리를 하는 프레임워크이다 이러한 비동기적인 문제를 해결하기 위해 만들어진 큰 모듈이다. 하지만 Promise는 단순한 패턴이다.  그렇기 때문에 노드에서 async를 사용하기 위해서는  $ npm install async -g 모듈을 설치를 해주고 require하면 된다. 이 두경우 중에 개인적으로는 async가 먼가 더 정감이 가는건 사실이다. 이유는 promise같은 경우는 Promise를 new통해 생성해내야 한다. 해당 객체를 then으로 이어지는 방식이라 쓸때마다 new Promise를 해야하는 귀차니즘이 존재한다 그에반면에 async는 모듈 호출과 동시에 즉각적으로 쓸수있다. promise이용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 var  _promise  =   function  (param) {      return   n

[node.js] promise pattern을 활용하여 async의 callback hell 해결

동기, 비동기 그리고 promise Asynchronous(비동기) Code란 무엇일까? node를 접하지 않았다면 대부분의 개발자들은 동기방식의 코드에 익숙할 것이다. 다음 코드를 보면 이해하기 쉬울 것이다. void   FTest ( ) {      for ( int  i  =   0  ; i  <   10  ; i ++ ) {          printf ( " %d " , i);      }      return  ; } void   main ( ) {      FTest ( );      printf ( " success " );      return   0 ; } 위 코드를 실행한다면, FTest()가 실행이 되면서 0부터 9까지 출력이 될것이다. 해당 함수가 종료가 된 후 success가 출력이 될것이다. 프로그램을 실행시키는 프로세스는 해당 함수가 종료가 될 때까지 점유를 하고있다. 즉 다른 처리를 하지 못하고 끝날때까지 기다리는 것을 의미한다.(만약 해당 함수가 끝나지 않았는데 처리를 하고 싶다면 쓰레드를 만들면 된다.) java spring기반의 서버를 예를 들어보자 spring은 클라이언트로부터 request가 발생하면 즉시 쓰레드를 만들어낸다. 이후 요청에 대한 처리가 완료된 후 해당 쓰레드를 없앤다. spring같은 경우는 약 1000개의 쓰레드를 생성하여 처리를 할 수 있다고 한다. 물론 서버 PC의 사양에 따라 넘을수도 아닐수도 있을것이다. 만약 쓰레드가 꽉 찼다면? 쓰레드가 꽉 차면 클라이언트는 더이상 요청을 할 수가 없다. 비동기 방식을 사용하면 이러한 문제를 해결할 수 있다. 비동기 방식은 위 코드와 반대로 코드가 끝날 때까지 기다리지 않는다. 즉 요청을 언제든지 받을 수 있다는 것을 의미한다. 그림을 보면 node.js내부에 event loop라는 놈이 존재한다. event loop는 외부에서 요청이 들어