Node.js 인터뷰 질문 4

질문: Node.js의 이벤트 루프란 무엇인가요?

답변:

이벤트 루프는 Node.js의 핵심 메커니즘으로, 비동기 I/O 작업을 효율적으로 처리하고 단일 스레드 환경에서 논 블로킹 작업을 가능하게 합니다.

이벤트 루프의 작동 방식

  1. 단계(Phases): 이벤트 루프는 여러 단계로 구성되어 있으며, 각 단계는 특정 작업을 처리합니다:

    • 타이머(Timers): setTimeout(), setInterval() 콜백 실행
    • 보류 중인 콜백(Pending Callbacks): 이전 반복에서 지연된 I/O 콜백 실행
    • 유휴/준비(Idle, Prepare): 내부용
    • 폴링(Poll): 새로운 I/O 이벤트 검색 및 실행
    • 확인(Check): setImmediate() 콜백 실행
    • 종료 콜백(Close Callbacks): socket.on('close', ...) 같은 종료 이벤트 콜백 실행
  2. 큐(Queues): 각 단계는 실행할 콜백 함수들의 FIFO(First In, First Out) 큐를 가지고 있습니다.

  3. 반복(Tick): 이벤트 루프의 한 번의 완전한 실행을 '틱(tick)'이라고 합니다.

작동 원리 예시

console.log("시작");

setTimeout(() => {
  console.log("타이머 1 완료");
}, 0);

setImmediate(() => {
  console.log("즉시 실행");
});

Promise.resolve().then(() => {
  console.log("프로미스 완료");
});

process.nextTick(() => {
  console.log("nextTick 완료");
});

console.log("종료");

출력 결과:

시작
종료
nextTick 완료
프로미스 완료
타이머 1 완료
즉시 실행

이벤트 루프의 중요 개념

  • microtasks: process.nextTick()과 프로미스 콜백은 각 단계 사이에 처리되는 '마이크로태스크'입니다.
  • libuv: Node.js의 이벤트 루프는 C 라이브러리인 libuv에 의해 구현됩니다.
  • 논 블로킹: 이벤트 루프 덕분에 I/O 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있습니다.

이벤트 루프를 이해하면 Node.js 애플리케이션의 비동기 동작을 보다 효과적으로 관리하고, 최적화할 수 있습니다.

results matching ""

    No results matching ""