[Node.JS] 강좌 01편: 소개


list

Node.js 가 뭐지?

NodeJS 는 구글 크롬의 자바스크립트 엔진 (V8 Engine) 에 기반해 만들어진 서버 사이드 플랫폼입니다. 2009년에 Ryan Dahl에 의해 개발되었으며 현시점 (2016-02-07) 최신 버전은 v5.5.0 입니다. NodeJS 공식 사이트에서 제공되는 정보는 다음과 같습니다.

Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리이기도 합니다.
(출처: https://nodejs.org/ko/)

입문자들의 오해

Node는 웹서버가 아니랍니다. Node 자체로는 아무것도 하지 않습니다 – 아파치 웹서버처럼 HTML 파일 경로를 지정해주고 서버를 열고 그런 설정이 없습니다. 단, HTTP 서버를 직접 작성해야합니다 (일부 라이브러리의 도움을 받으면서). Node.js 는 그저 코드를 실행할 수 있는 하나의 방법에 불과한 그저 JavasScript 런타임일 뿐입니다.

Node.js 의 특징

  • 비동기 I/O 처리 / 이벤트 위주: Node.js 라이브러리의 모든 API는 비동기식입니다, 멈추지 않는다는거죠 (Non-blocking). Node.js 기반 서버는 API가 실행되었을때, 데이터를 반환할때까지 기다리지 않고 다음 API 를 실행합니다. 그리고 이전에 실행했던 API가 결과값을 반환할 시, NodeJS의 이벤트 알림 메커니즘을 통해 결과값을 받아옵니다.
  • 빠른 속도: 구글 크롬의 V8 자바스크립트 엔진을 사용하여 빠른 코드 실행을 제공합니다.
  • 단일 쓰레드 / 뛰어난 확장성: Node.js는 이벤트 루프와 함께 단일 쓰레드 모델을 사용합니다. 이벤트 메커니즘은 서버가 멈추지않고 반응하도록 해주어 서버의 확장성을 키워줍니다.  반면,  일반적인 웹서버는 (Apache) 요청을 처리하기 위하여 제한된 쓰레드를 생성합니다. Node.js 는 쓰레드를 한개만 사용하고  Apache 같은 웹서버보다 훨씬 많은 요청을 처리할 수 있습니다.
  • 노  버퍼링: Node.js 어플리케이션엔 데이터 버퍼링이 없고, 데이터를 chunk로 출력합니다.
  • 라이센스: Node.js 는 MIT License가 적용되어있습니다.

Node.js 는 누가쓸까?

Node.js는 eBay, GoDaddy, Microsoft, Paypal, Yahoo! 등 많은곳에서 사용되고 있답니다.
다음은 Node.js 를 사용하는 프로젝트, 어플리케이션 및 회사의 리스트를 포함하고있는 GitHub 위키 링크입니다.

Node.js 를 사용하는 프로젝트 / 어플리케이션 / 회사

Node.js 를 어디에 쓸까?

다음과 같은 분야에 Node.js 가 사용된다면 뛰어난 효율성을 달성 할 수 있습니다.

  • 입출력이 잦은 어플리케이션
  • 데이터 스트리밍 어플리케이션
  • 데이터를 실시간으로 다루는 어플리케이션
  • JSON API 기반 어플리케이션
  • 싱글페이지 어플리케이션

Node.js 를 쓰지 말아야 할 곳?

CPU 사용률이 높은 어플리케이션에선 Node.js 사용을 권장하지 않습니다.

list

  • Terry

    CPU 사용률이 높은 application 이라고 한다면 예를 들어 어떤것인가요?

    • Kyoungbum Jin

      단일 Operation에 Runtime이 길거나 Heavy한 작업들을 말씀하시는 걸겁니다.

  • Banyuck2

    node.js의 기초를 잡기 위해 강좌 열람합니다~ 좋은정보 감사합니다.~^^;

  • 정주행 시작합니다~

  • 이기현

    잘보고 갑니닿ㅎ

  • 감사합니다~

  • Yoon Seo Lee

    잘보고갑니다!! 감사합니다

  • Sted

    Node.js가 자바스크립트를 처리하는 부분은 단일 쓰레드지만 내부적으로는 Thread Pool을 이용한 멀티 쓰레드 처리를 한다고 알고 있는데요, 왜 CPU 사용률이 높으면 Node.js 사용을 권장하지 않는 건가요?

    • daniel1337

      저도 이 부분이 궁금하네요!!

      • 1

        CPU 사용율이 높더라도 여러개의 Node.JS 프로세스를 사용하면 되지 않나요? I/O 담당 프로세스 + 연산 담당 프로세스 여러개 이렇게 사용하면 괜찮을거 같은데

        • daniel1337

          Node.js가 Non-blocking I/O 방식을 지원하더군요. 그래서 I/O는 이벤트를 처리하는 와중에도 다른 이벤트를 받을 수 있습니다. 따라서 “1”님이 말씀하신 것 처럼 CPU를 효율적으로 사용할 수 있군요. 하지만 CPU는 한정된 자원이고 이벤트는 작업을 완전히 끝낼 때까지 본인이 갖는 스레드의 제어권을 넘기지 않기 때문에 사이즈가 큰 처리요구가 많아질 경우에 문제가 생길 가능성이 높아질 겁니다.

        • daniel1337

          https://isme2n.github.io/devlog/2017/06/27/node-js/
          이 분이 좀 쉽게 쓴 것 같네요!

  • geuniii

    go hard

  • Moose

    감사합니다!

  • JE.Kim

    늦은감이 없지만, 이제부터 Node.js를 배워보고자 합니다. (사실 갑자기 알아야만 하는 계기가 생겨서 ^^)
    정리를 매우 잘 하셔서 많은 도움이 될 것 같습니다.
    감사합니다 🙂

  • 한연희

    감사합니다!