자바스크립트로 서버 어플리케이션을 개발할 수 있는 Node.js는 다음과 같은 특징을 갖습니다.
- 단일 스레드 기반으로 동작함으로써 직관적이고 단순해 안정적이라고 할 수 있음. 특히 스레드간 데이터 동기화등에 대한 골치 아픈 문제가 근본적으로 없다는 점이 큰 장점이지만, 스레드에 숙련된 개발자에게는 한계가 될 수 있음
- 단일 스레드 기반이므로 클라이언트 측의 요청에 대한 빠른 응답에 대한 처리는 비동기 IO 방식을 활용함
- 위의 2가지의 특징과 자바스크립트라는 한계로 인해 서비스 내용을 생성하는데 아주 짧은 시간을 필요로 하는 경우에 대한 서버 개발에 알맞음. 즉, CPU에 너무 많은 부하를 주는 연산이 아닌 간단하고 명료한 서비스에 적합함. 간단하고 명료하다는 기준은 서버의 사양 등에 따라 매우 상대적임.
- 흔히 Node Application이라고 하는 것은 Node.js로 개발한 서버 프로그램을 언급하는 것임
- npm이라는 기능을 통해 Node.js의 확장기능을 추가로 설치할 수 있는데, 확장 기능의 개발과 npm과 같은 손쉬운 추가 방식은 Node.js의 장점 중 특장점이라고 할 수 있음
뭐 일단, 이제는 내 스스로에게 상당히 친숙하고 호감도가 높아진 자바스크립트라는 언어를 통해 서버를 개발할 수 있다는 점에서 Node.js는 충분히 매력적이라고 할 수 있는데요. 특히 스크립트이기 때문에 소스코드를 변경하면 바로 해당 변경 내용을 쉽게 배포할 수 있다는 점이 가장 매력적이라고 할 수 있습니다. 게다가 퍼포먼스 적인 측면에서 V8이라는 자바스크립트 엔진을 사용함으로써 생각 이상으로 상당히 뛰어나다라는 평가 역시 매우 큰 장점입니다. 몇가지 Node.js에 대한 간단한 샘플 코드를 통해 웹상에서 수집한 Node.js에 대한 내용을 정리해 보겠습니다.
먼저 가장 간단한 Node.js의 샘플 코드입니다.
var http = require('http'); http.createServer( function(request, response) { response.writeHead(200, { 'Content-Type' : 'text/plain' }); response.write("Hello, I am a Korea! GIS Developer."); response.end(); } ).listen(8888);
위의 코드는 8888 포트를 통해 HTTP 서버(웹서버) 기능을 가진 프로그램 코드로 클라이언트에게 고정된 문서를 서비스하는 코드입니다.
다음은 URL을 통한 QueryString을 받아 해석하는 코드입니다.
var http = require('http'); var url = require('url'); var server = http.createServer(); server.addListener('request', function(request, response) { console.log('requested ...'); response.writeHead(200, {'Content-Type' : 'text/plain'} ); var parseUrl = url.parse(request.url, true); //var pathname = parseUrl.pathname; var query = parseUrl.query; response.write("a for QueryString : " + query.a); response.end(); }); server.listen(8888);
QueryString으로 a=123으로 주었을 경우, a for QueryString : 123 과 같은 문서를 서비스할 것입니다. 주석으로 처리된 pathname은, 예를 들어 http://www.gisdeveloper.co.kr:8888/Hello?a=133과 같은 URL 호출일 경우 Hello가 됩니다.
다음은 POST 방식을 통한 호출에 대한 코드 예입니다.
http = require('http') ,qs = require('querystring'); http.createServer(function (req, res) { if( req.url == '/' && req.method == 'POST'){ var postBody = ''; req.on('data', function (data) { postBody += data; }); req.on('end', function () { var post = qs.parse(postBody); //post데이터확인 console.log(post['postname']); }); res.end('true'); } else { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('404 ERROR'); } }).listen(8888);
끝으로 Node.js와 DBMS 연동에 대한 코드인데요. DBMS는 MongoDB로써 Node.js는 MongoDB와의 연동을 위해 Mongoose 모듈을 사용합니다. 이 Mongoose는 npm을 통해 설치할 수 있습니다. 참고로 버전 2.7대의 파이션이 필요합니다.
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/myDB'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback() { console.log('open'); }); var userSchema = mongoose.Schema({ username: 'string', age: 'number' }); var User = mongoose.model('User', userSchema); var user1 = new User({ username: 'gchoi', age: 30 }); var user2 = new User({ username: 'jmpark', 'age': 29 }); user1.save(function (err, user1) { if(err) console.log('error'); }); user2.save(function (err, user2) { if(err) console.log('error'); });
이상으로 예제 코드를 중심으로한 Node.js에 대한 내용을 정리해 보았습니다.