December 22, 2021
브라우저 측 자바스크립트 실행 흐름은 Node.js와 마찬가지로 이벤트 루프에 기반합니다.
따라서 이벤트 루프가 어떻게 동작하는지 잘 이해하고 있어야 최적화나 올바른 아키텍처 설계가 가능해집니다.
이번 챕터에선 이벤트 루프가 어떻게 동작하는지에 대한 이론과 함께, 이를 어떻게 실무에 적용할 수 있는지에 대해서 알아보겠습니다.
이벤트 루프(event loop) 정의는 아주 간단합니다. 이벤트 루프는 태스크가 들어오길 기다렸다가 태스크가 들어오면 이를 처리하고, 처리할 태스크가 없는 경우엔 잠드는, 끊임없이 돌아가는 자바스크립트 내 루프입니다(task는 '작업’이라고 번역할 수 있는데, 매크로·마이크로태스크 등의 용어와 일치시키기 위해 '태스크’라고 음차 번역하였습니다 – 옮긴이).
자바스크립트 엔진이 돌아가는 알고리즘을 일반화하면 다음과 같습니다.
그렇다면 자바스크립트 엔진을 활성화하는 태스크엔 과연 어떤 것들이 있을까요? 대표적인 태스크는 다음과 같습니다.
<script src="...">
가 로드될 때, 이 스크립트를 실행하는 것mousemove
이벤트와 이벤트 핸들러를 실행하는 것setTimeout
에서 설정한 시간이 다 된 경우, 콜백 함수를 실행하는 것이벤트 루프 알고리즘을 요약하면 다음과 같습니다(자세한 사항은 명세서에서 확인할 수 있습니다).