2011년 5월 20일 금요일

[node.js] 오류 발생 시험

일단 node.js의 기본 HTTP 서버 프레임웍으로 오류 발생 시에 어떻게 되는지 시험해 봤다. 내부 작동 구조를 보려는게 아니라 오류가 발생하면 그냥 어떻게 되는지를 확인해 보려는 것이다.

코드


소스는 Hello World에 해당하는 example.js에 한 줄을 추가했다.
var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'ContentType': 'text/plain'});
    a = b + c;
    res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at 127.0.0.1:1337/');
이상한 코드가 한 줄 있다. definition이 전혀 없는 심볼을 참조하려 했으니 일단 런타임 에러가 발생할 것이다.

시험


실행을 시켜봤다.
node example.js
아무런 에러가 뜨지 않는다. 여타 스크립트 기반 언어처럼 런타임 때 모든 것을 처리하는 모양이다. 아마도 이상한 코드(?)가 실행될 때 서버가 죽겠지?

브라우저로 http://127.0.0.1:1337/ 로 접속해 봤다.
/Users/hirenn/Devel/test/example.js:4
    a = b + c;
    ^
ReferenceError: b is not defined
    at Server.<anonymous> (/Users/hirenn/Devel/test/example.js:4:5)
    at Server.emit (events.js:67:17)
    at HTTPParser.onIncoming (http.js:1109:12)
    at HTTPParser.onHeadersComplete (http.js:108:31)
    at Socket.ondata (http.js:1008:22)
    at Socket._onReadable (net.js:681:27)
    at IOWatcher.onReadable [as callback] (net.js:177:10)
오예. 브라우저에는 접속할 수 없다는 메시지가 나오고, 콘솔에서는 에러가 뿅 튀어나왔다. 그리고 예상대로 서버가 죽었다. -_-;;

결론


사실 로직 상 죽는게 당연한 코드이긴 하다. 단지 이번 실험은 오류 발생 시 node.js가 어떤 처리를 해 주는지를 파악해 보려고 했던 것이다.

이 실험에서 기대한 점이 있었다면, 비동기 코드니까 콜백이 신호가 오면 호출될테고, 하지만 비동기구조를 지향하는 node.js인 만큼 콜백의 오동작에도 서버가 견딜 지도 모른다 라는 점이었다.

하지만 여타 언어 처럼 순차적으로 코드를 실행하다 런타임 오류가 발생하면 거기서 멈추는 건 어떻게 극복할 수가 없는 로직 문제인가 보다.

특별한 것을 기대했던게 바보같다. ;;;;;;;;

댓글 없음 :