소개
2020년, 월드 와이드 웹은 보편화되었다. 웹에 연결된 수십억 대의 기기에서 수십억 개의 웹사이트에 접근할 수 있다. 그렇게 사이트에 접근하는 각 기기는 해당 페이지를 처리하고 보여줄 수 있는 웹 브라우저 혹은 비슷한 프로그램을 작동시킨다. 그 페이지들의 대부분은 Javascript로 작성된 소스코드를 포함하거나 로드한다. 2020년 Javascript는 거의 틀림없이 세계에서 가장 널리 퍼진 프로그래밍 언어이다. StackOverflow의 조사[2018]에 따르면 전문 개발자의 71.5%가 Javascript를 사용한다고 답했고 이는 Javascript가 세계에서 가장 널리 사용되는 프로그래밍 언어가 되었다는 것을 의미한다.
이 문서는 1995년부터 2015년까지의 기간 동안 Javascript 언어가 생기고, 설계되고 발전하는 과정을 다룬다. 하지만 그 이야기가 Javascript의 기술적인 부분들에만 국한된 건 아니다. 2020년 웹을 지배하고 있는 Javascript를 만들기 위해 사람들과 조직들이 어떻게 경쟁하고 또 협력했는지에 대한 이야기이기도 하다.
Javascript의 이야기는 길고 복잡하다. 그래서 이해를 돕기 위해 이 문서는 4개의 부분으로 나뉘어 있다. 각 부분은 Javascript의 발전과 진화의 주요한 단계들을 다루고 있다. 각 부분 사이에는 Javascript에 대한 소프트웨어 개발자들의 반응과 그들이 Javascript를 어떻게 사용했는지에 대한 맥락을 제공하는 짧은 막간이 있다.
1995년 웹과 웹 브라우저는 세상에 막 나온 신기술이었다. 그리고 Netscape Communications Corporation은 웹 브라우저 개발을 주도하고 있었다. Javascript는 이 문서의 저자 중 하나인 Brendan Eich가 1995년 5월에 Netscape에서 처음 설계하고 구현했다. Javascript는 웹 페이지에 소규모의 코드를 포함할 수 있도록 하기 위해 만들어진 단순하고 사용하기 쉬운 동적 언어(dynamic languageg)를 목표로 했다. 이렇게 들어간 코드는 브라우저에서 페이지를 렌더링할 때 해석되어 페이지를 동적으로 커스텀할 수 있게 해주었고 또한 페이지가 사용자와 상호작용할 수 있게 해주었다.
1부인 "Javascript의 기원"은 Javascript의 탄생과 초기 발전 양상에 대해서 설명한다. Netscape에서 Javascript의 첫 버전을 개발하게 된 동기와 개발 과정에서의 트레이드오프들에 대해서도 검토한다. 그 이름 때문에 Javascript는 Javag 언어와 혼동되는 일이 많다. 1부에서는 언어의 이름을 짓게 된 과정, 원래 두 언어 간 관계가 어떻게 예상되었는지, 그리고 실제로는 어떤 일이 일어났는지에 대해서도 설명한다. 여기에는 Javascript의 원래 기능에 대한 개요와 그 동기가 된 설계상의 결정들이 포함된다. 1부에서는 Netscape와 다른 회사들에서 일어난 Javascript의 초기 발전 과정 또한 추적한다.
웹은 독점적이지 않고 개방적인 기술1에 기반하고 있다. 서로 다른 회사들의 다양한 웹 서버에서 호스팅하고 다양한 브라우저에서 접근할 수 있는 웹페이지를 만드는 일을 누구나 할 수 있다. 공통 명세는 서로 다른 독립적인 구현체들이 서로 호환될 수 있게 해준다. Javascript에 어떤 표준 명세가 필요하다는 것은 극초기부터 인식되고 있었다. Javascript의 출시 첫 해부터 이런 상호 호환이 안 되는 구현체들을 다루는 문제가 있었기 때문이다. Netscape의 Javascript와 Microsoft가 리버스 엔지니어링을 통해 구현해낸 구현체 간의 호환성 문제였다. 그렇게 1996년 Ecma 국제 표준화 단체의 후원을 받아 Javascript의 표준화 과정이 시작되었다. 언어의 첫 번째 공식 표준 명세는 "ECMAScript"라는 이름으로 1997년에 발행되었다. 두 차례의 개정판과 개선판이 1999년 말에 발행되었는데 이는 대체로 Netscape가 언어를 발전시킨 데에 따른 것이었다.
2부인 "표준 만들기"에서는 Javascript의 표준화 활동이 어떻게 시작되었는지, 명세가 어떻게 만들어졌는지, 누가 이 활동에 기여했는지, 또 각종 결정들은 어떤 방식으로 내려졌는지를 검토한다.
2000년에 Javascript는 웹에서 널리 쓰이고 있었다. 하지만 Netscape는 빠르게 추락하고 있었다. Javascript를 만든 Eich도 다른 프로젝트를 담당하게 된 상태였다. 앞으로 누가 Javascript의 발전을 주도할까? "자비로운 종신 독재자"2역할을 할 조직이나 개인이 없는 상황에서 Javascript의 발전은 ECMAScript 표준 위원회에 맡겨졌다. 하지만 설계 책임이 순조롭게 옮겨지지는 않았다. ECMAScript 위원회는 Javascript를 발전시키기 위한 새로운 방식을 찾으려고 했다. 그러나 이런 시도로 인해서 초기 과정의 실패, 표준화의 중단, 잘못된 방향성을 가진 활동들이 10년에 걸쳐 발생했다.
그동안에도 Javascript의 사용률은 빠르게 올라갔다. 그리고 Javascript를 사용하는 사람들은 구현체에서 자체적으로 제공하는 확장 기능들을 많이 사용했다. 이렇게 구현체별로 다른 확장 기능들이 사용되면서 Javascript 구현체에 종속적으로 작동하는 거대한 레거시 코드를 만들었고 잘 유지보수되지도 않았다. 새로운 호환성 이슈를 만들기도 했다. 또한 웹 개발자들은 복잡한 클라이언트 웹 애플리케이션을 Javascript로 만들기 시작했고, 따라서 이를 제대로 지원하기 위한 언어의 표준화 개선을 요구하기 시작했다.
3부 "실패한 개혁, ES4"에서는 언어를 개정하려고 했던 실패한 시도와 그로 인한 표준 위원회 내의 혼란 그리고 그 혼란이 어떻게 결국 해결되었는지를 살펴본다.
2008년 표준 위원회는 운영의 화합을 회복했고 2009년 약간 개선된 버전의 표준을 만들고 발표할 수 있었다. 그 성공으로 인해서 표준 위원회는 드디어 Javascript를 적합하게 현대화하는 작업에 착수할 준비를 마쳤다. 7년에 걸친 노력을 통해 위원회는 Javascript와 그 명세에 주요한 개선들을 만들어냈다. 그 결과로 만들어진 ECMAScript 2015는 지금도 진행중인 Javascript의 진화의 토대가 되었다. ECMAScript 2015의 출시가 완료된 후 위원회는 더 빠른 점진적인 출시가 가능하도록 프로세스를 수정했고 지금은 매년 정기적으로 개정을 하고 있다.
4부 "Javascript 현대화"에서는 ECMAScript 표준의 2009년, 2015년 버전을 만드는 데 참여했던 사람과 그 진행 과정의 이야기이다. Javascript의 각 버전들의 목표를 다루고 그 버전들에서 Javascript 개발 커뮤니티의 진화하는 요구 사항을 어떻게 다루었는지에 대해 다룬다. 이 부분에서는 각 버전에서 언어에 적용된 중요한 변경 사항과 언어에 추가된 새 기능들을 검토한다.
이 문서의 원 본 자료는 가능한 한 동시대의 1차 자료(primary documents)들을 사용한다. 다행히 이런 자료들은 매우 많이 있다. 그런 문서의 저자들은 참고문헌에 포함된 URL을 이용해서 거의 모든 1차 자료에 쉽게 접근할 수 있게 해 놓았다. 이런 1차 자료들에서 부족한 부분은 Javascript의 역사에 직접적으로 관여한 사람들과의 인터뷰와 개인적인 대화를 통해서 보충되었다. 이 문서의 두 저자들 또한 이 문서에서 다루는 많은 사건들의 주요한 참여자였다. 따라서 저자들의 기억 또한 다른 정보 출처에서 나온 이야기와 비슷하게 다룬다.
Javascript의 20년 역사는 길기 때문에 이 문서도 길다. 이 역사에는 수백 개의 사건들 그리고 수십 명의 개인과 단체들이 얽혀 있다. 부록 A부터 E는 연관된 사람과 단체의 목록 등 이런 세부 사항들을 독자들이 탐색하는 데 도움을 주기 위한 내용이다. 부록 A와 부록 B는 이야기에 등장하는 인물과 조직에 대한 주석이 달린 목록을 제공한다. 부록 C는 용어 사전이다. Javascript 고유의 용어이거나 2020년 개발 커뮤니티에서의 일반적인 쓰임새와 다른 의미를 가지고 쓰였거나, 향후 의미가 바뀌거나 생소해질 수 있는 용어들을 설명하고 있다. 용어 사전에 있는 단어가 이 문서에서 처음 사용될 때는 이탤릭체로 표시되고 위첨자 "g" 가 붙을 것이다. 예를 들어 termg 처럼 말이다. 부록 D는 문서에서 독자가 접할 약어들을 정의한다. 부록 E는 이 문서의 네 부분 각각에 대한 네 개의 세부적인 타임라인을 제공한다.