ECMAScript 와 TC39

모든 브라우저에서 일관된 자바 스크립트 동작을 보장 할 수 있는 이유

JavaScript의 역사

탄생

1995년 Netscape Navigator의 개발사인 Netscape의 창립자 Mark Andreessen은 디자이너와 아마추어가 HTML을 동적으로 만들 수 있게 하는 글루 언어(glue language)가 필요했고, 스킴 프로그래밍 언어를 Netscape Navigator에 내장시키기 위해 Brendan Eich를 고용했다.

Brendan Eich가 프로그래밍 언어를 개발하기 전 Netscape는 당시 떠오르던 언어인 Java를 브라우저에 내장시키기 위해 Sun Microsystems와 협력했다.

그러나 Java는 디자이너나 아마추어가 사용하기에 간단하지 않았고, Netscape는 JavaScript의 초기 이름이었던 Mocha를 개발하게 된다.

Brendan Eich는 10일 만에 Scheme 의 일부 기능, 간단한 객체 지향성, Java의 구문을 그대로 갖춘 Mocha의 프로토타입을 만들었다.

원래 Mocha라고 불렸으나 1995년 9월 Live Script로 이름이 바뀌고, 1995년 12월에는 Java의 인기에 편승하기 위한 마케팅 전략으로 JavaScript로 바뀌게 됐다.

JavaScript의 성공에 자극받은 마이크로소프트는 JScript 를 자체적으로 구현했고 이로 인해 크로스 브라우징 이슈가 발생하기 시작했다.

JavaScript와 JScript는 적당한 호환성을 제공하지만 구현 방식이 달랐고 두 브라우저에 대해 모두 구축할 여력이 없는 대부분의 회사는 둘 중 하나에서 잘 동작하도록 만드는 것이 일반적이었다.

이후 1996년 11월, Netscape는 언어의 표준화 및 명세화를 위해 JavaScript를 Ecma International에 제출했다. Ecma International은 1961년에 설립된 정보와 통신 시스템을 위한 국제적 표준화 기구이다.

ECMA 에서는 새로운 사양마다 각각의 표준과 위원회가 존재한다. JavaScript의 경우 표준은 ECMA-262이며, ECMA-262 표준을 작업하는 위원회는 TC39다.

ECMAScript

1997년 7월 ECMA-262의 초판은 ECMA 일반 회의에서 채택되었고, JavaScript는 ECMAScript로 명명되었다. 그 이유는 JavaScript 상표권을 Oracle이 소유하고 있기 때문에 법적 문제를 피하고자 표준에서는 ECMAScript를 대신 사용하고 있다.

이 글을 작성하는 2024년 1월 기준으로 ECMA-262 는 14판 표준까지 작업이 완료됐다.

TC39

Ecma-262 표준의 진화를 감독하는 위원회는 Technical Committee 39의 약자인 TC39이다.

TC39의 구성원은 일반적으로 Mozilla, Google, Apple, Microsoft 등의 메이저 브라우저 벤더를 비롯해 Facebook, Twitter, PayPal 등의 다양한 단체로 이루어져 있다.

TC39 회의 아젠다회의록은 모두 GitHub에 공개되어 있다.

TC39 구성원들은 표준에 대한 제안서를 작성, 승인 또는 거부 하는 것을 담당한다.

새로운 제안이 생성되면 해당 제안은 공식 표준이 되기 전 특정 단계들을 거쳐야 한다.

이 단계를 거치기 위해서는 TC39 구성원 간 합의가 이뤄져야 하는데 특정 제안에 강력하게 거부권을 행사하는 사람이 없고, 과반수가 동의해야 한다.

TC39 프로세스

TC39 프로세스는 0단계부터 4단계까지 총 5개의 단계로 나누어져 있으며, 각 단계로의 승급을 위한 명시적인 조건들이 존재한다. 해당 조건들의 자세한 내용은 TC39 프로세스 문서에서 확인할 수 있다.

0단계: 허수아비 (stage 0: strawman)

아직 공식 제안으로 제출되지 않은 모든 논의, 아이디어, 변경, 추가 사항은 0단계 제안으로 간주 된다.

TC39의 컨트리뷰터로 등록한 누구라도 제안을 할 수 있다.

TC39 회의 안건으로 상정되고 0단계 문서에 등재되면 0단계 제안이 된다.

1단계: 제안 (stage 1: proposal)

1단계에 들어오려면 가장 먼저 해당 제안을 책임지고 다음 단계로 나아갈 TC39 구성원(챔피언)을 구해야 한다.

또한 제안서에는 해결하고자 하는 문제를 설명하고, 사용 예시, 하이 레벨 API, 잠재적 우려 사항 및 구현체를 제시해야 한다.

1단계 제안을 수락한다는 것은 위원회는 자원을 투입하여 보다 심도 있게 검토할 의사를 표명한 것으로 해석할 수 있다.

2단계: 초안 (stage 2: draft)

2단계로 넘어가기 위해서는 ECMAScript 표준의 형식 언어로 작성된 형식적인 서술 초안이 필요하다. 이 초안은 공식 표준에 편입될 경우 사용할 명세의 초기 버전이다.

2단계 제안부터 공식 표준이 될 가능성이 높다.

이 단계는 향후 변경 사항이 발생할 수 있지만, 적은 변경만 허용된다.

3단계: 후보 (stage 3: candidate)

3단계 제안부터는 대부분 완성에 가깝고, 사용자들로부터 피드백이 필요한 상태이다.

3단계로 넘어가기 위해서는 표준 명세가 거의 마무리된 상태여야 한다.

4단계: 완료 (stage 4: finished)

마지막 4단계는 제안서가 공식 표준에 포함될 준비가 된 상태이다.

4단계에 도달하기 위해서는 ECMA-262의 단위 테스트 슈트인 Test262에 관련 테스트가 작성되고, 최소 2개 이상의 구현이 제공되는 등 여러 까다로운 조건이 있다.

2015년(ES6)을 기점으로 매년 6월 새로운 ECMAScript 표준이 발표되는데, 당해 3월 전까지 4단계를 달성하고 3월 회의에 최종 승인된 제안들이 새 표준에 포함된다.

Reference