node.js 란?

 

올해 초 웹 관련 프로젝트를 접하게 되면 node.js 에 대해서 알게 되었습니다.

 

일반적으로 새로운 것을 시작한다고 하면 어떤 방식의 언어일까, 어떤 문법을 써야하나.. 하는 고민이 많다보니 처음부터 개념을 잡아야 한다고 생각이 들어 이래저래 걱정이 많아집니다.

 

하지만, node.js 의 경우, JavaScript 언어를 그대로 사용합니다.

기존에 웹 관련 지식이 있는 분들이 쉽게 사용할 수 있고, html에서 이벤트를 구현하고자 한다면 JavaScript 로 구현된 부분이 많아서 샘플도 쉽게 찾을 수 있습니다.

 

이런 node.js에 대한 내용을 알아보고, 간단하게 강좌를 써볼 예정입니다.

 

 

 

1. V8

 

V8 이라고 하면 생소한 분들이 있겠지만, 크롬 브라우저의 JavaScript 엔진을 가르킵니다.

크롬 브라우저가 처음 등장했을 때, V8 엔진 덕분이 매우 빠른 브라우저로 인기를 누렸습니다.

node.js 에서는 이런 V8 엔진을 사용합니다.

 

2. 서버사이드

 

node.js 에서는 크롬의 V8 JavaScript 엔진을 사용해서 쉽고 빠르고 확장가능한 네트워크 어플리케이션을 구축하게 해줍니다.

기존에 JavaScript의 경우 클라이언트에서만 동작이 가능한 걸로 알고 있었습니다.

이런 JavaScript 언어를 V8 엔진을 사용하면서 서버에서 사용하도록 한게 node.js입니다.

 

기존에 웹서버를 구축하려면 apache 나 tomcat 과 같은 웹 서버를 띄운 후에, html 로 만들어진 문서를 웹에 출력을 하였습니다.

하지만, node.js 에서는 JavaScript 엔진의 용도를 확장하여서 서버에서도 사용할 수 있습니다.

 

JavaScript 언어를 가지고 서버 및 클라이언트(브라우저에서 보여지는 화면)에서 가능하게 한 것입니다.

 

클라이언트-서버 구조를 서버에서 가능하게 하는 서버사이드 방식으로 구현이 가능합니다.

 

서버사이드에 대한 자세한 내용은 위키백과에서 참고 할 수 있습니다.

 

위키백과 : 서버사이드

 

서버사이드의 장단점

 

장점: 서버 관리자의 입장에서, 데이터 위조의 가능성을 줄일 수 있다. 서버 쪽의 데이터가 확실한 진위이며 클라이언트 쪽에서 위조해서는 안 되는 민감한 데이터의 경우 서버 사이드로 처리해야 한다. 예로 인터넷 뱅킹의 이체 관련 처리나 MMORPG의 게임 아이템 관련 처리에서는 클라이언트 사이드 처리를 최소화해야 한다. 한편 클라이언트 사용자의 입장에서는 클라이언트 컴퓨터의 처리 부담이 줄어든다.

 

단점: 서버 관리자의 입장에서, 서버의 처리 부담이 커져 결과적으로 서버 비용이 늘어날 수 있다.

 

 

3. non-blocking

 

기존의 웹서버에 1000명의 사람이 접속했다고 생각을 해봅니다.

이런 경우에 서버에서 느껴지는 부담은 그리 크지 않을 겁니다.

하지만, 사용자가 늘어서 1억명 이상 접속을 했다고 생각을 합니다.

그러면 서버에서 처리 하기에 상당히 버거울 거라고 느껴집니다.

 

사용자들이 많아질수록 좀 더 빠른 속도와 좋은 성능을 가진 하드웨어를 찾게 될 것입니다.

하지만, 이것도 일정 수준을 넘어가면 한계에 도달할 수도 있을 겁니다.

 

Apache 와 같은 웹 서버들은 모든 요청, 즉 접속하는 사용자에 화면을 볼 때마다 시스템 쓰레드를 생성하게 됩니다.

그러다보니 사용자의 요청이 늘어날수록 메모리가 증가하게 됩니다.

 

node.js 의 경우 nginx 과 같은 싱글쓰레드 기반의 Even Loop를 사용한다고 합니다.
사용자의 요청이 들어오면 서버에서는 동작을 요청한 뒤에 콜백을 지정해주고 동작이 완료되면 만들어줬던 콜백이 실행되는 방식이라고 합니다.

 

아래 그래프를 통해서 보면 사용량이 늘어날수록 apache 에서는 메모리가 늘어나는 반면, nginx 는 일정 이상 증가하다가 계속 유지를 하고 있습니다.

 

 

싱글쓰레드이벤트 루프가 non-blocking을 요구하는데 node.js에서 사용할 수 있습니다.

이러한 방식은 좀더 안정적인 서버를 구축하는데 용이할 것입니다.

 

 

~(-_ - ~)

 

node.js에서 알아봤는데, 쉬우면서도 간단할거 같고... 설명에 따르면 좋아보입니다.

하지만, 역시 말로 듣는거 보다 실제 코드를 작성해보는게 더 확실히 나을거 같네요.

 

다음엔 설치에 먼저 알아보도록 하겠습니다. ^ㅇ^