Node.js os 모듈 — 운영체제 정보 다루기
Node.js os 모듈 — 운영체제 정보 다루기
서버 프로그램을 만들다 보면 지금 실행 중인 운영체제가 Windows인지 Linux인지, CPU 코어는 몇 개인지, 여유 메모리는 얼마나 되는지 알아야 할 때가 있어요. Node.js의 node:os 모듈은 그런 운영체제 관련 유틸리티 메서드와 프로퍼티를 제공해요.
node:os 모듈은 이렇게 불러와요.
import os from 'node:os';
const os = require('node:os');
os.EOL
os.EOL은 운영체제별 줄바꿈(end-of-line) 표식이에요. POSIX에선 \n, Windows에선 \r\n이에요. 파일에 줄을 쓸 때나 이식성 있는 코드에서 유용해요.
os.availableParallelism()
os.availableParallelism()은 프로그램이 사용해야 할 기본 병렬 처리량의 추정치를 돌려줘요. 항상 0보다 큰 값을 돌려줘요. libuv의 uv_available_parallelism()을 감싼 작은 래퍼예요.
os.availableParallelism();
// 예: 8
os.arch()
os.arch()는 Node.js 바이너리가 컴파일된 운영체제 CPU 아키텍처를 돌려줘요. 가능한 값은 'arm', 'arm64', 'ia32', 'loong64', 'mips', 'mipsel', 'ppc64', 'riscv64', 's390x', 'x64' 등이에요. 반환값은 process.arch와 같아요.
os.cpus()
os.cpus()는 각 논리 CPU 코어에 대한 정보를 담은 객체 배열을 돌려줘요. /proc 파일 시스템이 없을 때처럼 CPU 정보를 얻을 수 없으면 배열은 비어 있어요. 각 객체에는 model, speed(MHz), times가 들어 있어요.
[
{ model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: { user: 252020, nice: 0, sys: 30340, idle: 1070356870, irq: 0 } },
// ...
]
times의 user·nice·sys·idle·irq는 각 모드에서 CPU가 보낸 밀리초를 나타내요. nice 값은 POSIX 전용이고, Windows에선 모든 프로세서의 nice가 항상 0이에요.
주의: os.cpus().length로 애플리케이션의 병렬 처리량을 계산하면 안 돼요. 그 목적에는 os.availableParallelism()을 써요.
os.devNull
os.devNull은 널 디바이스의 플랫폼별 파일 경로예요. Windows는 \\.\nul, POSIX는 /dev/null이에요.
os.endianness()
os.endianness()는 Node.js 바이너리가 컴파일된 CPU의 엔디언을 나타내는 문자열을 돌려줘요. 빅 엔디언이면 'BE', 리틀 엔디언이면 'LE'예요.
os.freemem()
os.freemem()은 여유 시스템 메모리(바이트)를 돌려줘요. 서버에서 메모리 상태를 확인할 때 자주 쓰여요.
os.constants
os.constants는 오류 코드, 프로세스 신호 등 운영체제별 공통 상수를 담아요. 프로세스 스케줄링 우선순위 상수도 여기에서 내보내져요. 예를 들어 PRIORITY_LOW는 Windows의 IDLE_PRIORITY_CLASS, 다른 플랫폼의 nice 값 19에 해당하고, PRIORITY_NORMAL은 기본 우선순위로 Windows의 NORMAL_PRIORITY_CLASS, nice 값 0에 해당해요.
정리하면, os 모듈은 실행 환경의 아키텍처·CPU·메모리·플랫폼 구분자·상수를 한곳에서 제공해서, 이식성 있는 서버 코드를 짤 때 빠짐없이 찾게 되는 도구예요.