Skip to content

process.nextTick() 이해하기

Node.js 이벤트 루프를 이해하려고 할 때, 중요한 부분 중 하나는 process.nextTick()입니다. 이벤트 루프가 전체 주기를 한 번 돌 때마다, 이를 틱이라고 부릅니다.

함수를 process.nextTick()에 전달하면, 현재 작업이 끝나고 다음 이벤트 루프 틱이 시작되기 전에 이 함수를 호출하도록 엔진에 지시합니다.

js
process.nextTick(() => {
  // 무언가를 합니다
})

이벤트 루프는 현재 함수 코드를 처리하느라 바쁩니다. 이 작업이 끝나면 JS 엔진은 해당 작업 동안 nextTick 호출에 전달된 모든 함수를 실행합니다.

이는 JS 엔진에게 함수를 비동기적으로 (현재 함수 이후에) 처리하되, 최대한 빨리 처리하도록 지시하는 방법입니다. 큐에 넣지 않습니다.

setTimeout(() => {}, 0)을 호출하면 다음 틱이 끝날 때 함수가 실행되는데, 이는 nextTick()을 사용하여 호출을 우선순위화하고 다음 틱 시작 직전에 실행하는 것보다 훨씬 늦습니다.

다음 이벤트 루프 반복에서 코드가 이미 실행되었는지 확인하고 싶을 때 nextTick()을 사용하십시오.

이벤트 순서 예시:

js
console.log('Hello => number 1')
setImmediate(() => {
  console.log('타임아웃 전에 실행됨 => number 3')
})
setTimeout(() => {
  console.log('타임아웃이 마지막에 실행됨 => number 4')
}, 0)
process.nextTick(() => {
  console.log('다음 틱에서 실행됨 => number 2')
})

예시 출력:

bash
Hello => number 1
다음 틱에서 실행됨 => number 2
타임아웃 전에 실행됨 => number 3
타임아웃이 마지막에 실행됨 => number 4

정확한 출력은 실행할 때마다 다를 수 있습니다.