주의! Node.js 를 처음 접해보는 초보 개발자가 정리하는 글이므로 부족한 점이 많을 수 있습니다.
노드 공식 사이트에서는 노드를 다음과 같이 설명하고 있다.
Node.js 는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임 입니다.
저도 그렇고 사람들도 그렇고 서버(BackEnd)로 사용하는 방법을 익히기 위해 접근을 한다. 하지만 공식 사이트의 노드 소개글에는 서버라는 말이 없으니 당황스러울 수 있다. 하지만 서버라는 말이 없는 이유는 서버만 할 수 있는 언어가 아니기 때문이다.
먼저 서버와 런타임이 무엇인지 알아보자.
1.1.1 서버
노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있지만, 노드는 서버 애플리케이션을 실행하는 데 제일 많이 사용한다.
서버란 무엇일까? 서버는 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다. 클라이언트란 요청을 보내는 주체로 브라우저일 수도 있고, 데스크톱 프로그램일 수도 있고, 모바일 앱이거나 다른 서버에 요청을 보내는 서버일 수도 있다.


1.1.2 자바스크립트 런타임
노드는 자바스크립트 런타임이다. 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행있고 노드는 자바스크립트 실행기라고 볼 수 있다.
그러기에 자바스크립트를 모른다면 노드를 전혀 활용할 수 없다! 노드를 배우기 전에 자바스크립트를 먼저 공부하도록 하자.
기존에 자바스크립트는 웹 브라우저 위에서만 실행할 수 있었다. 브라우저는 자바스크립트 런타임을 내장하고 있으므로 자바스크립트 코드를 실행할 수 있었고 브라우저 외의 환경에서 자바스크립트를 실행하기 위한 여러 시도가 있었으나, 자바스크립트의 실행 속도 문제가 커 호응을 얻지 못했다.
하지만 2008년 구글이 V8 엔진을 사용하여 크롬을 출시하자 이야기가 달라지기 시작했다. 당시 V8 엔진은 다른 자바스크립트 엔진과 달리 매우 빨랐고, 오픈 소스로 코드를 공개했다. 속도 문제가 해결되자 라이언 달은 2009년 V8 엔진 기반의 노드 프로젝트를 시작했다.

libuv는 위 사진에는 없지만 V8과 더불어 C와 C++로 구현 되어 있다. libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.
이제 그럼 위 사진에 있는 libev는 무엇인가? 옛날 라이브러리이다. 옛날에는 libev와 libuv 또는 libeio와 libev를 동시에 사용했었지만 호환성 문제등으로 Node.js v0.9 libev 등이 부터 제거되면서 libuv로 변경이 되었다.

지금은 이 위의 사진과 같다.
libuv - node.js 에서 비동기 처리를 담당하는 라이브러리
v8 - javascript 엔진으로써 자바스크립트를 실행하는 라이브러리