ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js - 노드 : 특징
    IT&개발/node.js 2015. 9. 1. 23:16
    728x90
    반응형

    노드란?


    node.js의 등장배격은 2008년 구글에서 크롬브라우저의 소스코드를 공개하였고,

    브라우저를 분석을 하니 V8 엔진 위에서 javascript 코드를 실행시켜주는 이벤트 처리 I/O 프레임워크가 존재하였는데 이것이 node.js 였다.

    node.js는 


    노드의 특징 4가지


    1. Chrome JavaScript Engine V8 기반의 서버 플랫폼


    - V8은 Google에 의해서 C++로 개발된 오픈 소스 자바스크립트 엔진


    - JavaScript를 compile하여 native machine code 변경 후 runtime시 다시 최적화하여 실행하는 구조.

    [스크립트 언어]

    (컴파일 과정이 없다.)

    javascript code -> native machine code


    - Garbage Collection을 통한 메모리의 효율적인 관리. ( memory leak는 개선의 여지가 있음 )


    - Standalone 고성능 JavaScript 엔진으로 사용가능. 


    2. 빠르고 확장 가능한 Network 프로그램 개발에 특화


    - TCP , UDP 관련 프로그램 개발 가능


    - 하지만, 거의 대부분 Web Application 작성에 활용   






    3. Single Thread 기반의 Non-Blocking I/O model 사용


    노드를 사용하는 가장 중요한 이유중 하나는 비동기형 방식이다.


    동기형과 비동기형의 차이를 알아보자.



    <동기형>


    첫번째 코드는 동기형일 경우이다. 

    코드를 보면 query를 날리는 구문이 있다. 

    var sum = result + 100; 이 실행되려면 query()의 결과값이 나와야 실행이 된다.

    동기형이 친숙한 사람들은 이것이 당연하다고 생각하실 수도 있다.


    하지만 비동기형 코드를 보자.


    <비동기형>


    비동기형의 경우 query를 던져놓고 바로 console.log("first")를 실행한다.


    그리고 결과 값이 나오면 function(result){console.log("second")}가 실행이 된다.


    그렇다면 비동기형식과 동기형식중에 무엇이 더 낳을까?


    이것은 상황에 따라 다르다. 비동기형식은 I/O 작업이 많을 경우 빠른 속도를 보인다.



    그리고 Single Thread 기반이란  multi Thread 기반과 비교하면서 이야기해보자


    다음의 그림을 참조하면 된다.






    <Multi Thread>

    -동시에 Service할 수 있는 Client의 수는 Thread Pool안에 있는 가용한 Thread의 수와 동일


    -일반적으로 Thread Pool안의 Thread는 500~2000. ( 2000을 넘는 경우는 거의 없다. )


    -할당된 Thread가 IO작업( Network, File, DB )을 하게 되면 blocking 방식으로 처리되어 해당 Thread가 CPU를 사용하지 않는 상태(wait 상태)로 변환.


    -즉, IO시간만큼 Thread는 blocking.




    <Single Thread>


    Node.js 는 Single Thread로 구성되어 있다. 내부적으로는 Thread Pool 로 구성되어 있다.





    4. Event Driven Programming Model 


    이것은 간단히 말하면 node는 non-blocking 기반이기 때문에 항상 이벤트가 발생하며 이벤트에 해당하는 작업이 실행된다. 


    노드에서 이벤트 처리를 하는 것은 다음 링크를 참조하자


    http://posnopi13.tistory.com/9







    반응형

    댓글

Designed by Tistory.