본문 바로가기

Data

Node.js ???

노드란 무엇인가??


자바스크립트는 과거에는 제대로 인정받지 못하는 프로그래밍 언어였다. 자바스크립트의 리더 중 한명인

더글러스 크록포드가 2001년  '자바스크립트 : 사계에서 가장 저평가된 언어

( http://javascript.crockford.com/javascript.html)이라는 글을 썼을 정도였다. 하지만 현업 개발자들이 

수년 동안 자바스크립트를 발전시킨 덕분에, 2008년 더글러스 크록포드는 '세계에서 가장 저평가된 언어가

세계에서 가장 인기 있는 언어가 되었다.( http://javascript.crockford.com/popular.html) 라는 글을 올리기에 이른다. 최근 HTML5의 인기와 함께 자바스크립트는 그 역사상 최고의 전성기를 누리고 있으며, 이러한 추세는 더욱 커질 전망이다. 소위 "자바스크립트로 못하는 것이 없다. " 라고  할 만큼 성장했지만 웹브라우저 내에서만 동작한다는 한계가 있었다.


하지만 노드는 이 한계를 없애고 자바스크립트의 영역을 서버사이드 프로그래밍까지 넓혀주었다. 노드는 쉽고 강력한 환경으로 자바스크립트 언어를 서버사이드 프로그래밍 언어로 만들었고 비약적으로 발전하고 있는 자바스크립트의 영역을 한 차원 높여주었다고 할 수 있다. 현재 노드는 개발자 커뮤니티 사이에서 높은 관심을 받고 있으며, 다음과 같은 특징이 있다.



V8 자바스크립트 엔진


노드는 구글 크롬 웹브라우저의 자바스크립트 엔진인 V8을 기반으로 자바스크립트를 사용한다. 덕분에

개발자는 클라이언트에서 사용하던 자바스크립트의 경험과 지식을 그대로 사용해서 서버프로그래밍을

할 수 있다. 이는 노드에 대한 진입 장벽을 현저히 낮춰 쉽게 접근할 수 있는 이점을 준다. 그리고 현재

존재하는 자바스크립트 엔진 중에 가장 빠른 V8의 성능을 그대로 물려받아 어떤 프로그래밍 언어에 못

지 않은 성능을 보여준다.


이벤트 기반 프로그래밍


노드는 이벤트 기반으로 동작한다. 많은 프로그래밍 언어가 멀티스레드 방식을 취하고 있는데, 이벤트

기반은 이에 비교되는 개념이라고 할 수 있다. 멀티스레드는 동시에 여러 가지 일을 하기 위해 다수의

스레드를 만들어서 작업하지만 노드의 이벤트 기반에서는 스레드가 딱 하나만 있다. 그래서 싱글 스레

드가 모든 작업을 직접 처리하는 대신 작업을 위임하고, 완료되었다는 이벤트가 발생하면 결과를 받아

처리한다. 작업이 처리되는 시간 동안 기다릴 필요가 없으므로 스레드가 효율적으로 동작한다. 이벤트

기반 프로그래밍은 넌 블럭킹 I/O와함께 동작하면서 성능이 극대화된다.


비동기/넌블락킹 I/O


일반적인 I/O는 블락킹 I/O이다. 블락킹 I/O를 사용하면 스레드까지 블락킹 되어 I/O를 사용하는 동안

스레드가 대기상태에 있게 된다. 스레드가 대기상태에 잇는 시간은 사실상 낭비되는 시간이고 싱글 스

레드로 동작하는 노드에서 스레드가 블락킹되는 것은 성능에 큰 문제를 발생시킨다. 그리고 블락킹 I/O

와 넌블락킹 I/O를 함께 사용하려면 많은 지식이 필요하다. 그래서 노드의 모든 I/O는 비동기로 동작하

는 넌블락킹 I/O이고 I/O에 대한 전문지식이 없어도 쉽게 사용할 수 있다.


서버 환경에서 자바스크립트로 애플리케이션을 작성할 수 있는 Node.js(노드제이에스)는 이벤트 루프

와 넌블로킹 I/O를 이용한 뛰어난 성능으로 출시된 지 2년 만에 개발자 커뮤니티에서 큰 인기와 주목을

끌고 있다.


--------------------------------------------------------------------------------------------


자바스크립트는 1994년 넷스케이프사 브랜든 아이히가 만든 프로그래밍 언어이다.

자바스크립트는 사용자가 웹 페이지를 이용해 더 많은 경험을 할 수 있게 했다. 인터넷 속도가 빨라져

더 많은 콘텐츠를 제공할 수 있게 되자 자바스크립트는 점점 많은 곳에 활용되었다.

자바스크립트를 사용하는 인구가 많아지자 웹 브라우저를 벗어난 곳에서도 자바스크립트를 사용하려는 

시도가 시작되었다.


Node.js란 서버환경에서 작동하는 자바스크립트 이며 브라우저가 아닌 서버 환경에서 자바스크립트를 

사용하고자 노력했던 결과물이고, 대규모 네트워크 애플리케이션을 개발하고자 만들었다.


기존의 웹 서버는 대부분 스레드를 기반으로 하는 동기방식으로 네트워크 입출력을 처리했다.

반면 노드는 이벤트 기반으로 하는 비동기 방식으로 네트워크 입출력을 처리한다.


이벤트 기반 비동기 방식의 의미


노드는 이벤트기반 비동기 방식으로 작동하기 때문에 대규모 네트워크 프로그램 개발에 적합하다.

기존의 네트워크 프로그램이 사용하는 방식은 동기 방식으로 일을 처리하며 대신 스레드를 여러 개 만들어

동시에 일을 처리했다. 좋은 방법이긴 하나 일이 많아질수록 스레드를 더 많이 나누어야 하므로 메모리 사

용량이 폭발적으로 증가하는 단점이 있다.


반면 이벤트 기반 비동기 방식은, 스레드를 단 하나만 생성하며 이벤트 발생시 해당 일을 처리 해준다. 일이 

아무리 많아도 스레드는 하나이므로 메모리 사용량과 같은 시스템 리소스 사용량에는 변화가 없다.

따라서 대규모 네트워크 프로그램을 개발하기 적합한 형태이다. 물론 장점만 있는 것은 아니다. 일을 처리하는 

스레드가 멈추게 된다면? 순간 프로그램 전체에 문제가 발생하는 단점도 있다.


노드의 장점과 단점


노드의 가장 큰 장점 : 이벤트 기반 비동기 방식을 사용하여 대규모 네트워크 프로그램 개발에 적합

                    단점 : 프로그램 진행에 문제가 발생하는 순간 프로그램 전체가 영향을 받음

 

부가적인 장점 : Node.js 장점은 1) 자바스크립트를 사용한다는 점이다. PHP 개발자, JSP 개발자, AS 개발자

                     Rails 개발자 등 어떠한 웹 개발자도 자바스크립트를 사용할 수 있다. 따라서 모든 웹 개발자가

  쉽게 접근할 수 있다는 점이 첫 번재 장점이다.


   두번째 장점은 2) 구글이 만드는 자바스크립트 엔진을 사용한다는 것!


현재 사용되는 웹브라우저가 사용하는 자바스크립트 엔진

---------------------------------------------------

Internet Explorer                    Chakra

Google                                 V8

Mozila                                 Spider Monkey

Apple                                   Squirrel Fish

Opera                                   Karakan

---------------------------------------------------- 


여러 브라우저가 경쟁하며 자바스크립트 엔진 속도를 발전시키고 있다. 구글은 이에 적극적으로 대응하며

V8엔진 속도를 점점 빠르게 하고 있다.따라서 V8 자바스크립트 엔진을 사용하는 Node.js는 구글이 무너지지

않는 이상 계속 빨라질것이다.


세번째 장점은 C++를 사용해 개발된 V8 자바스크립트 엔진을 사용해 개발되었으므로 C++을 사용하여 기능을

확장할 수 있다.물론 다른 스크립트 언어에도 존재하는 기능이므로  Node.ks만 지닌 장점이라고는 할 수 없지만노드의 장점중 하나로 볼 수 있다.



단점 : 자바스크립트를 사용했다는 것이 단점이 되기도 한다. V8 자바스크립트 엔진이 아무리 빨라도 C언어나 

C++ 언어로 개발된 서버보다는 느리다. 하지만 속도가 비슷한 다른 스크립트 언어를 사용해서도 웹 개발이 많이 이루어지고 있으므로 특별히 문제가 있다고 지적할 수는 없다. 두번째 단점으로는 아직 신생 개발환경이라는 점. 다른 개발 환경에 비해 모듈 개수가 부족하다.




반응형

'Data' 카테고리의 다른 글

데이터 애널리스트(Data Analyst)  (2) 2023.01.08
Web OS란?  (0) 2012.06.18
About Local storage in HTML5  (0) 2012.03.29
11 Hard truths about HTML5  (0) 2012.03.14
Mobile Web _ HTML5 Performance Optimization  (0) 2012.03.14