process
process 객체는 현재 실행되고 있는 프로세스에 대한 정보를 담고 있습니다. process 객체 안에는 다양한 속성이 있는데, 하나씩 REPL에 따라 입력해봅니다.
콘솔
$ node
> process.version
'v22.13.0' // 설치된 노드의 버전입니다.
> process.arch
'x64' // 프로세서 아키텍처 정보입니다. arm, is32 등이 값일 수도 있습니다.
> process.platform
'win32' // 운영체제 플랫폼 정보입니다. linux나 darwin, freebsd 등의 값일 수도 있습니다.
> process.pid
12688 // 현재 프로세스의 아이디입니다. 프로세스를 여러 개 가질 때 구분할 수 있습니다.
> process.uptime()
64.8004743 // 프로세스가 시작된 후 흐른 시간입니다. 단위는 초입니다.
> process.execPath
'C:\\Program Files\\nodejs\\node.exe' // 노드의 경로입니다.
> process.cwd()
'C:\\Users\\zzang' // 현재 프로세스가 실행되는 위치입니다.
> process.cpuUsage()
{ user: 1078000, system: 359000 } // 현재 CPU 사용량입니다.
process.env
REPL에 process.env를 입력하면 매우 많은 정보가 출력됩니다. 자세히 보면 이 정보들이 시스템의 환경 변수임을 알 수 있습니다. 시스템 환경 변수는 노드에 직접 영향을 미치기도 합니다. 대표적인 것으로 UV_THREADPOOL_SIZE와 NODE_OPTIONS가 있습니다.
NODE_OPTIONS=--max-old-space-size=8192
UV_THREADPOOL_SIZE=8
왼쪽이 환경 변수의 이름이고 오른쪽이 값입니다. NODE_OPTOINS는 노드를 실행할 때의 옵션들을 입력받는 환경 변수입니다. --max-old-space-size=8192는 노드의 메모리를 8GB까지 사용할 수 있게 합니다. UV_THREADPOOL_SIZE는 노드에서 기본적으로 사용하는 스레드풀이 스레드 개수를 조절할 수 있게 합니다.
시스템 환경 변수 외에도 여러분이 임의로 환경 변수를 저장할 수 있습니다. process.env는 서비스의 중요한 키를 저장하는 공간으로도 사용됩니다. 서버나 데이터베이스의 비밀번호와 각종 API키를 코드에 직접 입력하는 것은 위험합니다. 혹여 서비스가 해킹을 당해 코드가 유츌되었을 때는 비밀번호가 코드에 남아 있어 추가 피해가 발생할 수 있습니다.
따라서 중요한 비밀번호는 다음과 같이 process.env의 속성으로 대체합니다.
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
이제 process.env에 직접 SECRET_ID와 SECRET_CODE를 넣으면 됩니다.
process.nextTick(콜백)
이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선으로 처리하도록 만듭니다.
nextTick.js
setImmediate(() => {
console.log("immediate");
});
process.nextTick(() => {
console.log("nextTick");
});
setTimeout(() => {
console.log("timeout");
}, 0);
Promise.resolve().then(() => console.log("promise"));
process.nextTick은 setImmediate나 setTimeout보다 먼저 실행됩니다. 코드 맨 밑에 Promise를 넣은 것은 resolve된 Promise도 nextTick처럼 다른 콜백들보다 우선시되기 때문입니다. 그래서 process.nextTick과 Promise를 마이크로테스트(microtask)라고 따로 구분지어 부릅니다.
콘솔
$ node nextTick
nextTick
promise
timeout
immediate
process.exit(코드)
실행 중인 노드 프로세스를 종료합니다. 서버 환경에서 이 함수를 사용하면 멈추므로 특수한 경우를 제외하고는 서버에서 잘 사용하지 않습니다. 하지만 서버 외의 독립적인 프로그램에서는 수동으로 노드를 멈추기 위해 사용합니다.
setInterval를 반복되고 있는 코드를 process.exit()으로 멈춰 보겠습니다.
exit.js
let i = 1;
setInterval(() => {
if (i == 5) {
console.log("종료!");
process.exit();
}
console.log(i);
i += 1;
}, 1000);
1부터 4까지 표시한 뒤, i가 5가 되었을 때 종료하도록 했습니다.
콘솔
$ node exit
1
2
3
4
종료!
process.exit 메서드는 인수로 코드 번호를 줄 수 있습니다. 인수를 주지 않거나 0을 주면 정상 종료를 뜻하고, 1을 주면 비정상 종료를 뜻합니다. 만약 에러가 발생해서 종료하는 경우에는 1을 넣으면 됩니다.
'프로그래밍 언어 > NODE JS' 카테고리의 다른 글
| path (0) | 2025.03.29 |
|---|---|
| OS (0) | 2025.03.26 |
| module, exports, require (0) | 2025.03.20 |
| __filename, __dirname (0) | 2025.03.17 |
| 타이머 (0) | 2025.03.13 |