본문 바로가기

IoT Server 설계/Node.js

node.js NPM 설치 및 비동기 프로그래밍 설계

본 포스팅에서는 앞서 설치 했던 node.js (자바스크립트 기반)를 활용하여 간단한 서버 구성예제와 node.js의 사용가능한 모듈들을 모아둔 NPM (Node Package Manager) 의 이론과 설치에 대해서 기술하며 node.js의 특징인 비동기 방식 이해를 돕기 위한 예제를 실습한다.






일전의 포스팅에서는 node.js의 특징과 node.js의 설치 방법에 대하여 기술하였다. (node.js 설치 방법이 환경에 따라 다른 부분이 있다면 문제 되는 부분을 댓글로 남겨주시면 피드백 드리겠습니다.) node.js는 내장 http 라이브러리를 가지고 있기 때문에 웹서버 아파치를 필요로 하지 않고 설치와 동시에 서버쪽에서의 자바스크립트 언어 지식만을 활용해서도 간단한 형태의 웹서버를 구축할 수 있다. 또한 단순히 http 라이브러리만을 가지고 있지 않고 NPM (Node Package Manager)의 설치를 통해서 다양한 모듈들을 사용할 수 있다. NPM은 node.js에서 사용가능한 모듈들을 패키지형태로 모아둔 것으로 웹에서 필요로 하는 특정기능들을 일일이 개발하지 않고 다운로드 후 단 몇줄의 명령어로 활용이 가능하도록 해준다. 따라서 본 포스팅에서는 다음과 같이 1. http 모듈을 활용한 간단한 웹 서버 개발 2. node.js의 NPM 설치 방법 3. 일전의 포스팅에서 설명했던 node.js의 특징인 비동기 프로그래밍 예제에 대해서 설명 및 실습을 진행한다.


1. node.js http 모듈 활용


# vim main.js 


//default http module

var http = require("http");

http.createServer(function (request, response)
{
// Send the HTTP header
// HTTP Status: 200 : ok
// Content Type: text / plain
        response.writeHead(200, {'Content-Type': 'text/plain'});

// Send the response body as "Hello World"
        response.end('Hello World\n');
}).listen(8081);

// Console will print the message

console.log('Server running at http://127.0.0.1:8081/');



크롬에 해당 서버의 IP와 포트번호 8081 혹은 12.0.0.1:8081 을 입력하면 hello world가 출력하는것을 확인할 수 있다.



2. node.js의 NPM 설치


* NPM: node.js에서 사용가능한 모듈들을 패키지화시켜 모아 놓은 것

* Express: node.js 상에서 동작하는 웹 개발 프레임워크


설치에 앞서 NPM은 로컬설치와 글로벌설치로 나눌 수 있다. 옵션을 별도로 지정하지 않으면 로컬로 설치된다.


로컬설치: 현재 디렉터리에 패키지를 설치하며, 노드 모듈은 현재 디렉터리에서 ./node_modules에 그리고 실행파일들은 ./node_modules/.bin/ 에 설치된다.


글로벌설치: 현재의 위치가 아닌 시스템 디렉터리에 설치가 된다. 모듈들은 {prefix}/lib/node_modules 에 위치하며 실행파일은{prefix} /bin 이다. {prefix} 는 /usr/local 쯤이다. 추가적으로 위치를 찾으려면 # find / -name node_modules -type d  를 통해서 확인 할 수 있다. 


// 설치 전 npm이 설치되어 있는지 확인

# npm -version

# npm install npm (로컬설치) / # npm install npm -g (글로벌설치)


// npm express framework 설치

# npm install express (로컬설치) / # npm install express -g (글로벌설치)


// 설치 된 npm 버전확인하여 버전이 뜬다면 설치 완료

# npm -version


3. node.js 비동기 프로그래밍 실습


동기식예제


var fs = require('fs');

var filenames = fs.readdirSync('/usr/local');
var i;
for(i = 0; i < filenames.length; i++)
{
        console.log(filenames[i]);
}

console.log('ready');

console.log('can process next job...');




비동기식예제

var fs = require('fs');

fs.readdir('.', function (err, filenames)
{
    var i;
    for (i = 0; i < filenames.length; i++)
    {
        console.log(filenames[i]);
    }
    console.log('ready');
});

console.log('can process next job...');



문제점: 호출 측에는 비동기로 처리되지만 처리작업 자체가 오래 걸린다면 Event Loop의 병목으로 전체 서버 처리에 영향을 준다.