#Node.js

##개요 크롬의 v8 자바스크립트 엔진을 이용한 Event Driven, Non-block I/O을 지원하는 경량의 플랫폼. 흔히 서버사이드 자바스크립트 플랫폼이라고 취급되기도 하며 I/O가 많은 네트워크 어플리케이션(특히 웹서버)를 작성하는데 강점을 보인다. 이미 널리 알려져있는 Javascript를 언어로 사용가능하며 Server-Side와 Client-Side의 코드를 같이 쓸수 있다는 점 때문에 사용되기도 한다.

##주요 사용처 * Web Server * 적은 메모리로도 다수의 사용자를 처리할수 있는 장점이 있다. * Web Socket Sever * Socket.io라는 모듈의 존재로 인해 Websocket구현이 간편해지고 Server side와 Client Side모두 같은 인터페이스를 가지고 구현이 가능하다.

##특징 사용자 층이 넓은 javascript를 사용언어로 채택해서인지 nodejs의 패키지 관리자인 npm에 등록된 모듈수가 상상을 초월할만큼 많다. 따라서 내가 필요한 왠만한 기능들은 전부 npm에 있다고 봐도 과언이 아니며 마치 레고조립 하듯이 모듈들을 조립하여 어플리케이션을 만드는 것도 가능하다.

이러한점은 장점이 되기도 하지만 단점이 되기도 하는데 너무 많은 모듈이 남발되어 실제로 이 모듈이 좋은 모듈인지 아닌지 판단하기 어렵다는 점이 있다. 하지만 npm사이트인 npmjs.org에 이미 별점 기능이나 몇번이나 사용되었는지 혹은 몇개의 모듈에서 사용중인지 확인할수 있어 판별하기가 어렵지 않다.

또다른 특징으로 Non-block I/O를 위해 callback function을 많이 사용하는데 이 callback function이 직관적이지 못하고 Error Handling이 어려워 비판의 요소가 되기도 한다. Express를 비롯한 우수한 모듈을 많이 만들어오던 TJ는 이를 Callback Hell이라고 비판하며 node.js를 떠나 go를 사용하겠다고 선언하기도 했다#.