간단한 예제를 작성해 보았습니다.
var http = require("http"),
sys = require("sys"),
PORT = 8124,
HOST = "127.0.0.1",
arr = new Array("Outsider", "node.js");
function testFunc() {
return "test";
}
http.createServer(function(req, res) {
console.log("Start Server");
console.log("console.log: " + arr);
console.log("console.log: " + testFunc);
sys.puts("sys.puts: " + arr);
sys.puts("sys.puts: " + testFunc);
sys.puts("sys.inspect: " + sys.inspect(arr));
sys.puts("sys.inspect: " + sys.inspect(testFunc));
res.writeHead(200, {"Content-Type": "text/plain"});
res.end("Hello World\n");
}).listen(PORT, HOST);
console.log("Server running at http://127.0.0.1:8124/");
콘솔(혹은 터미널)에 출력해 주는 함수는 2가지가 있습니다. Javascript를 쓸때 흔하게 쓰는 console.log()와 sys.puts()입니다. console.log()는 JS에서 제공해주는 것이므로 바로 사용이 가능하고 sys.puts()같은 경우는 require("sys")로 가져와야 사용이 가능합니다. 위 예제를 실행한 후에 웹페이지에서 접속을 하면 콘솔에 로그가 찍힙니다.
Server running at http://127.0.0.1:8124/
Start Server
console.log: Outsider,node.js
console.log: function testFunc() {
return "test";
}
sys.puts: Outsider,node.js
sys.puts: function testFunc() {
return "test";
}
sys.inspect: [ 'Outsider', 'node.js' ]
sys.inspect: [Function: testFunc]
Start Server
console.log: Outsider,node.js
console.log: function testFunc() {
return "test";
}
sys.puts: Outsider,node.js
sys.puts: function testFunc() {
return "test";
}
sys.inspect: [ 'Outsider', 'node.js' ]
sys.inspect: [Function: testFunc]
위 코드로 찍힌 로그는 위와 같습니다. console.log와 sys.puts는 일단 동일한 결과가 나옵니다. Stackoverflw에 올라온 글을 보면 두 메서드의 차이를 약간 알 수 있습니다. console.log를 여러파라미터를 받을 수 있고 포매팅같은 기능도 지원하고 있습니다. 그리고 첫 파라미터가 스트링이 아닐 경우에는 컨버팅하여서 보여주고 있습니다. 대신에 sys.puts()는 단순히 주어진 파라미터들에 대해서 출력만 해주는 역할을 하고 있습니다. sys.inspect()는 객체의 문자열 표현을 리턴해 주기 때문에 디버깅에 더 유용합니다. 이부분은 node REPL에서 테스트해보면 더 명확하게 알 수 있습니다.
> var sys = require("sys");
> console.log("print %s", "test");
print test
> sys.puts("print %s", "test");
print %s
test
> console.log(sys)
{ print: [Function]
, puts: [Function]
, debug: [Function]
, error: [Function]
, inspect: [Function]
, p: [Function]
, log: [Function]
, exec: [Function]
, pump: [Function]
, inherits: [Function]
}
> sys.puts(sys)
[object Object]
> sys.puts(sys.inspect(sys));
{ print: [Function]
, puts: [Function]
, debug: [Function]
, error: [Function]
, inspect: [Function]
, p: [Function]
, log: [Function]
, exec: [Function]
, pump: [Function]
, inherits: [Function]
}
>
> console.log("print %s", "test");
print test
> sys.puts("print %s", "test");
print %s
test
> console.log(sys)
{ print: [Function]
, puts: [Function]
, debug: [Function]
, error: [Function]
, inspect: [Function]
, p: [Function]
, log: [Function]
, exec: [Function]
, pump: [Function]
, inherits: [Function]
}
> sys.puts(sys)
[object Object]
> sys.puts(sys.inspect(sys));
{ print: [Function]
, puts: [Function]
, debug: [Function]
, error: [Function]
, inspect: [Function]
, p: [Function]
, log: [Function]
, exec: [Function]
, pump: [Function]
, inherits: [Function]
}
>
개인적으로는 명확하게 하기 위해서 console.log(sys.inspect())나 sys.puts(sys.inspect())를 사용하는게 낫지 않을까 생각하고 있습니다. sys.puts()대신에 sys.debug()를 사용하게 되면 아래와 같이 출력앞에 DEBUG라고 표시가 되기 때문에 메시지와 디버그 문자열을 구분할 수 있게 되어 좀 더 편합니다.
Server running at http://127.0.0.1:8124/
DEBUG: sys.puts: Outsider,node.js
DEBUG: sys.puts: function testFunc() {
return "test";
}
DEBUG: sys.inspect: [ 'Outsider', 'node.js' ]
DEBUG: sys.inspect: [Function: testFunc]
DEBUG: sys.puts: Outsider,node.js
DEBUG: sys.puts: function testFunc() {
return "test";
}
DEBUG: sys.inspect: [ 'Outsider', 'node.js' ]
DEBUG: sys.inspect: [Function: testFunc]
Comments