자바스크립트 표준은 어떻게 만들어지는가?

이 블로그는 주로 코딩을 잘하는 방법에 대해 쓰지만, 요 며칠 반응이 뜨거워서 오늘은 잠시 쉬어가는 의미로 자바스크립트 표준이 어떻게 만들어지는지 소개하려고 합니다.

우리가 알고 있는 대게의 프로그래밍 언어는 만든 사람이 명확합니다. Java는 James Gosling, C#은 Anders Hejlsberg, Scala는 Martin Ordersky, F#은 Don Syme입니다. 그리고 JavaScript의 아버지는 모질라 재단의 공동 설립자이자 CTO를 거쳐 현재 CEO를 맡고 있는 (게이 반대 운동에 기부한 것 때문에 사임했음) Brendan Eich입니다.

자바스크립트 초기 버전은 Brendan Eich가 초기 브라우저인 네스케이프에 탑재하기 위해 만들었고, 인터넷 익스플로러도 JScript라고 이름 붙인 자바스크립트를 지원하기 시작했습니다. 두 언어가 분화되는 것을 막기 위해 네스케이프는 자바스크립트 표준화를 Ecma라는 국제 표준 단체로 넘깁니다.

JavaScript는 상표명이기 때문에 상표 분쟁을 막기 위해 Ecma에 등록된 자바스크립트의 이름은 EcmaScript가 되었습니다. Ecma 내에는 표준별로 Technical Committee(TC)라고 불리는 분과가 존재하는데 EcmaScript는 TC39에서 담당하고 있습니다. 그리고 자바스크립트는 더 이상 Brendan Eich가 혼자 만드는 언어가 아닌 위원회가 만드는 언어가 됩니다.

TC39 참여자들은 주로 구글, 애플, 이베이, 모질라, 인텔, jQuery 재단, 마이크로소프트 등 브라우저 벤더, 인터넷 대기업 소속이고 필요에 따라 프로그래밍 언어를 전공한 대학 교수나 전문가들이 초청되기도 합니다.

저는 웹브라우저 개발을 하면서 2008년 9월부터 2009년 8월 사이 1년 정도 TC39 멤버로 표준화 회의에 참여하였습니다. 당시 상황은 EcmaScript 3 (1999) 이후 10년 가까이 새로운 언어 명세를 내놓지 못하다가 EcmaScript 4 명세를 만들었으나 명세가 너무 커서 TC39 내에서 합의를 이루지 못하고 폐기한 상태였습니다.

제가 참여한 1년 기간은 당시에 Harmony라고 불렀고, 현재 EcmaScript 5로 알려진 표준을 정의하는 시기였습니다. 여기에 포함된 기능은 strict mode, getters and setters, 새로운 array 메소드들, JSON 지원 등이 있습니다. EcmaScript 4가 클래스나 패키지 등 꽤 큰 변화를 시도했던 것과 달리 명세 자체를 대폭 축소한 면이 있습니다. EcmaScript 4에서 논의했던 내용들은 지금 일부 EcmaScript 6에 포함되어 있고, 7으로 넘어간 것들도 있습니다.

보통 프로그래밍 언어 표준이 위원회를 통해 결정되면 망한다는 이야기를 많이 합니다. 서로 이해 관계가 다른 여러 회사들이 참여해서 각자 넣고 싶은 기능들을 넣기 때문에 과도하게 복잡한 언어가 되는 경향이 있기 때문입니다. 사실 자바스크립트도 EcmaScript 4를 정의할 때는 이런 이해 관계가 충돌이 있지 않았나 싶습니다.

하지만 EcmaScript 4를 폐기하고, 다시 점진적으로 EcmaScript 5를 내놓을 수 있었던 이유에는 TC39 특유의 분위기가 있지 않았나 생각합니다. 자바스크립트가 세상에 미치는 영향을 생각했을 때 TC39 참석자 수는 무척 적습니다. 각 회사 별로 보통 1명, 많아야 2명이 참석하는데, 참석자들이 보통 프로그래밍 언어 개발을 20-30년씩 하신 분들이라 회사가 달라도 서로를 무척 잘 알고 있고 존중하는 분위기였습니다.

TC39 미팅은 보통 2-3달에 한 번 이루어지고, 참여 회사들이 번갈아 가면서 장소를 제공하니다. 저는 TC39 미팅하면서 구글, 야후, 마이크로소프트, 모질라 등을 방문해 보았습니다. 회의는 이틀간 하는데, 아주 작은 기능 하나에 대해서도 수많은 경우의 수를 고려하면서 정말 하루 종일 쉬지도 않고 이야기합니다.

주제에 따라 프로그래밍 언어 전공한 교수들이 초대되기도 하는데, 참석자들 자체가 모두 프로그래밍 언어를 20-30년씩 하신 분들이라 논의할 때 전공 교수들도 쩔쩔 매는 모습을 몇 번이나 목격하기도 하였습니다.

중간 중간 쉬는 시간에도 기술에 대한 논의가 끊이지 않습니다. 보통 첫날 저녁에는 참석자들이 다 같이 근처 레스토랑에서 저녁 먹으면서 이야기하는데, 10명 이상의 대가들이 몇 시간씩 기술에 대해 열정적으로 이야기하는 것이 인상적이었습니다. 저는 당시 차가 없어서 JSON 포맷을 만든 것으로 유명한 Douglas Crockford의 차를 얻어 타고 이동했는데, 이런 저런 질문하면서 먼저 친해지려고 노력해 주신 것도 기억에 남았습니다.

당시에 저는 브라우저 성능 최적화 일을 하고 있었고, 스크립트 로딩 및 실행의 최적화를 위해 자바스크립트 소스가 아닌 일종의 어셈블리(바이트코드)를 만들자고 제안했었습니다. 물론 당시 분위기는 EcmaScript4를 포기하고, 꼭 필요한 것만 최소한으로 명세에 반영하자는 상황이었기 때문에 제 제안은 별로 설득력이 없었습니다(ㅠㅠ). 한동안 잊고 있었는데, 최근에 WebAssembly에 대한 이야기가 나오는 것을 보고 격세지감을 느낍니다.

물론 각 회사를 대표해서 온 만큼 회사의 이익을 위해 기능을 제안하는 경우도 있습니다. 제가 기억하는 일화 중에 하나는 IBM에서 당시 비지니스 어플리케이션을 쉽게 작성하기 위해 자바스크립트에 decimal number를 포함시키자는 제안을 했었습니다. 물론 다른 참석자들은 decimal number는 라이브러리로 처리하는 게 맞다는 의견이었고, 결국 이 제안은 받아들여지지 않았습니다.

놀란 것은 TC39에는 표결이 거의 없다는 점입니다. 자바스크립트가 산업에 미치는 영향을 생각해봤을 때 회사의 이해 관계로 첨예하게 의견 대립이 있을 것도 같지만, 대부분의 안건은 참석자 전원이 충분히 논의하고 거의 만장일치로 결정을 합니다. 논의가 충분치 않은 경우 섣불리 결정하지 않고 다음 회의에서 전문가를 불러 의견을 듣고 이야기를 이어나가는 모습도 인상적이었습니다.

전세계에 영향을 미치는 중요 기술의 표준화가 생각보다 실리콘밸리 동네 아저씨(?) 모임 같았습니다. 서로 오랜 기간 지식과 의견을 교환하고, 더 좋은 방법을 찾을 때까지 성숙하게 논의할 수 있는 능력을 가진 동네 아저씨들 말이죠. 한국에서도 웹 관련 몇몇 모임이나 표준화 회의를 참석해 본 경험이 있고 각자 자기 회사 이해 관계에만 민감하게 굴던 모습과 대비되어서 수준 차이라는 게 어떤 건지도 실감하였습니다.

제가 TC39 자체에 별로 기여한 바는 없지만, 회의 참석하여 이런 모습들을 보며 많이 배우고 느꼈습니다. 한국에서 온 이름도 모르는 엔지니어한테도 모두들 친절하게 먼저 말을 걸고, 배려해주시는 모습에 감동받았고 나도 나중에 좋은 엔지니어가 되면 그렇게 해야지라고 생각했는데 아직 갈 길이 멀기만 하네요.

Advertisements

One thought on “자바스크립트 표준은 어떻게 만들어지는가?

댓글이 닫혀있습니다.