본문 바로가기
Development/ETC

NodeJS 웹서버 : 정말 대단한 자바스크립트 엔진

by True Life 2018. 11. 12.


NodeJS : 정말 대단한 자바스크립트 엔진


NodeJS는 어떤 언어일까?


위키백과에는 "확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다."라고 적혀있다.


말그대로 서버사이드단 언어이며 기본은 Javascript 문법을 그대로 사용한다.

특히 ES6의 지원으로 향후 꾸준한 지원을 계속 할 것으로 보인다.


JSP, PHP(APM)등의 언어가 멀티 스레드 구조임과 비교하면 싱글 스레드로 어떻게 웹을 구성하느냐 라는 의문을 가질 수 있다.


하지만 빠르게 처리하고 빠르게 끝낸다라는 기본과 시간이 많이 걸리는 부분은 따로 ThreadPool에 할당하여 관리하니 큰 걱정은 안해도 된다. 멀티 스레드 풀은 libeio의 라이브러리를 사용하며 이벤트 루프는 libev를 사용한다.


어떻게 보면 웹서버란 제너럴한 언어에서 소켓, 그것도 웹소켓의 기능을 지원하는 확장팩이라고 봐도 된다.


C, C++에 80포트, 443 포트를 열고 웹서버 기능을 하는 소켓을 구현하면 그것 또한 웹소켓이 되는것이다.

그런 기능을 Node Standard Library가 하며 기본 바탕은 Javascript를 이용하는 것 뿐이다.


개발하면 할수록 자바스크립트란 참 대단한 언어라는 생각이 든다.


내가 생각하는 장점은 다음과 같다.


1. 지속적으로 언어가 업데이트/보완된다.

2. 형식 지향에서 벗어나 let, var 등의 선언 키워드를 사용한다.

3. 수많은 라이브러리를 쉽게 사용할 수 있다.


이런 장점을 가진 웹서버라니, 그리고 마침 클라이언트에서도 자바스크립트를 애용한다니, 이거야 말로 정말 완벽한(미친) 조합이다.


Asynchronous 하다는 것은 장점이지만 동시에 개발자들에게 불편을 안겨준다.

특히 웹서버를 javascript로 사용한다는 것은 기본적으로 대부분이 Async라서 Callback-hell에 빠지는 경우가 많았다.


하지만 지금은 시대가 달라졌다.

새로이 나온 Promise와, async/await를 통해 비동기를 상황에 맞게 동기처럼, 그 장점은 살리되 개발에 수고를 덜어보자.