Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.

노드의 특징은 다음과 같습니다.

  1. 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 의미합니다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해줍니다.(노드는 V8과 더불어 libuv라는 라이브러리를 사용합니다. V8과 libuv는 C와 C++로 구현되어 있습니다. 자바스크립트 코드는 노드가 알아서 V8과 libuv에 연결해주므로 노드를 사용할 때 C와 C++는 몰라도 됩니다.)
  2. 이벤트 기반(Event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미합니다.
  3. 논블로킹 I/O란 작업이 완료될 때까지 멈추지 않고 다음 작업(Input/Output)을 수행하는 것을 의미합니다.
  4. 싱글 스레드란 프로세스 내에서 실행되는 흐름의 단위입니다.

노드의 장점

노드의 단점

위와 같은 장/단점을 고려해 보았을 때 노드는 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합합니다. 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있기 때문입니다. 실시간 채팅 애플리케이션이나 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용합니다. 반대로 이미지나 비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않습니다.

처음에는 대부분 노드를 서버로 사용했지만, 노드는 자바스크립트 런타임이기 때문에 용도가 서버에만 한정된 것은 아닙니다. 사용 범위가 점점 늘어나 웹, 모바일, 데스크톱 애플리케이션 개발에도 사용되기 시작했습니다.

노드 기반으로 돌아가는 대표적인 웹 프레임워크로는 Angular와 React, Vue, Meteor 등이 있습니다. Angular는 구글 진영에서 프런트엔드 앱을 만들 때 주로 사용하고, React는 페이스북 진영에서 주로 사용합니다. 모바일 개발 도구로는 React Native와 Ionic Framework를 많이 사용합니다. 페이스북, 인스타그램, 에어비앤비, 월마트, 테슬라 등이 React Native를 사용하여 모바일 앱을 운영 중입니다. 데스크톱 개발 도구로는 Electron이 대표적입니다. Electron으로 만들어진 프로그램으로는 Atom, Slack, Discord 등이 있습니다.

이벤트 루프 참고 영상

이벤트 루프 참고 영상