런타임과 엔진은 종종 혼동되어 쓰이는 경우가 많다!
"자바스크립트 엔진" = "자바스크립트를 실행하는 프로그램" = "자바스크립트 런타임" (?!)
하지만, 자바스크립트 엔진과 자바스크립트 런타임은 범위와 기능에 상당한 차이가 있다고 한다.
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를 구현한다.
- 호스트에 내장되도록 설계되었으며, 호스트는 입력과 출력을 위한 추가 기능을 정의한다.
대표적인 자바스크립트 엔진들
- V8: Chromium 프로젝트용 자바스크립트 엔진으로 Node.js와 Deno에서도 사용된다. 가장 자주 사용되는 자바스크립트 엔진
- SpiderMonkey: Firefox의 자바스크립트 엔진
- 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 |
---|