자바스크립트 이벤트 루프의 동작 과정을 순서대로 설명해주세요.

JavaScript는 단일 스레드 기반의 프로그래밍 언어이기 때문에, 동시에 여러 작업을 수행하는 것이 아닌 하나의 작업만을 처리할 수 있습니다. 이 때, JavaScript는 이벤트 루프(Event Loop)라는 메커니즘을 사용하여 비동기적인 작업을 처리합니다. 이벤트 루프는 다음과 같은 순서로 동작합니다:

  1. Call Stack (호출 스택): JavaScript 코드는 실행될 때 함수 호출을 스택에 쌓아나갑니다. 호출 스택은 함수가 실행되는 동안 값을 저장하고 관리하는 역할을 수행합니다.

  2. Task Queue (태스크 큐): 비동기적인 작업들은 태스크 큐에 콜백 함수 형태로 저장됩니다. 이 콜백 함수들은 실행을 기다리며, 호출 스택이 비어있을 때 실행될 수 있습니다.

  3. Event Loop (이벤트 루프): 이벤트 루프는 호출 스택과 태스크 큐를 감시하며, 호출 스택이 비어있을 때 태스크 큐에 있는 콜백 함수를 호출 스택으로 이동시킵니다.

  4. Microtask Queue (마이크로태스크 큐): 비동기 작업 중에 프로미스(Promise)의 then() 메서드나 async/await 구문과 같은 Microtask들은 마이크로태스크 큐에 저장됩니다. 마이크로태스크 큐의 작업은 태스크 큐에 있는 콜백 함수보다도 우선순위가 높아서, 호출 스택이 비었을 때 가장 먼저 실행됩니다.

이벤트 루프의 주요 역할은 호출 스택이 비어있는지, 태스크 큐와 마이크로태스크 큐에 작업이 있는지를 반복적으로 확인하고, 작업이 있을 경우 호출 스택으로 이동시켜 실행하는 것입니다. 이와 같은 방식으로 JavaScript는 비동기 작업을 효율적으로 처리할 수 있게됩니다.

#JavaScript #이벤트루프