노드js는 자바스크립트의 발전 이래 범용 자바스크립트인 Common JS 1.0 명세를 따르고 있습니다.
node.js의 특징이자 강력한 장점에 대해서 차근차근 설명해나가고자 합니다.
이전에는 백엔드 프로그래밍과 프로트엔드 프로그래밍에서의 언어가 확실히 분리되어
서버 프로그래밍에는 java, c, php, perl, ruby와 같은 언어들이 사용되었고(물론 지금도 광범위하게 사용되고 있다)
프론트엔드 프로그래밍에는 UI를 구성시키는 html과 css그리고 동적으로 동작하게 하는 javascript가 사용되었다.
프론트엔드를 다루었던 javascript는 프로토타입(prototype : 원형)형 객체지향 프로그램이을 따르고 있었고, 스크립트 언어이었기에 속도가 느려서 백엔드에서 로직을 구동하는 것은 어려운 언어였다.
하지만 v8에서 기본적인 javascript들이 미리 컴파일되어 작동시키는 구조를 갖게 됨으로써 엄청 속도가 향상되게 되었다.
이러한 javascript의 발전으로 nodejs라는 백엔드 서버 기술로써 javascript를 사용하는 nodejs가 탄생 할 수 있게 되었다.
** Common JS 란 무엇인가?
nodejs는 Common JS란 스펙을 따르고 있는데 그렇다면 이 Common JS란 무엇인가?
node.js를 작업하다보면 exports, module, require 등의 클라이언트 자바스크립트에서 사용하지 않는 지시어를 사용하게 되는데 이 것이 Common JS의 스펙에 명세된 지시어이기 때문이다.
** Node.js 이전에 helma, appjet, jaxer 등등 역시 모두 javascript로 서버 사이드를 작업을 할 수 있게 만든 것이었는데 유독 Node.js 만 성공한 이유는 무엇일까?
(1) 자바스크립트에 대한 인식 변화(역시 뛰어난 자들이 자바스크립트 진영에 뛰어든 효과는 엄청나다고 생각한다)
(2) javascript engine의 성능향상(v8엔진은 c++로 만들어져있고 성능이 매우 우수하다)
(3) Blocking I/O를 제거했다!
이렇게 정리 할 수 있겠다.
nodejs를 두 단어로 표현한다면?
Event Driven !, Non-Blocking IO !
A. 싱글 스레드의 의미에서 설명하자면
점원이 한명이고 손님이 5명, 그리고 그 다음 손님이 나라면
내가 업무를 처리 할 수 있는 것은 점원이 5명의 손님의 업무를 처리한 채로 6번째 순서가 된다.
엄청난 시간 낭비가 아닐 수 없다. 한국 사람들이 그렇듯이 컴퓨터 역시 이렇게 불필요하게 기다리는 것은 정말 싫어한다.
B. 멀티 스레드의 의미에 대해서 설명하자면
점원이 5명이고 손님이 5명, 여섯 번째 손님인 나는 1명만 기다리면 된다.
C. 이벤트 드리븐 방식에 대해서 설명하자면
점원은 한 명 손님은 여러명이다. 하지만 점원이 업무를 처리하는 동안 나는 저기 다른데 가서 일을 처리하고 있으면 된다.
결과적으로 내가 기다리는 시간 0시간이다. 다른 일을 할 수 있게 되었다는 것은 엄청나다.
이와 같은 예는 이벤트 드리븐 방식과 논 블록킹을 설명하는데 아주 적합한 예라고 할 수 있겠다.
출처는 http://blog.secmem.org/491
'Node.js' 카테고리의 다른 글
nodejs express의 모듈화 (0) | 2015.04.01 |
---|---|
windows -> ubuntu linux 로의 nodejs 변경에 따른 이슈 (0) | 2015.03.05 |
Amazon AWS EC2 - Ubuntu Linux 에 node js 설치하기 (0) | 2015.03.03 |