process

기초/Node.js|2021. 9. 13. 21:54

노드는 파일 시스템에 접근할 수 있는 것처럼 운영 체제 정보에도 접근할 수 있다.

콘솔창에서 node를 켜고 명령창에 process 를 입력하면 프로세스에 대한 각종 정보를 불러올 수 있다.

__ : double under = dunderscore

$ node
> process.version
v14.0.0 //설치된 노드의 버전
> process.arch
x64 //processor architecture 정보. arm, ia32등일 수도 있음
> process.platform
win32 //운영체제 플랫폼의 정보. linux, darwin(맥), freebsd 등일 수도 있음
> process.pid
14736 //현재 프로세스의 아이디. 프로세스를 여러 개 가질 때 구분할 수 있음(프로세스 강제종료시 활용)
> process.uptime()
199.36 //프로세스가 시작된 후 흐른 시간. (단위는 초)
> process.execPath
C:\\Program Files\\nodejs\\node.exe //노드의 경로
> process.cwd()
C:\\Users\\kimdoodoo //현재 프로세스가 실행되는 위치
> process.cpuUsage()
{ user: 30000, system: 153000 } //현재 cpu 사용량

 

process.env

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

비밀키(데이터베이스 비밀번호, 서드파티 앱 키 등)를 보관한다.

process.env로 시스템 환경변수에 접근이 가능하다.

const secretId = process.env.SECRET_ID;
//소스코드가 해킹당했을 때 실제 비밀번호까지 노출될 위험을 낮춘다.
const secretCode = process.env.SECRET_CODE;

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

→ 노드가 처음에 실행될 때는 메모리를 조금만 사용하는데, 자바스크립트 코드를 실행하다가 서버가 터질 수도 있다.

이럴 때 메모리를 늘리는 코드도 있고, 백그라운드에서 동시에 실행될 수 있는 용량(스레드풀)을 늘릴 수도 있다.

NODE_OPTIONS = --max-old-space-size=8192 //노드 실행 옵션
UV_THREADPOOL_SIZE = 8 //스레드풀 개수

 

process.nextTick

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

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

setImmediate(() => {
	console.log('immediate');
});
process.nextTick(() => {
	console.log('nextTick');
});
setTimeout(() => {
	console.log('timeout');
},0);
Promise.resolve().then(() => console.log('promise'));

//결과
//nextTick
//promise
//timeout
//immediate

환경에 따라 setTimeout(()=>{},0) 보다 setImmediate(()=>{})이 늦게 작동하는 경우가 존재한다.

→ 웬만하면 setTimeout 0초는 사용하지 말자.

 

process.exit

process.exit(0) → 0이거나 없으면.. 서버를 정상적으로 종료. (에러 없음)

process.exit(1) → 에러가 있다고 알리면서 서버를 종료.

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

참조 : 제로초(zerocho)님 인프런 강의

'기초 > Node.js' 카테고리의 다른 글

os와 path  (0) 2021.09.21
Node 내장 객체 (2) - filename, exports, this  (0) 2021.09.12
Node 내장 객체 (1) - global, console, timer  (0) 2021.09.12

댓글()