노드

노드 process

포칼이 2023. 4. 11. 16:37

현재 실행중인 노드 프로세스에 대한 정보를 담고 있다. 

컴퓨터마다 출력 값이 다를 수 있다. 

  • process.version : 설치된 노드의 버전 출력
  • process.arch : 프로세서 아키텍처 정보 출력
  • process.platform : 운영체제 플랫폼 정보 출력
  • process.pid : 현재 프로세스의 아이디 출력
  • process.uptime() : 프로세스가 시작된 후 흐른 시간 출력. 단위는 초이다. 
  • process.execPath : 노드의 경로 출력
  • process.cwd() : 현재 프로세스가 실행되는 위치 출력
  • process.cpuUsage() : 현재 cpu 사용량 출력

process.env

시스템 환경 변수들이 들어있는 객체이다. 

  • 비밀키(데이터베이스 비밀번호, 서드파티 앱 키 등)를 보관하는 용도로도 쓰인다.
  • 환경 변수는 process.env로 접근이 가능하다. 
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;

이렇게 사용하면 코드에는 process.env.~ 라고만 적혀있지 실제 비밀키 같은 것들이 노출이 되지 않는다. 

 

일부 환경 변수는 노드 실행 시 영향을 미친다. 

//NODE_OPTIONS(노드 실행 옵션), UV_THREADPOOL_SIZE(스레드풀 개수)

NODE_OPTIONS =--max-old-space-size=8192
UV_THREADPOOL_SIZE=8

max-old-space-size는 노드가 사용할 수 있는 메모리를 지정하는 옵션이다. 

말그대로 환경 변수를 조작해서 노드의 실행 환경을 핸들링 할 수 있다. 

process.nextTick(콜백)

이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선적으로 처리한다.

너무 남용하면 다른 콜백 함수들 실행이 늦어진다.

비슷한 경우로 promise가 있다. (nextTick처럼 우선순위가 높다)

아래 예제에서 setImmediate, setTimeout보다 promise와 nextTick이 먼저 실행된다. 

//nextTick.js
setImmediate(() => {
  console.log('immediate');
});

process.nextTick(() => {
  console.log('nextTick');
});

setTimeout(() => {
  console.log('timeout');
}, 0);

Promise.resolve().then(() => console.log('promise'));

어느 함수가 이벤트 루프에 의해서 먼저 실행되는지 알 수 있다.

*setTimeout 에 0을 주는 거랑 setImmediate를 실행하는 것은 혼동이 올 수 있으니 setImmediate만 쓰자

 

process.exit(코드)

현재의 프로세스를 멈춘다.

코드가 없거나 0이면 정상 종료 한다.

이외의 코드는 비정상 종료를 의미한다. 

//exit.js
let i = 1;
setInterval(() => {
  if (i === 5) {
    console.log('종료!');
    process.exit();
  }
  console.log(i);
  i += 1;
}, 1000);