Frontend

[아티클] 자바스크립트 엔진과 런타임의 차이점은 무엇인가요?

뽀또들 2024. 8. 12. 14:59

런타임과 엔진은 종종 혼동되어 쓰이는 경우가 많다!

"자바스크립트 엔진" = "자바스크립트를 실행하는 프로그램" = "자바스크립트 런타임" (?!)

 

하지만, 자바스크립트 엔진과 자바스크립트 런타임은 범위와 기능에 상당한 차이가 있다고 한다.

 


ECMAScript란?

~~`ECMAScript`의 역사~~

  • 자바스크립트를 표준화하기 위한 명세: ECMA-262
  • 해당 명세의 제목에 "자바스크립트"가 아닌 다른 이름을 붙여야 했음
  • 그래서 ECMA-262는 ECMAScript 언어 명세서라는 제목이 붙음!

ECMAScript는 구현이 어디에 내장되어 있든 반드시 준수해야 하는 자바스크립트의 핵심 기능을 정의한다.

→ 구현을 내장한 프로그램을 호스트라고 한다.

 

ECMAScript에는 웹 관련 기능, 데이터를 입/출력하는 방법 등이 포함되지 않는다. 이러한 기능은 호스트에서 제공해야 한다.

 


자바스크립트란?

"자바스크립트"라는 용어는 공식적인 정의는 없다! 하지만, 통상적으로 ECMAScript 언어의 상위 집합으로 이해되고 있다.

자바스크립트 = ECMAScript + 다른 명세 및 기타 기능

 

초기 형태의 자바스크립트: ECMAScript + 웹 기반 API(ex. DOM) + 브라우저 기반 API(ex. 히스토리 API)

오늘날 자바스크립트: ECMAScript + 기타 호스트 제공 API(ex. 브라우저를 위한 웹 전용 API, Node.js와 같은 호스트를 위한 서버 전용 API)의 모든 조합

 


자바스크립트 엔진이란?

일반적으로 자바스크립트 엔진이라고 불리는 것들은 ECMAScript 엔진이라고 할 수 있다.

  • 자바스크립트 엔진은 추가 기능 없이(or 거의 없이) ECMA-262를 구현한다.
  • 호스트에 내장되도록 설계되었으며, 호스트는 입력과 출력을 위한 추가 기능을 정의한다.

대표적인 자바스크립트 엔진들

  1. V8: Chromium 프로젝트용 자바스크립트 엔진으로 Node.js와 Deno에서도 사용된다. 가장 자주 사용되는 자바스크립트 엔진
  2. SpiderMonkey: Firefox의 자바스크립트 엔진
  3. JavaScriptCore: MacOS와 iOS의 Safari를 위해 만들어진 자바스크립트 엔진, Bun에서도 사용된다.

자바스크립트 엔진은 ECMAScript만 구현하고 호스트에 의해 확장되도록 되어 있기 때문에 다양한 런타임 환경에서 사용할 수 있다.


자바스크립트 런타임이란?

자바스크립트 런타임 = ECMAScript의 호스트

자바스크립트 엔진을 내장하고 자바스크립트를 통해 접근할 수 있는 추가 기능을 정의하는 프로그램 (ex. Chrome, Firefox, Node.js...)

 

웹 브라우저는 DOM 및 기타 웹 API를 구현하는 반면 서버 측 런타임은 파일 시스템 접근을 구현한다.

 

  • 자바스크립트 런타임에 추가할 수 있는 기능에 대한 규칙은 없으며, 런타임 개발자가 직접 결정할 수 있다.
  • 자바스크립트 엔진을 사용하는 방식도 중요하다!
    • 이벤트 루프(런타임이 자바스크립트 일행과 다른 작업 수행 사이를 전환할 수 있게 하는 프로세스)는 ECMA-262에 정의되어 있지 않으므로 자바스크립트 엔진에서도 구현되어 있지 않다!
    • 각 자바스크립트 런타임이 자체 이벤트 루프를 구현해야 한다.

 

요약

자바스크립트 엔진은 ECMA-262 표준에 정의된 대로 ECMAScript를 구현한다.

ECMA-262는 자바스크립트의 핵심 기능을 정의한다.

자바스크립트 런타임은 자바스크립트 엔진을 내장하고 런타임에 필요한 다른 모든 기능을 보강하는 ECMAScript 호스트이다.


아티클 주소

'Frontend' 카테고리의 다른 글

[WEB] RESTful API란?  (0) 2024.08.16