정의 : Java 언어가 모든 OS 운영체제 Virtual Machine 환경 안에서 Runtime이 구동 되듯이 Node.js 는 웹브라우저에 종속적인 자바스크립트에서 외부에서 실행할 수 있는 runtime 환경을 chrome V8 엔진을 제공하여 여러 os 환경에서 실행할 수 있는 환경을 제공
javascript를 기반으로 하기 때문에 Node.js 는 풀스택 개발, JSON사용, 비동기 프로그래밍을 가능하게 해 개발 생산성을 높일 수 있다.
JAVASCRIPT가 JSON을 지원하므로 Node.js는 코드의 양이 비교적 적다. JSON은 데이터 표현을 위한 실질적인 표준이다.데이터 저장소로 MongoDB를 사용하면 데이터의 저장부터 노출까지 모든 레이어에 걸쳐 JSON형식으로 데이터 표현이 통일된다.
app.get('/user', function(req, res) {
// Return all the users to a client
User.find({}, function(err, result) {
if (err) throw err
res.json(result)
});
});
이렇게 간단하게 /user 구현 가능
콜백 지옥에 빠질 경우 너무나 코드가 복잡했다.
let RP = require("request-promise");
let sites = await Promise.all([
RP("http://www.naver.com"),
RP("http://www.google.com"),
RP("http://www.yahoo.com")
])
console.log(sites)
Node.js의 성능과 안정성은 걱정하지 않아도 된다. PayPal, Netflix, LinkedIn, Groupon 등 전 세계적인 서비스에서 이미 Node.js를 사용한다. 네이버도 Node.js를 사용해서 초당 5천 건가량의 질의를 24-코어 서버 4대로 처리한다.
내부 실험에서는 Node.js가 Apache보다 좋은 성능을 보였다. 비동기 I/O가 멀티스레드보다 좋은 성능을 보이는 것은 당연하다. PayPal의 실험에서는 요청 처리 속도와 응답 시간에서 Node.js가 Java보다 좋은 성능을 보였다.
Node.js가 특별히 원인을 알 수 없는 이유로 종료된 경우는 없었다. Node.js가 갑자기 종료된 원인은 모두 예외 처리를 하지 않는 등 개발자 실수였다.
Node.js의 또 다른 장점은 빠른 실행이다. 프로세스가 종료돼도 1~2초면 프로세스를 다시 실행시킬 수 있다.
Node.js의 단점으로 타입이 없는 JavaScript 언어의 특성을 이야기하곤 한다. 타입이 있다면 컴파일 시점에 오류를 어느 정도 걸러 낼 수 있다. 그래서 Node.js 서버는 Java 서버에 비해 안정성이 떨어진다고 이야기한다. 맞는 이야기일 수 있다. 그러나 Node.js를 사용해서 DBMS나 검색 엔진과 같은 복잡한 소프트웨어를 개발하지는 않는다. 대부분의 응용 서버는 API와 비즈니스 로직을 제공할 뿐이다. 이런 기능은 JavaScript 정도로 충분하다고 생각한다.