비동기 통신을 위한 환경, JS Engine 브라우저가 JS를 해석하여 사용하거나 애플리케이션 서버에서 Node.js를 통해 사용할 때 Asynchronous request 처리는 JS 자체가 아닌 JS를 실행하는 환경에서 담당한다. <JS Engine> - Call stack - Microtask queue <Environment support> - Event Loop - Web API - Macrotask queue 즉, JS Engine이 가진 공간인 Heap, Callstack만으로는 비동기 요청을 해결하지 않는다. 예를 들어, 구글 크롬의 V8 JS Engine에서는 함수가 호출될 때, 하나의 Call stack에 순차적으로 보관하고 Last In First Out 순서로 처리하는데 return 될 때, 스택으로부터 pop up할 뿐이다. 스택에 쌓여있는 함수가 실행되는 동안에는 다른 작업이 이를 방해할 수 없는데, 예를 들어, Bottom | a | b | c | Top 1. C->B 순서로 함수 처리가 완료되었다. 2. A를 실행하려는 찰나, D라는 함수가 호출되어 Call stack에 쌓인다. Bottom | a | d | Top 3. D->A 순으로 실행한다. 위 예시에서, D가 실행되는 와중, A의 코드를 실행하다가 다시 D의 Context로 돌아와서 마저 실행하는 작업을 JS 환경에서는 하지 않는다. 즉, 한 함수가 끝날 때까지 다른 작업의 방해를 받지 않는다. 그리고 작업 종류와 스케줄링 방식에 따라 이는 병목이 될 수도 있다. JS Engine은 스케줄링을 위해 다음 환경 2개를 필요로 한다. 비동기 통신을 위한 환경, 이벤트 루프(MacroTask, MicroTask) ...