본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (3) - 노드 내장 객체 : process 2

node js logo image

 

 

 

 

○ process.nextTick(callback)

 

process.nextTick(callback) 함수를 사용하면, 이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선으로 처리하도록 만듭니다. 

 

일단은 예제를 통해서 살펴보도록 하겠습니다. 

 

 

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

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

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

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

 

 

위 코드의 결과를 예상해 볼까요? 사실, 기본 예상과는 다르게 nextTick과 resolve된 Promise는 다른 콜백보다 우선시 됩니다. 그래서 nextTick > resolve 된 Promise 순서로 먼저 출력됩니다. 참고로 이 두 개의 콜백을 마이크로태스크(microtask)로 따로 분류합니다. 우리가 학습했던 호출 스택, 백그라운드, 태스크 큐 구조를 기억하시죠? 그 태스크 큐와 별도로 마이크로태스크 큐가 하나 더 존재한다고 생각하면 됩니다. 

 

 

1. Node.js 핵심 개념 이해 (2) - Event Driven, Context [2/2]

앞선 내용에서, 자바스크립트와 노드의 이벤트 관련 원리들에 대해서 기본적인 설명을 진행했습니다. 이번 아티클을 읽기 위한 사전 지식이니 혹시라도 기억이 나지 않는다면 다시 한번 살펴보

nozeroslope.tistory.com

 

 

물론, 이런 구조를 갖고 있기 때문에 굳이 nextTick이나 resolve된 Promise를 사용하는 것이 쉽게 우선순위를 앞서게 만드는 기능일 수 있습니다. 그럼 setImmediate를 사용할 필요는 없는 것일까요? 이런 마이크로태스크를 사용하게 되면, 이벤트 루프는 다른 콜백보다 마이크로태스크를 최우선으로 처리하기 때문에, 단순히 우선순위가 밀리는 것이 아니라 아예 콜백이 실행되지 않는 경우가 발생할 수 있습니다. 이 점을 주의해야 합니다.

 

 


 

 

○ process.exit(code)

 

이 process.exit( )는 노드 프로세스를 종료합니다. 즉, 서버를 중단하는 것이죠. 실제로는 잘 사용하지 않는 코드입니다. 물론 서버 외의 독립적인 프로그램에서는 수동으로 노드를 멈추기 위해서 사용합니다. 

 

let i = 1;

setInterval( () => {
    if (i === 5){
        console.log('FINISH');
        process.exit();
    }
    console.log(i);
    i += 1;
}, 1000);

/* 출력
1
2
3
4
FINISH
*/

 

 

참고로 process.exit 메서드는 인수로 코드 번호를 전달 가능한데, 0이나 인수가 없을 경우는 정상 종료를 의미하고 1을 주면 비정상 종료를 의미합니다. 에러가 발생하는 경우에는 1을 넣으면 되겠죠?