node.js 맛보기

데스크탑에서 돌릴 개인용 위키를 알아보던 중에 node.js 기반의 것들이 몇 개 보여서 node.js를 설치한 김에, 간단히 맛보기 정도만 알아보았다.

node.js 란

node.js는 구글 크롬 브라우저의 자바스크립트 해석기로 유명한 V8엔진을 감싼 런타임 환경이다. 그러니까 자바스크립트를 사용해서 PC머신이나 서버상에서 돌아갈 수 있는 앱을 작성하도록 해주는 ‘해석기’라고 생각하면 된다. 언어로는 자바스크립트를 사용하지만 웹 프론트 개발에 사용하는 문서 객체 모델을 사용하는 것은 아니므로, “서버 개발에 경험이 없는 사람에게 쉬운” 건 절대 아니다. 대신에 자체적으로 제공하는 모듈이나 exopresso 와 같은 멋진 프레임워크들이 있어서 웹 서비스 개발을 빠르게 할 수 있는 건 맞다.

기존의 자바스크립트는 웹브라우저 속에서만 돌아가는 언어였다. 코딩 초보자에게는 “웹 브라우저만 있으면 배울 수 있는 언어”였기에 추천할 만 했지만, “웹브라우저를 벗어나서는 쓸모있는 걸 만들기가 어렵다”는 한계가 있다. node.js는 자바스크립트 해석기를 기본적인 입출력 모듈로 감싼 형태로 파일을 읽고 쓰거나, 네트웍을 사용할 수 있는 기능을 더해 웹브라우저 없이 독립적으로 구동 가능한 앱을 제작할 수 있도록 한다.

예제

맛보기로 node.js를 사용해서 hello world를 찍어보자. 간단히 console.log를 사용해서 문구를 찍을 수도 있겠지만, 기왕이면 간단히 웹 서버 모듈을 사용해서 브라우저에서 확인해 볼 수 있도록 하자.

require

node.js로 제작한 앱은 여러 개의 js 파일로 나뉠 수 있고, 이 때 각각의 파일을 모듈로 취급한다. http 모듈은 간단한 웹 서버 모듈을 제공하고 있으니, 이를 사용하면 된다. 다른 모듈을 가져올 때는 require() 함수를 사용한다. 그리고 여기서 사용하고자 하는 http 모듈은 node.js의 기본 모듈로, 별다른 경로 없이 모듈 이름만을 사용하며, 커스텀 모듈을 사용하는 경우, 현재 모듈에서의 상대 경로를 적어주면 된다.

var http = require('http')

server

http 모듈이 웹 서버 객체를 제공하고 있으므로, 이를 그대로 사용한다. 우리가 해야 할 일은 웹서버가 요청을 받았을 때 응답 객체를 처리하도록 코드를 작성해주고, 웹 서버가 특정 포트를 리스닝하도록 한다. 웹 서버가 포트를 리스닝하면 이벤트 루프가 시작되고, 요청이 들어오면 request 이벤트가 발생하여 이를 처리할 함수가 실행된다.

var server = http.createServer();
server.on('request', function(req, res){
    res.writeHead(200);
    res.write('Hello World!');
    res.end();
});

server.listen(8088, function(){
    console.log('listening 8088 > http://localhost:8088');
});

실행

위 파일을 web.js로 저장하고, 다음 명령으로 실행한다.

node web.js

서버가 포트 리스닝을 시작하면 위 코드에서 입력해 둔 메시지가 출력되고 반응이 없어지는데, 웹 서버가 이벤트 루프를 시작했다는 의미이다. 웹 서버에서 http://localhost:8088로 접속하면 기대하던 결과를 얻을 수 있다.