프로그래밍-학습기록/Javascript

Javascript를 배우기에 알면 좋을 배경 지식들 1 (ECMAScript, 자바스크립트 엔진, 런타임)

leesche 2021. 3. 26. 17:35

이 글은 이 링크의 글을 기반으로, 저에게 필요한 내용을 군데군데 보충하여 작성되었습니다.

ECMAScriptJavascript랑 무슨 관계예요?

  • ECMA International에 의해 제정된 표준들 중 하나인, ECMA-262ECMAScript를 정의합니다.
  • ECMA International은 정보 통신에 대한 표준을 제정하는 비영리 표준화 기구입니다. ECMA-262는 ECMA International이 제정한 수많은 표준들 중 하나입니다.
  • 따라서, ECMAScript는 ECMA International에 의해 제정된 ECMA-262 기술 규격에 의해 정의된 범용 스크립트 언어의 사양(specification)를 뜻합니다.

스크립트 언어는 무엇인가요?

  • 존재하는 시스템 또는 실체(entity) 위에서 동작(acting)을 위해 특별히 디자인된 프로그래밍 언어입니다.

그럼 Javascript는 뭐에요?

  • Javascript는 "ECMAScript 사양을 따르는 범용 목적 스크립트 언어"입니다.

ECMAScript 사양을 읽음으로써 우리는 어떻게 스크립트 언어를 만드는지 배울 수 있다.
Javascript 문서를 읽음으로써 우리는 어떻게 스크립트 언어를 사용하는지 배울 수 있습니다.

  • 자바스크립트는 ECMA-262에서 묘사된 ECMAScript 명세를 대부분 구현했지만 여전히 차이가 존재합니다. 이 링크에서 그 차이를 알 수 있습니다.

정식 표준이 되기까지 험난한 과정 TC39 proposal process

새로운 ECMAScript 명세가 될 때까지 특정 사항은 다음과 같은 5단계를 거칩니다.

  • Stage 0 - Strawman (허수아비)
  • Stage 1 - Proposal (제안)
  • Stage 2 - Draft (초안)
  • Stage 3 - Candidate (후보)
  • Stage 4 - Finished (완료)

그렇다면 우리는 최신 버전을 아무데서나 사용할 수 있나요?

  • 글쎄요. 모릅니다. 자바스크립트 엔진이 각각 ECMAScript를 지원하고 있는 정도가 다르기 때문입니다.

각 자바스크립트 엔진이 버전별로 ECMAScript 명세를 구현하고 있는 정도

Javascript 엔진이라고요...? 엔진...?!

  • 엔진은 자바스크립트 코드를 이해하고 실행하는 프로그램 또는 인터프리터(interpreter)입니다.
  • 자바스크립트 엔진들은 보통 크롬의 V8, Firefox의 SpiderMonkey, Edge의 Chakra 같은 웹 브라우저에서 찾아볼 수 있습니다.
  • 이러한 호환성 문제를 해결하기 위해 Babel이 등장했습니다. 바벨은 최신 사양으로 작성된 코드를 함수적으로 동일한 하위 버전의 코드로 바꿔(transfile)줍니다.
  • Babel은 Node.js의 패키지 중 하나입니다.

엥, Node.js는 뭐에요?

구글 크롬의 자바스크립트 엔진인 V8으로 빌드된 자바스크립트 런타임입니다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었습니다. 일부 CommonJS 명세를 구현하고 있고, 쌍방향 테스트를 위해 REPL 환경을 포함하고 있습니다.

네? 자바스크립트 런타임은 뭐죠?

자바스크립트 코드가 자바스크립트 엔진에 의해 해석되고 실행되는 '환경'. 런타임은 자바스크립트에 기능할 수 있는 호스트 객체(host objects)를 제공합니다.

  • 자바스크립트 런타임은 스크립트 언어의 정의에서 언급됐던 '존재하는 시스템 또는 실체(entity)'입니다. 코드는 자바스크립트 엔진을 통과하며, 처음 파싱되고 해석된 뒤에, '시스템 또는 실체'가 해석된 행동(actions)를 수행합니다. 개가 짖고, 사람이 뛰고, 캐릭터가 점프하는 등 ...
  • 어플리케이션들은 런타임에 "호스트 객체'를 제공하여 자바스크립트 스크립팅을 할 수 있도록 합니다.
  • 클라이언트(사용자) 측에서는, 자바스크립트 런타임이 웹 브라우저가 될 수 있습니다. 이때 웹 브라우저에서 호스트 객체는 windows나 HTML documents 같은 (자바스크립트에게) 조작을 가능하게 하는 것들입니다.
  • 서버 측에서는, 자바스크립트 런타임은 Node.js가 됩니다. 파일 시스템이나 프로세스들, 요청(request)들과 같은 서버와 관련된 호스트 객체가 Node.js에서 제공됩니다.
  • 흥미로운 점으로, 다른 자바스크립트 런타임들은 같은 자바스크립트 엔진을 공유할 수 있습니다. V8이 그 예입니다. V8는 크롬과 Node.js에서 모두 사용되는 엔진입니다. 크롬과 Node.js는 꽤 다른 환경임에도 말이죠.

까먹을 뻔 했습니다. Node.js는 CommonJS 명세를 구현하고 있다고 했는데, 무엇인가요 또 REPL 환경은 무엇인가요?

죄송합니다. 그건 다음 포스팅에 알아보도록 합시다.

출처 및 참고