Node.js
Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임
- Node.js는 JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다.
- Node.js는 V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)이다.
- Node.js는 서버사이드 스크립트 언어가 아니다. 프로그램(환경)이다.
- Node.js는 웹 서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.
Node.js의 장점
- Javascript 언어로 프론트엔드 뿐만 아니라 백엔드 개발 환경을 구성할 수 있기에 생산성이 좋다.
- C/C++로 개발된 V8 엔진을 사용하여 확장성이 좋다.
- 다양한 패키지 매니저(npm: node Package Manager)를 기반으로 다양한 모듈(패키지)을 제공하며 필요 라이브러리에 대해 설치하고 사용할 수 있기에 효율성이 좋다.
- 이벤트 기반 Non-Blocking 및 비동기 처리가 가능하다.
: event loop는 비동기 I/O를 사용하므로 스레드가 block 되지 않고 싱글 스레드로 다수의 요청 처리 가능(I/O 예시: 저장장치(SSD, HDD), 데이터베이스, 네트워크 접근), 멀티스레드보다 자원을 효율적으로 사용
- 간단한 확장 모듈 관리가 가능하다.(NPM)
- http 서버 모듈을 내장하고 있어서 아파치와 같은 별도의 웹 서버를 설치할 필요가 없다.
Node.js의 단점
- 싱글 스레드 모델이기 때문에, 하나의 작업이 지연되면 전체 시스템의 성능도 같이 떨어진다.
- 스크립트 언어의 특성상 해당 언어가 수행되어야 에러가 나는지 확인할 수 있어서 에러가 날 경우 프로세스가 종료된다.
- 이벤트 기반 비동기 방식이라 서버의 로직이 복잡한 경우에 ‘콜백 함수 늪(callback hell)'에 빠질 수 있다.