JavaScript & Node.js

[자바스크립트 & ECMA-262의 역사]

Haksae 2022. 1. 23. 21:54

1.  Netscape의 JavaScript

1995년 넷스케이프(Netscape)는 동적인 웹 페이지를 만들기 위해서 브라우저에서 동작하는 가벼운 프로그래밍 언어를 만들기로 했다. 이에 넷스케이프의 브랜든 아이크(Brendan Eich)가 스크립트 언어를 만들기 시작해, 고작 10일만에 개발되었다.

해당 언어는 이듬해 3월, 넷스케이프 네비게이터 2에 등장했고, 당시에는 이 언어의 첫 버전을 Mocah라고 불렀다. 이 언어는 후에 LiveScript로 바뀌었다가, 마침내  같은해 12월 현재의 JavaScript가 되었다.

(JavaScript라는 이름은, 당시 Java의 유명세를 이용해 마케팅 차원에서 의도적으로 지은 것이다.)

 

2. ECMA의 자바스크립트 표준화 작업

JavaScript가 인기를 끌자, 같은해 8월 마이크로소프트에서도 이를 채택해서 IE 3.0에서 동작하는 Jscript라는 비슷한 언어를 만들어낸다. IE 외에도 다양한 브라우저들이 개별적으로 자바스크립트와 유사한 문법을 만들어내게 되고, 경쟁이 심화되자 브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 크로스 브라우징 이슈가 발생하기 시작한다. 이에 넷스케이프는 표준화를 위해 자바스크립트 기술 규격을 ECMA 인터내셔널에 제출하였고, 이 규격에 대한 작업은 ECMA-262라는 이름으로 1996년 11월부터 시작됐다. 그리고 다음 해인 1997년 6월에 ECMA-262의 초판은 ECMA 일반 회의에서 채택된다.

*ECMA International
정보 통신 시스템을 위한 국제적 표준화 기구로서, 1961년 유럽에서 컴퓨터 시스템을 표준화하기 위해 세워졌다.

이로써 ECMA 스크립트가 등장하게되었고, 각 브라우저 제조사들은 일관성 있는 가이드라인에 따라 자바스크립트 엔진을 구현할 수 있게 되었다. 현재까지 ECMA-262는 10개의 판이 출판되었고, 10판 표준에 대한 작업은 2019년 6월에 마무리됐다.

출판일 이름 이전 판과 다른 점
1 1997년 6월   초판
2 1998년 6월   ISO/IEC 16262 국제 표준과 완전히 동일한 규격을 적용하기 위한 변경.
3 1999년 12월   강력한 정규 표현식, 향상된 문자열 처리, 새로운 제어문 , try/catch 예외 처리, 엄격한 오류 정의, 수치형 출력의 포매팅 등.
4 버려짐   4번째 판은 언어에 얽힌 정치적 차이로 인해 버려졌다. 이 판을 작업 가운데 일부는 5번째 판을 이루는 기본이 되고 다른 일부는 ECMA스크립트의 기본을 이루고 있다.
5 2009년 12월   더 철저한 오류 검사를 제공하고 오류 경향이 있는 구조를 피하는 하부집합인 "strict mode"를 추가한다. 3번째 판의 규격에 있던 수많은 애매한 부분을 명확히 한다.[3]
5.1 2011년 6월   ECMA스크립트 표준의 제 5.1판은 ISO/IEC 16262:2011 국제 표준 제3판과 함께 한다.
6 2015년 6월 ECMAScript 2015 (ES2015) 6판에는 클래스와 모듈 같은 복잡한 응용 프로그램을 작성하기 위한 새로운 문법이 추가되었다. 하지만 이러한 문법의 의미는 5판의 strict mode와 같은 방법으로 정의된다. 이 판은 "ECMAScript Harmony" 혹은 "ES6 Harmony" 등으로 불리기도 한다.
7 2016년 6월 ECMAScript 2016 (ES2016) 제곱연산자 추가, Array.prototype.includes
8 2017년 6월 ECMAScript 2017 (ES2017) 함수 표현식의 인자에서 trailing commas 허용, Object values/entries 메소드, async/await 등.
9 2018년 6월 ECMAScript 2018 (ES2018) Promise.finally, Async iteration, object rest/spread property 등.
10 2019년 6월 ECMAScript 2019 (ES2019) Object.fromEntries, flat, flatMap, Symbol.description, optional catch 등.

 

3. 굵직한 발전들

 

1) Ajax

  • Ajax는 비동기적인 웹 애플리케이션의 제작을 위한 웹 개발 기법
  • 1999년, IE5에서 소개된 XMLHttpRequest API가 나오며 클라이언트 측 스크립트를 http 혹은 https로 서버에게 요청하고, 텍스트 형식으로 데이터를 받는 것을 가능하게 되었다. 

2) Json

  • 2001년, 더글러스 크락포드가 텍스트 형식으로 데이터를 저장하는 자바스크립트 문법을 'JSON'이라고 명명하여 문서로 만들었다.
  • JSON은 마크업이 아닌 구조적인 데이터를 표현할 때 사용되며 XML의 대안으로 자바스크립트와 함께 대중적인 인기를 얻었다.

3) V8 자바스크립트 엔진

  • 2008년 구글은 크롬의 베타 버전과 함께 V8을 공개했다. V8엔진은 자바스크립트 성능 향상을 불러왔고, 이를 통해 웹 브라우저 내에서 자바 스크립트를 빠르게 수행할 수 있게 되면서, 어플리케이션으로서 요구되는 성능을 갖추게 되었다.

4) CommonJS

  • 2009년 1월 1일, 모질라의 엔지니어 Kevin Dangoor는 브라우저 밖에서도 동작하는 범용 자바스크립트를 위해 표준화된 자바스크립트 생태계가 필요하다고 주장하였고, 그가 만든 serverjs 프로젝트는 지금의 commonJS 프로젝트가 되었다.
  • Node.js나 대부분의 npm 패키지들은 commonJs의 스펙을 따르고 있다.

5) Node.js

  • 라이언 달(Ryan Dahl)은 2009년 11월 JSConf에서 Node.js를 발표한다.
  • Node.js는 CommonJS의 스펙을 바탕으로하고 V8 엔진으로 빌드된 자바스크립트 런타임 환경이다.
  • Node.js는 싱글 쓰레드 이벤트 루프를 기반으로 하지만 비동기 I/O로 논블로킹하게 작업이 진행된다.
  • 그가 발표한 Node.js를 통해 범용 자바스크립트 패러다임이 실현되었다.
  • 그러나 그는 9년 뒤인 2018년에, Node.js에 대한 후회와 함께 새로운 런타임 환경 프로젝트 deno를 발표한다.

 

참고

위키피디아 https://ko.wikipedia.org/wiki/ECMA%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8

https://roseline.oopy.io/dev/javascript-back-to-the-basic/history-of-javascript

https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174353/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%97%AD%EC%82%AC