Node.js 를 배워보자/1. Node.js 소개

이벤트 루프

_Blue_Sky_ 2024. 9. 30. 10:06
728x90
728x90

Node.js 이벤트 루프 상세 설명

Node.js의 핵심 개념 중 하나인 이벤트 루프는 Node.js가 비동기 방식으로 작동하는 원리를 이해하는 데 필수적입니다.

이벤트 루프란?

이벤트 루프는 단순히 무한 루프를 돌면서 콜백 큐에 있는 콜백 함수들을 순차적으로 실행하는 메커니즘입니다. 이벤트 루프는 V8 엔진libuv라는 C++ 라이브러리의 협업을 통해 작동합니다.

  • V8 엔진: 자바스크립트 코드를 실행하고 콜백 함수를 콜백 큐에 추가합니다.
  • libuv: 비동기 I/O 작업을 처리하고 결과를 이벤트 루프에 알립니다.
728x90

이벤트 루프의 동작 과정

  1. 자바스크립트 코드 실행: Node.js는 자바스크립트 코드를 실행하며, 비동기 작업 (예: 파일 읽기, 네트워크 요청)을 만나면 해당 작업을 libuv에 위임하고 콜백 함수를 콜백 큐에 추가합니다.
  2. 콜백 큐 확인: 이벤트 루프는 주기적으로 콜백 큐를 확인하고, 큐에 있는 콜백 함수가 있다면 스택에 넣어 실행합니다.
  3. 콜백 함수 실행: 스택에 들어간 콜백 함수가 실행되면서 비동기 작업의 결과를 처리합니다.
  4. 다음 콜백 함수 실행: 현재 실행 중인 콜백 함수가 완료되면 다음 콜백 함수를 스택에 넣어 실행합니다.

이벤트 루프의 구성 요소

  • 콜백 큐: 비동기 작업이 완료될 때 실행될 콜백 함수들이 대기하는 곳입니다.
  • 마이크로태스크 큐: Promise.resolve().then() 등의 마이크로태스크가 대기하는 곳입니다.
  • 리퍼 큐: 메모리 누수를 방지하기 위한 객체 회수 작업이 수행되는 곳입니다.
  • 타이머 큐: setTimeout, setInterval 등의 타이머 함수에 의해 설정된 콜백 함수들이 대기하는 곳입니다.
  • I/O 폴: 비동기 I/O 작업이 완료되었을 때 콜백 함수를 콜백 큐에 추가하는 역할을 합니다.

이벤트 루프의 중요성

  • 비동기 처리: Node.js가 비동기 방식으로 작동할 수 있도록 합니다.
  • 단일 스레드 모델: 하나의 스레드로 많은 요청을 처리할 수 있도록 합니다.
  • 높은 성능: 블록킹 없이 작업을 처리하여 높은 성능을 제공합니다.
  • 논블로킹 I/O: 비동기 I/O를 통해 다른 작업을 수행하는 동안 I/O 작업이 블록되지 않습니다.

결론

Node.js의 이벤트 루프는 Node.js가 어떻게 비동기 방식으로 작동하는지 이해하는 데 핵심적인 개념입니다. 이벤트 루프를 이해하면 Node.js 애플리케이션을 개발할 때 비동기 처리, 콜백 함수, 이벤트 드리븐 프로그래밍 등을 효과적으로 활용할 수 있습니다.

 

728x90
728x90