Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
노드의 특징은 다음과 같습니다.
노드의 장점
노드의 단점
위와 같은 장/단점을 고려해 보았을 때 노드는 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합합니다. 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있기 때문입니다. 실시간 채팅 애플리케이션이나 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용합니다. 반대로 이미지나 비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않습니다.
처음에는 대부분 노드를 서버로 사용했지만, 노드는 자바스크립트 런타임이기 때문에 용도가 서버에만 한정된 것은 아닙니다. 사용 범위가 점점 늘어나 웹, 모바일, 데스크톱 애플리케이션 개발에도 사용되기 시작했습니다.
노드 기반으로 돌아가는 대표적인 웹 프레임워크로는 Angular와 React, Vue, Meteor 등이 있습니다. Angular는 구글 진영에서 프런트엔드 앱을 만들 때 주로 사용하고, React는 페이스북 진영에서 주로 사용합니다. 모바일 개발 도구로는 React Native와 Ionic Framework를 많이 사용합니다. 페이스북, 인스타그램, 에어비앤비, 월마트, 테슬라 등이 React Native를 사용하여 모바일 앱을 운영 중입니다. 데스크톱 개발 도구로는 Electron이 대표적입니다. Electron으로 만들어진 프로그램으로는 Atom, Slack, Discord 등이 있습니다.
이벤트 루프 참고 영상