자바스크립트 런타임 환경으로, 브라우저 이외의 환경(server)애서 JavaScript를 사용할 수 있게 만들어준다. 자바스크립트 를 활용하며 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
이벤트 기반 비동기 방식 으로 작동한다.
JavsScript 엔진(V8 Engine)으로 빌드된 JavaScript 런타임이다.
따라서, 사용자의 요청은 한 곳에서 받지만 작업은 실질적으로 멀티쓰레드로 운영하여 결과를 구현한다.
이벤트 기반 비동식이란?
만약 A,B,C,D,E 가게에서 물건을 만든 후 갖고 오는 작업이 있다면 어떠한 방법이 빠를까?
1. 몸을 복제해 동시에 여러 작업을 수행한다.
2. 각 가게에 작업이 끝나면 연락을 달라고 한 후 연락이 오면 찾아온다.1번 방법이 쓰레드 기반 동기방식이다.
동기 방식은 작업 요청이 들어올 때마다 쓰레드를 여러개 만들어 동시에 일을 처리한다.
좋은 해결책이지만 일이 많아질수록 쓰레드를 더 많이 만들어야 하므로 메모리 사용량이 증가하는 단점이 생긴다.2번 방법은 쓰레드는 1개만 생성한다.
물건을 다 만들면 이벤트(연락)를 받고 처리한다.
가지고 와야할 물건이 아무리 많아도 쓰레드는 1개이기 때문에 메모리 사용량과 시스템 리소스 사용량에는 변화가 거의 없다
이 방식이Node.js
가 사용하는 방식이다.
대규모 네트워크 개발에 용이하지만, 한 개의 쓰레드가 쓰러지는 순간 전체 프로그램에 문제를 일으킨다.
JavaScript를 서버단에서 사용할 수 있다. 그러므로 기존 JavaScript 개발자들은 백엔드 개발에 있어서 언어적 진입 장벽이 비교적 낮다.
이벤트 기반 비동기방식이라 서버 무리가 적다.
npm(node package manager)을 통한다양한 모듈(패키지) 제공
구글은 V8 엔진 성능 업그레이드를 계속 하고 있다.
C++로 개발된 V8 JavaScript 엔진이기 때문에확장성이 좋다.