Chrome 브라우저의
V8 Javascript
엔진을 탑재한Server Side
오픈소스JavaScript
런타임
이다.
(자바스크립트 런타임에는 노드 이외에 번
과 디노
도 있습니다)
우선 "Node JS(이하 '노드')"
를 제대로 이해하기 위해서는 위의 4가지 개념을 정립하고 넘어가야 할 것 같다.
JavaScript(이하 `JS`)
의 경우 자바스크립트를 직접 다루는 자바스크립트 문법편을 참고하면 되기에 나머지 3가지에 대한 기본 개념만 짚어보자.
V8 자바스크립트 엔진은 JS
언어로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트코드
로 변환,해석,실행을 가능케 하는 엔진으로써, 2008년 Google이 주도하여 C++
을 기반으로 개발한 고성능 엔진이다.
여기서 바이트코드
란 직접 CPU 내의 레지스터와 누산기를 어떤 식으로 사용하라고 명령하는 명령문이나 마찬가지기 때문에 사람 입장에서는 어렵지만 컴퓨터 입장에서는 한결 이해하기가 편한 코드를 뜻한다.
V8 엔진 이외에도 타사에서 만든 여러 엔진들이 존재하는데 예를 들어, 모질라에서 만든 Rhino, 파이어폭스의 SpiderMonkey, 그리고 사파리의 JavaScriptCore 등과 같은 것이 있다.
Server Side란 글자 그대로 서버쪽에서
처리된다라는 것을 뜻하며, 클라이언트로 보낼 웹 페이지(HTML, JavaScript 등이 담긴)를 만들며, 정말 중요한 작업들(사용자 유효성, DB 관련 등)을 수행한다.
대표적인 언어는 Java, PHP, Ruby, Python, Node.js 등을 언급할 수 있다.
이와 반대(?)개념인 Client Side
란 개념도 존재한다.
컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다. 운영 체제 자체에 속하는 경우도 있고 운영 체제에서 작동하는 소프트웨어를 뜻할 수도 있다.
자 이제 수박 겉 핥기 방식으로라도 노드의 정의를 구성하는 요소에 대해서 간단하게 알아보았으니, 노드를 누가? 그리고 왜? 만들었는지를 알아보자.
V8 엔진의 발전으로 자바스크립트의 실행 속도가 급격히 증가하였기 때문에 개발자들은 브라우저 이외의 환경에서도 JS가 동작할 수 있도록 환경을 설정해주고 싶었는데 이 때 2009년 11월, Joyent사의 라이언 달(Ryan Dahl)
이라는 공학자가 V8엔진을 브라우저에서 독립시켜 JS를 브라우저 이외의 환경에서도 구동할 수 있도록 런타임 환경인 Node.js
를 발표했다.
이로써 브라우저 환경 이외에서도 자바스크립트를 사용할 수 있게 되었고 이에 더 나아가 노드에 내장되어 있는 기능들(libuv, httpd, ...)로 높은 동시 요청 처리 성능을 갖는 HTTP Server 구축이 가능하게 되었다.
그럼 왜 사람들은 Node.js를 사용하는 것일까?
그건 다음과 같은 장점들 때문이다.
이와 같은 단점들 때문에 많은 사람들이 Node.js를 사용하였지만 아쉽게도 우리나라에서는 예전부터 정부에서 JAVA를 사용하였고 정부의 오랜 사용으로 인해 국내에서는 Node.js보다는 JAVA를 더 선호하는 편이다.