본문 바로가기
개발/Javascript

자바스크립트 엔진과 자바스크립트 런타임 차이 읽고 정리

by 안뇽! 2024. 8. 15.
반응형

https://ktseo41.github.io/blog/fe-article/javascript-engines-runtimes.html

 

자바스크립트 엔진과 런타임의 차이점은 무엇인가요? | bohyeon.dev

 

ktseo41.github.io

위 글을 읽고 생각정리를 위한 요약

ECMAScript

1997년에 자바스크립트가 어디에 구현되던 무조건 따라야 하는 명세가 발표되었고 이를 ECMA-262라고 한다.

ECMA-262는 ECMAScript 언어 명세서 라는 또다른 이름을 갖게 되었다.

 

ECMAScript는 구현과 상관없이 반드시 준수해야 하는 자바스크립트의 핵심기능을 정의한다.

WebApi에 들어가는 setTimeout은 ECMAScript에 포함되지 않지만 Array, Object, Promise는 ECMAScript에 포함된다.

자바스크립트

ECMAScript에 추가 기능이 더해진 것이다.

브라우저에서 사용하는 자바스크립트는 ECMAScript + WebAPI라고 볼 수 있다.

자바스크립트 엔진

더 정확하게는 ECMAScript 엔진이라 볼 수 있다.

추가 기능(WebAPI)없이 순수 ECMAScript 명세에 작성된 기능들만 포함된다.

 

Node.js와 Chrome에 사용되는 V8엔진도 자바스크립트 엔진이다.

 

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

 

자바스크립트 런타임

자바스크립트 런타임은 자바스크립트 엔진을 내장한 상위 집합이다. Chrome, Node.js는 자바스크립트 엔진(V8엔진)을 내장하고 자바스크립트를 통해 접근할 수 있는 추가 기능을 정의하는 자바스크립트 런타임이다. 예를 들어 Chrome에서는 DOM, WebAPI를 구현하고 Node.js에서는 파일 시스템 접근을 구현한다.

 

자바스크립트 런타임에서 추가할 수 있는 기능에 대한 제한은 없고 런타임 개발자가 직접 결정할 수 있다.

 

예를 들어 이벤트 루프는 ECMA-262에 정의되어 있지 않으므로 어떤 자바스크립트 엔진에서도 구현되어 있지 않다.

각 자바스크립트 런타임이 자체 이벤트 루프를 구현해야 한다. 브라우저에서는 HTML 명세에 정의된 이벤트 루프가 있고, Node.js에는 자체적으로 정의한 이벤트 루프가 있다.

 

결론

자바스크립트 엔진은 ECMAScript 명세에 준수하여 만들어진 엔진이고 자바스크립트 런타임은 자바스크립트 엔진에 그 외 기능(DOM 접근, 파일 시스템 접근 등)들이 추가된 ECMAScript 호스트이다.

반응형