[Ubuntu] Node.js App를 forever로 init.d 에서 기동시킬 때 문제 Develop Tip

Node.js 로 App를 많이 만들고 계십니다.
기존의 단순 웹서버에 Plug-In 방식의 Server-Side-Script 에서 벗어나
마음껏 Server-Side JavaScript 로 App를 구현할 수 있게 만든
마술과도 같은 등장이었지요.

실제로 HTTP 응답 처리를 보면 아파치 웹서버를 동작시켰을 당시 
처음 화면이 "It works" 라는 페이지만 나오는데 이것을 캡쳐해 보면 10여개의 TCP 패킷이 흘러다닙니다.

부하 테스트를 해 보면 아파치 서버는 아무런 모듈이 돌지 않아도
위의 최소 "It works" 를 응답하는데 2,000 ~ 4,000 Transaction / Sec 의 응답 속도를 보입니다.
현재의 일반 Apache와 같은 웹 서버는 요청이 많아질 때마다 
Process가 증가하는 모델과 Thread가 증가하는 모델로 실행할 수 있습니다.
(IIS는 디폴트로 Thread가 증가하는 모델로 알고 있습니다)

위와 같은 경우 그 이상의 요청이 들어오면 다름아닌 DDoS 상태로 빠져버립니다.

그에 반하여 Node.js는 단일 프로세스, 단일 쓰레드 구조에서
Async Queue 방식을 이용하여 응답을 하게 되는데
이런 경우 위의 아파치에 비해서 몇 배 더 좋은 성능 결과를 낸다 합니다. 

흡사, 몇년 전 DDoS 공격을 어느 포털에서는 Ngine-X Reverse Cache로
방어를 하였고 이 Ngine-X의 캐슁 기법이 어찌보면 Async Queue 방식과
유사할 수도 있을 것입니다.

또한 웹 브라우저의 입장에서 HTML5 Widget 등으로 통한
RestFul API를 Ajax 호출을 하여 데이터 바인딩을 한다고 하여도
JavaScript의 Ananymous Function Callback(closer)를 이용한 
방식의 호출과 Non-Blocking 방식으로 돌아가는 Node.js App와는
딱 맞아 떨어지는 궁합을 자랑합니다.

따라서 JavaScript가 좋다 나쁘다를 떠나서
위와 같은 방식으로 작업을 진행할 경우, 
기존의 상당히 무거운 방식의 WAS 와 같은 것을
아주 손쉽게 (아주 작은 Embed 시스템까지) 대치할 수 
있다는 장점이 있습니다.

암튼 잘은 모르지만 Node.js App를 필요에 따라 돌리고 있는데요,
이 App를 우분투 서버에서 데몬 형식으로 기동시키려고 하는데
필요한 것이 Forever 라는 node module 이더군요.

간단한 소개 및 샘플은 다음과 같습니다.

이제는 필요에 따라 /etc/init.d 안에 forever 라는 스크립트로 기동을 시키려 하였고,

간단히 위와 같은 start 를 시키는데 동작을 하지 않았습니다.

결과는 Debian/Ubuntu 계열에서는 아래와 같이 
환경 변수를 넣어 주어야 할 필요가 있더군요.

export PATH=$PATH:/home/node/local/node/bin
export NODE_PATH=$NODE_PATH:/home/node/local/node/lib/node_modules

만약 이런 스크립트를 /etc/profile 등에 넣었다면,
/etc/rc.d 에 있는 것과 같이 시스템이 기동되면서 읽는
초기 init 스크립트에는 적용되지 않고 로그인한 터미널 창에서만
적용되기 때문에 문제가 발생합니다.


어느 분께는 도움이 되셨기를...

덧글

댓글 입력 영역

구글애드텍스트