Node.js의 내장 모듈 중 OS 관련 정보를 확인할 때 유용하고 편리한 os 모듈을 간단히 살펴보겠습니다.
https://nodejs.org/api/os.html
기본 정보 출력해 보기
바로 코드부터 보시죠.
var os = require('os');
console.log("** os.tmpdir = " + os.tmpdir());
console.log("** os.endianness = " + os.endianness());
console.log("** os.hostname = " + os.hostname());
console.log("** os.type = " + os.type());
console.log("** os.platform = " + os.platform());
console.log("** os.arch = " + os.arch());
console.log("** os.release = " + os.release());
console.log("** os.uptime = " + os.uptime());
console.log("** os.loadavg = " + os.loadavg());
console.log("** os.totalmem = " + os.totalmem());
console.log("** os.freemem = " + os.freemem());
console.log("** os.cpus = " + os.cpus());
console.log("** os.networkInterfaces = " + os.networkInterfaces());
console.log("** os.EOL = " + os.EOL);
실행해 봅니다.
# ./node osinfo.js ** os.tmpdir = /tmp ** os.endianness = LE ** os.hostname = TESTSERVER ** os.type = Linux ** os.platform = linux ** os.arch = x64 ** os.release = 2.6.32-279.el6.x86_64 ** os.uptime = 11368746 ** os.loadavg = 0,0,0 ** os.totalmem = 1969029120 ** os.freemem = 382750720 ** os.cpus = [object Object] ** os.networkInterfaces = [object Object] ** os.EOL =
객체와 배열은 JSON으로 보기 좋게 출력하기
그런데 os.cpus(), os.networkInterfaces()는 내용이 제대로 표시되지 않고 [object Object]로만 출력됩니다. os.cpus()는 배열을, os.networkInterfaces()는 객체를 반환하는데, 문자열과 더하는 과정에서 객체가 기본 문자열 표현으로 변환되기 때문입니다.
이럴 때는 JSON.stringify()를 사용하면 내용을 확인하기 쉽습니다. 두 번째 인자에는 변환 함수를 넣을 수 있고, 여기서는 사용하지 않으므로 null을 넣었습니다. 세 번째 인자 2는 들여쓰기 공백 수입니다. 자세한 내용은 JSON.stringify 문서를 참고하시면 됩니다.
var os = require('os');
console.log("** os.tmpdir = " + os.tmpdir());
console.log("** os.endianness = " + os.endianness());
console.log("** os.hostname = " + os.hostname());
console.log("** os.type = " + os.type());
console.log("** os.platform = " + os.platform());
console.log("** os.arch = " + os.arch());
console.log("** os.release = " + os.release());
console.log("** os.uptime = " + os.uptime());
console.log("** os.loadavg = " + os.loadavg());
console.log("** os.totalmem = " + os.totalmem());
console.log("** os.freemem = " + os.freemem());
console.log("** os.cpus = " + JSON.stringify(os.cpus(), null, 2));
console.log("** os.networkInterfaces = " + JSON.stringify(os.networkInterfaces(), null, 2));
console.log("** os.EOL = " + os.EOL);
그리고 다시 실행합니다.
# ./node osinfo.js
** os.tmpdir = /tmp
** os.endianness = LE
** os.hostname = TESTSERVER
** os.type = Linux
** os.platform = linux
** os.arch = x64
** os.release = 2.6.32-279.el6.x86_64
** os.uptime = 11369138
** os.loadavg = 0,0,0
** os.totalmem = 1969029120
** os.freemem = 382623744
** os.cpus = [
{
"model": "AMD Opteron(tm) Processor 6380 ",
"speed": 2500,
"times": {
"user": 1025130800,
"nice": 214300,
"sys": 1011348600,
"idle": 110629538500,
"irq": 30918300
}
}
]
** os.networkInterfaces = {
"lo": [
{
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"family": "IPv4",
"mac": "00:00:00:00:00:00",
"internal": true
},
{
"address": "::1",
"netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"family": "IPv6",
"mac": "00:00:00:00:00:00",
"scopeid": 0,
"internal": true
}
],
"eth0": [
{
"address": "10.0.0.1",
"netmask": "255.255.0.0",
"family": "IPv4",
"mac": "**:**:**:**:**:**",
"internal": false
},
{
"address": "****::****:****:****:****",
"netmask": "ffff:ffff:ffff:ffff::",
"family": "IPv6",
"mac": "**:**:**:**:**:**",
"scopeid": 2,
"internal": false
}
]
}
** os.EOL =
참고할 점
os.totalmem()과 os.freemem()은 바이트 단위의 숫자를 반환합니다. 사람이 읽기 쉬운 MB, GB 단위로 보려면 별도로 나누어 출력하면 됩니다. 또한 os.EOL은 운영체제별 줄바꿈 문자열을 나타내므로, 화면에서는 눈에 잘 보이지 않을 수 있습니다.
이처럼 os 모듈을 사용하면 별도의 외부 패키지 없이도 호스트명, 플랫폼, CPU, 메모리, 네트워크 인터페이스 같은 기본 시스템 정보를 간단히 확인할 수 있습니다.