○ 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)로 따로 분류합니다. 우리가 학습했던 호출 스택, 백그라운드, 태스크 큐 구조를 기억하시죠? 그 태스크 큐와 별도로 마이크로태스크 큐가 하나 더 존재한다고 생각하면 됩니다.
물론, 이런 구조를 갖고 있기 때문에 굳이 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을 넣으면 되겠죠?
'Programming > Node.js' 카테고리의 다른 글
4. Node 기능 살펴보기 (4) - 노드 내장 모듈 1 (0) | 2024.04.09 |
---|---|
4. Node 기능 살펴보기 (3) - 노드 내장 객체 : 기타 (0) | 2024.04.04 |
4. Node 기능 살펴보기 (3) - 노드 내장 객체 : process 1 (0) | 2024.04.02 |
4. Node 기능 살펴보기 (3) - 노드 내장 객체 : 타이머2 (0) | 2024.04.01 |
4. Node 기능 살펴보기 (3) - 노드 내장 객체 : 타이머 1 (1) | 2024.03.29 |