JavaScript 엔진

자바스크립트 코드를 실행하는 프로그램 또는 인터프리터

js-engine-structure.png

<aside> 💡 인터프리터란(Interpreter)? 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다.

  1. 소스 코드를 직접 실행한다.
  2. 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다.
  3. 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일된 저장 코드의 실행을 호출한다.

</aside>

<aside> 💡 자바스크립트 엔진의 대표적인 예 Google Chrome - V8 / Apple Safari - Webkit / Mozilla Firefox - SpiderMonkey

</aside>

JavaScript 동작 원리

자바스크립트는 싱글 스레드 기반으로 하나의 콜 스택(Call Stack)과 하나의 메인 스레드를 가진다. 싱글 스레드는 한 번에 하나의 일(명령)만 처리할 수 있다는 의미이며, 그렇기 때문에 자바스크립트는 동기식(Synchronous) 언어라고 할 수 있다.

JavaScript 런타임

자바스크립트는 엔진에 하나의 메모리 힙과 하나의 콜 스택이 존재하는 싱글 스레드 기반의 동기식(Synchronous) 언어이므로, 다른 작업을 실행하려면 현재 작업이 끝나기를 기다려야 하는 문제점이 발생한다.

이것을 해결하기 위해 오래 걸리는 일을 백그라운드에서 처리하고, 간단하게 처리할 수 있는 작업만 콜 스택에서 수행하는 것을 런타임(Runtime)이라고 한다.

js-engine-runtime.png

호출 스택 (Call Stack)

자바스크립트 안에서 실행되는 모든 함수의 호출을 기록하고 추적하는 역할.