Node.js

Node.js는 Google Chrome의 JavaScript Engine(V8 Engine)에 기반하여 만들어진 서버 사이드 플랫폼이다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적이다.

※ Node.js는 웹서버가 아니다. 다만 Node.js로 웹서버를 구축하기 위해서는 다른 라이브러리의 도움을 받아 HTTP 서버를 소스 코드 내에 직접 작성하여야 한다. Node.js는 그저 이벤트 기반의 코드를 실행할 수 있는 하나의 방법에 불과한 그저 JavaScript Runtime일 뿐이다.

(웹페이지의 뷰(View)가 복잡한 구조의 웹서버 구축에는 유용하지 않은 것 같다. 주로 쓰이는 곳은 REST API 등의 View 가 없는 Data만 주고 받는 HTTP 서버로 주로 쓰이는 것 같다.

Node.js의 장점

  • 비동기 I/O 처리 / 이벤트 위주 : Node.js 라이브러리의 모든 API는 비동기식이다. 기존의 절차지향식처럼 코드 윗줄의 실행이 끝나야 다음 줄의 코드가 실행되는 구조가 아니다. 이벤트 핸들러에 의해 무한 루프를 돌다가 콜백 메소드가 실행될 수 있는 상황(이것을 이벤트라고 한다) 가 발생하면 해당 콜백 메소드만 실행되는 구조이다. 소스 코드에 의한 순서는 실행 순서에 큰 의미가 없다.

  • 빠른 속도 : 빠르다고 한다

  • 단일 쓰레드 / 뛰어난 확장성 : 단일 쓰레드 모델이기에, 쓰레드 생성, 종료, 전환에 대한 overhead가 없기 때문에 빠른 속도가 가능하다. 허나 단일 쓰레드는 서버 CPU의 하나의 물리 코어만 사용하는 구조이기 때문에, 멀티 코어 서버에서는 더 낮은 성능을 보일 수도 있다.

  • 노 버퍼링 : 버퍼링이 없다고 한다

Node.js가 효율적으로 작동하는 분야

  • 입출력이 잦은 어플리케이션
  • 데이터 스트리밍 어플리케이션
  • 데이터를 실시간으로 다루는 어플리케이션
  • JSON API 기반 어플리케이션
  • 싱글페이지 어플리케이션 (한마디로 REST API나 websocket을 활용한 실시간 스트리밍 서버에 적합한 듯 하다)