이벤트 루프

자바스크립트 런타임 환경에서 비동기 작업을 처리하는 메커니즘

브라우저 환경에서는 브라우저의 자바스크립트 엔진이 이벤트 루프를 담당하며, Node.js 환경에서는 Node.js의 이벤트 루프가 동작한다.

한 번에 한 가지 일만 처리하는 단일 쓰레드 기반 언어인 자바스크립트가 비동기적으로 동작할 수 있도록 도와주는 기술

등장 계기

한 번에 한 가지 일만 처리하는 방식으로는 현재처럼 빠르게 일을 처리해야 하는 대규모 웹 어플리케이션을 만들어낼 수가 없기 때문에, 이벤트 루프라는 개념이 탄생하게 된다.

동작 원리

1. Call Stack (호출 스택)

  • JavaScript 엔진은 코드를 실행할 때 호출 스택을 사용
  • 함수가 호출되면 해당 함수의 정보가 스택에 쌓이고, 함수 실행이 끝나면 스택에서 제거

2. Callback Queue (콜백 큐)

비동기 함수가 완료되면 해당 비동기 작업의 콜백 함수나 이벤트 핸들러가 콜백 큐에 등록됨

3. Event Loop

이벤트 루프는 호출 스택이 비어있을 때(모든 동기적 코드가 실행되고 남은 비동기 코드가 없을 때) 콜백 큐에 있는 작업들을 호출 스택으로 이동시키고 순차적으로 실행한다.

역할

1. 비동기 작업 처리

이벤트 루프는 비동기 함수의 콜백 함수나 이벤트 핸들러를 순차적으로 실행하여 비동기 작업을 처리한다.

2. 콜백 지연 방지

호출 스택이 비어있을 때만 콜백 함수를 실행하기 때문에, 자바스크립트 엔진이 계속해서 콜백 함수를 처리하는 데에 의한 지연을 방지한다.

3. 단일 쓰레드로 비동기 처리

JavaScript는 단일 쓰레드로 동작하므로, 이벤트 루프를 통해 비동기 작업을 효율적으로 처리할 수 있다.


이벤트 루프는 자바스크립트의 비동기 프로그래밍 모델을 이해하는데 중요한 개념이며, 콜백 함수, Promise, async/await 등의 비동기 처리 메커니즘과 함께 사용되어 자바스크립트의 비동기 코드를 관리하고 실행하는 역할을 수행한다.