노드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



Posted by slender ankles
,

노드js의 모듈화는 어떻게 시킬까?


nodejs를 시작한지 얼마 되지 않았는데 


각 역할에 맡게 자바스크립트 파일들을 나누어놓았고 서로 독립적인 영역으로 최대한 구분할려고 했다.


하지만 디비는 모든 스크립트에서 다 쓰는데, 매번 디비를 선언하고 연결해야 하나?


좋지 않은 방법 같다. 


그래서 dbcontroller.js라는 파일을 만들어놓고 이를 각 스크립트에서 불러와서 쓰는 방법을 사용하고자 한다. 

간단히 모듈화하는 부분을 나타낸다. 맨 마지막에 exprts하는 부분이 포인트이다. 


 




Posted by slender ankles
,

우선 windows에서 express로 프로젝트를 만드는 것과 우분투 리눅스에서 만드는 것은 버젼이 너무 상이했다. 

호환이 안 되었다. express만 해도 윈도우에서와 다르게 

4.X.X버젼을 사용하는 리눅스 nodejs에서 app.use(app.router)?? 등과 같은 명령은 동작하지 않았다. 

안 쪽의 소스코드를 바꾸는 것은 너무 골치아프고 시간을 낭비하는 느낌이라서 윈도우의 프로젝트 자체를 우분투로

옮기고 mongodb 모듈만 npm install했더니 정상적으로 돌아간다. 

버젼의 중요성과 개발환경에 대한 중요성을 다시 한 번 느꼈다.

'Node.js' 카테고리의 다른 글

node.js의 중요한 특징  (0) 2015.05.09
nodejs express의 모듈화  (0) 2015.04.01
Amazon AWS EC2 - Ubuntu Linux 에 node js 설치하기  (0) 2015.03.03
Posted by slender ankles
,

node.js를 설치 하기 위해 먼저 터미널을 실행합니다.(단축키 : Ctrl + Alt + T)


Linux에는 데비안과 레드햇 계열이 있습니다. Ubuntu는 데비안 계열입니다.

위 내용을 한 이유는 패키지 매니저 때문입니다. 데비안의 경우는 apt-get 레드헷은 yum 이렇게 있습니다.


Ubuntu 이기 때문에 apt-get으로 환경을 구성하겠습니다.



sudo apt-get install python-software-properties

node.js에서 필요한 플러그인을 설치하고 컴파일 하기 위함입니다. 그 이유는 node.js 플러그인 경우에 속도를 위해 javascript로 되어 있는 것이 아닌 c++로 되어 있는 경우가 있습니다.



sudo apt-get install build-essential

node.js 를 컴파일할 때 쓸 c++ 빌더 설치를 하기 위함입니다. 그 이유는 node.js는 구글의 V8엔진을 기반으로 만들어졌고 V8엔진의 경우 크롬에 포함되어 있으며, 크롬은 여러 환경에 구동가능하게 c++로 구성이 되어 있습니다.



일단 sudo로 권한 획득 후 설치를 해줍니다. 위 내용은 노드를 구동하기 위해 기본으로 설치되어야 하는 것들입니다.



sudo add-apt-repository ppa:chris-lea/node.js

sudo apt-get update

apt-get repository에 node.js 추가 후 목록 갱신



sudo apt-get install nodejs

node.js 설치



sudo npm install -g express => 이건 이전버젼에서 사용하는 방법

node.js 플러그인 중 express 설치 -g라는 옵션은 전역으로 설치하겠다는 옵션


sudo npm install -g express-generator

이 방법을 사용해야 함 버젼 4.0 이상이라고 나와있음


express helloworld

express [프로젝트 이름] 형식으로 하면 현재 폴더에서 새로운 폴더가 생성되고 그 안에 express 기본 세팅이 됩니다.



sudo npm install -d

현재 폴더에서 package.json 파일을 찾아서 그 안에 명시된 플러그인 자동 설치합니다.



위 내용까지 하셨으면 기본 프로젝트 준비는 끝났습니다. 인제 실행하는 것만 남았습니다.

프로젝트 폴더에서 app.js가 있는 경로에서 node app.js 입력 후 Enter

'Node.js' 카테고리의 다른 글

node.js의 중요한 특징  (0) 2015.05.09
nodejs express의 모듈화  (0) 2015.04.01
windows -> ubuntu linux 로의 nodejs 변경에 따른 이슈  (0) 2015.03.05
Posted by slender ankles
,