자바스크립트의 런타임
신현호
목차
자바스크립트의 특징
#자바스크립트를 설명할 때 가장 주요한 키워드를 두 가지 꼽아보자면.
- 싱글 스레드 언어
- 논 블로킹 언어
가 되겠습니다. 그렇다면 이 두 가지 키워드가 무엇을 말하는지 아래에 설명을 해 보도록 하겠습니다.
싱글 스레드
#자바스크립트는 하나의 힙 영역과 하나의 콜 스택을 가지는 언어입니다. 이러한 특징을 '싱글 스레드' 라고 합니다.
하나의 힙 영역과 하나의 콜 스택을 가진다는 말은, 한번에 한 가지 일을 할 수 있음을 뜻합니다.
- 힙은 변수와 객체의 메모리 할당에 사용되는 비정형 메모리입니다.
논 블로킹
#싱글 스레드에서는 스택이 하나뿐이기 때문에 한 가지 일만 할 수 있습니다. 따라서 요청에 대한 응답이 오기 전까지는 다른 일을 수행할 수 없습니다.
자바스크립트에서는 이러한 문제를 해결하기 위해 비동기 적으로 작업을 수행함으로서 해당 작업이 수행되는 동안 아무것도 하지 못하는 문제를 해결했습니다.
이러한 특성을 '논 블로킹' 이라고 합니다.
자바스크립트 런타임이란
#위에서 자바스크립트를 싱글 스레드 언어라고 이야기했고, 그렇기에 한번에 한 가지 일만 수행할 수 있다고 했습니다.
비동기 작업을 통해서 블로킹 문제를 해결했다고 해도 어떻게 멀티스레드처럼 동작하는지 이해하긴 쉽지 않습니다. 이를 이해하기 위해선 자바스크립트 런티임 환경에 대한 이해가 필요합니다.
런타임과 런타임 환경
#런타임이란 '어떤 프로그램이 실행되고 있는 동안의 동작'을 뜻한다.
그렇다면, 런타임 환경은 무엇을 말할까요?
런타임 환경이란 어플리케이션이 운영체에의 시스템 자원에 액세스할 수 있도록 해주는 실행 환경이라고 할 수 있습니다.
어렵지만 간단하게 말하자면 프로그래밍 언어가 구동되는 환경이라고 이해하면 되겠습니다.
그럼 한발 더 나아가서 자바스크립트 런타임 이라고 한다면, 우리가 사용하는 Chrome 브라우저나 Node.js 환경을 뜻합니다.
자바스크립트 런타임의 구성
#그림을 통해 자바스크립트 런타임이 어떻게 구성되었는지 확인할 수 있습니다. 사진을 통해 알 수 있는점을 간략하게 적어보면,
- 힙 스택과 콜 스택은 싱글 스레드이기때문에 1개씩만 존재합니다.
- Web API, Event Loop, Callback Queue가 존재한다.
위에는 이미 알고있는 사실이니 아래에 있는 항목들에 대해서 알아봅시다.
Web API
#Web API는 자바스크립트가 실행되는 런타임 환경에 존재하는 별도의 API입니다. 그렇기에 자바스크립트 엔진 (대표적으로 구글 크롬의 V8)에는 Web API의 소스코드는 존재하지 않습니다.
그림에서는 간단하게 DOM, AJAX, Timeout 정도만 적혀있지만 사실 더 많이 존재합니다. 확인하고 싶으신 분들은 하단의 링크를 참조하시면 되겠습니다 :)
Event Loop
#Event Loop는 콜 스택과 콜백 큐를 관찰하여 콜 스택이 비어있으면 콜백 큐에 존재하는 콜백을 콜 스택에 쌓습니다.
Task Queue
#Task Queue는 Web API의 결과를 담아두는 큐 입니다. Callback Queue라고도 합니다. Event Loop는 반드시 하나 이상의 Task Queue(Callback Queue)를 갖습니다.
Task Queue는 Task의 Set입니다. 위의 그림을 보시면 Task의 Set으로 이루어져있다는 것을 쉽게 이해할 수 있습니다!
Event Loop는 Task Queue에 있는 첫 번째 Task를 가져오는 것이 아닌, 실행 가능한 첫 번째 Task를 가져오는 것 입니다.
동작
#참고
#신현호
Frontend Developer
프론트엔드 개발자를 꿈꾸고 있는 대학생입니다. 끊임없이 배우고 성장하는 개발자가 되기 위해 노력하고 있습니다.