JavaScript는 싱글스레드 언어입니다. 즉 한번에 한가지 일만 처리할 수 있는데요, 동기식 요청은 코드를 한줄 씩 차례대로 실행을 합니다. 그래서 작업에 걸리는 시간에 관계 없이 첫 코드가 실행 되고 그 다음 코드가 실행이 됩니다.
하지만 이런식으로 작업이 처리된다면 시간과 자원의 낭비가 심해지게됩니다.
그래서 JavaScript는 하나의 요청이 처리될 때 까지 기다리지 않고 동시에 다른 작업을 실행하는 비동기 방식으로 극복을 합니다.
우선 JavaScript는 함수를 호출하게 되면 Call Stack이라는 곳에 차곡차곡 쌓이게 됩니다.
그러다가 setTimeout이나 AJAX 또는 DOM event가 발생하면 Web API로 보내고 정해진 시간이 지나거나 이벤트가 발생한 순간에 순차적으로 Callback Queue에 적재됩니다.
이렇게 Callback Queue에 쌓인 함수들은 Call Stack에 쌓인 함수들이 모두 제거되면 차례대로 스택에 들어와 실행하게 됩니다.
용어 | 기능 |
---|---|
Call Stack | JavaScript에서 수행해야 할 함수들을 순차적으로 스택에 담아 처리 |
Callback Queue | Web API에서 넘겨받은 함수를 저장 |
Web API | 브라우저에서 제공하는 API로 setTimeout이나 AJAX, DOM event등을 실행 |