자바스크립트의 역사, 과거와 현재

1993년 집에 컴퓨터가 없던 시절, 컴퓨터를 잘 모르는 사람들도 쉽게 쓸수있는 UI요소가 더해진 첫 번째 ‘모자이크’ 웹 브라우저가 세상에 나왔다.

모자이크 웹 브라우저의 개발팀을 이끌던 Marc Andreessen(마크 엔더슨)은 대학교를 졸업함과 동시에 ‘Netscape’ 라는 회사를 설립한다. 이 마크 엔더슨은 전에 만들었던 모자이크 웹 브라우저의 경험을 토대로 해서, 조금 더 UI요소가 더해진 ‘Netscape Navigator’를 시장에 내놓게 된다.

이 당시에는 HTML과 CSS로 페이지와 페이지 사이에 이동 정도만 가능한 정말 정적인 웹만 만들 수 있었다. ‘Netscape Navigator’ 는 80% 의 시장 점유율을 자랑하면서 급격히 성장해나가기 시작했다.

마크 엔더슨은 사람들이 다양하게 사용할 수 있는 동적인 웹사이트를 어떻게 만들 수 있을지 계속 고민했다. 고민의 결과로, 사용자들에게 보여지고있는 웹사이트 안에서 DOM요소들을 조작하면서 다이나믹한 웹사이트를 만들기위해 새로운 언어를 추가하기로 결심하였다.

첫 번째로 고려되었던 언어는 그 당시 한창 뜨고 있었던 썬 마이크로시스템사의 자바언어였다. 하지만 웹사이트를 개발하던 개발자들이 쓰기에는 다소 무겁고 어려운 언어였다.

두번째로 시도한 것은, Brendan Eich (브렌던 아이크)란 사람을 스카웃해와서 기존에 존재했던 Scheme scripting 언어를 조금 변형하는 것이었다. 기존의 컨셉을 유지하면서 문법을 조금 더 자바스럽게 바꾼 것이다. 결과적으로 브렌던은 정말 짧은 시간 안에(10일) 프로토 타입을 베이스로 한 정말 유연한 언어를 개발하게 된다.

1994년 9월에, 내부적으로는 Mocha(모카)라고 불렸던 새로운 언어가 탄생했다. 추후 , 이는 LiveScript로 이름이 바뀌게 되고, Netscape Navigator 안에는 LiveScript를 이해하고 실행할 수 있는 엔진 즉, Interpreter가 포함되어 브라우저가 출시 된다.

즉, 이 말은 웹 개발자들이 LiveScript를 이용하여 웹페이지를 만들게되면 Netscape Navigator 브라우저가 그 언어를 이해하면서 그 언어가 실행하고자 하는 것에 알맞게 DOM요소를 조작하는 것이 가능해진 것이다.

그 당시에, 자바 언어의 인기가 치솟고 있었는데.. Netscape사는 어떻게 하면 그 인기에 어떻게 살짝 얹혀갈 수 있을까 고민을 했다고 한다.. 그래서 LiveScript 이름을 JavaScript로 이름을 변경한 것이다.

그리하여 1995년에 공식적으로 Netscape Navigator 브라우저 위에 JavaScript와 그 엔진을 포함한 브라우저가 출시된다.

이런 브라우저의 무한한 잠재성을 확인한 Microsoft는 위기감을 느끼게되고, Netscape에서 출시한 JavaScript를 reverse-engineering(만들어진 프로그램에 바이너리 코드를 분석해서 소스코드를 복원해내는 과정) 하게 된다. 그래서 결국은 Netscape에서 만든 JavaScript와 그 엔진의 소스코드를 그대로 복원해서 조금의 기능을 변경한 후, JScript라는 이름으로 세상에 내놓는다.

그리하여 1995년, microsoft 사에서도 Internet Explorer를 시장에 내놓게 된다. 바로 이것은 개발자들 고통의 시발점이 된다..

웹 개발자들은 너무나도 다른 이 두 브라우저 위에서도 잘 동작할 수있는 웹사이트를 만들었어야 했다.

당시 microsoft와 Netscape의 경쟁

Netscape사는 ECMA International이라는 단체를 찾아가서, JavaScript 언어로 표준안을 만들 것을 제안한다.

그리하여 드디어, 1997년 7월, 첫 번째 ECMAScript 1이 등장한다.
이것은 브라우저에서 동작하는 언어를 만들때 엔진이 이해하기 위해서 변수를 정의하는 방법, 함수를 정의하는 방법등의 문법적인 사항이 담긴 문서이다.

그 뒤로, 새로운 버전들이 계속 추가적으로 나오기 시작했다. 특히, ECMAScript3에서는 새로운 error handling에 관련된 문법이라던지, 관계 연산자 등이 새로 추가되었다.

ECMAScript4부터는 많은 사람들이 class, optional type annotation 등 다양한 아이디어를 제안했다. 이렇게 많은 것들이 논의되는 동안, Internet Explorer의 시장 점유율이 급격히 상승하게 된다. 무려 95%의 사용자들이 익스플로러를 사용했다.

이렇게 큰 시장 점유율을 확보하게된 Microsoft사는 더이상 ECMAScript에 참여하지 않겠다고 선언하게되었다.
그래서 2000년도 부터는, 표준안 제작이 더뎌지게 되었다.

그리고 4년뒤인 2004년, mozilla사에서 firefox 브라우저를 출시한다. 그리고 모질라사는 ECMA International 단체에 찾아가서 ActionScript3 언어와 엔진 Tamarin을 이용해 표준안을 만들 것을 제안한다. 하지만 이 언어와 엔진은 JScript와 JavaScript와 너무 달랐기 때문에, 이 언어로 다시 표준안을 진행하기에는 조금 무리가 있었다.

그래서 표준화를 앞에 두고 3사의 치열한 신경전이 계속 벌어졌다.
그러는 동안, 불쌍한 개발자들은 시장에 존재하는 브라우저에서 잘 동작하는 웹페이지를 만들어야했기 때문에.. 밤낮으로 고생할 수 밖에 없었다.

그러던 2004년 , 웹 시장에서 아주 획기적인 일이 발생하게 된다. 바로 ‘Jesse James Garrett'(제시 제임스)라는 사람이 AJAX(Asynchronous JavaScript and XML)라는 기술을 발표했다. 비동기적으로 데이터를 서버에서 받아오고 처리할 수 있도록 도와주는 획기적인 기술이 도입된 것이다.

이런 AJAX의 도입에도 불구하고, ECMAScript 표준안을 앞두고 3사의 치열한 공방전은 계속 되었다. 당연히 개발자들은 다양한 브라우저에서 동작하는 웹페이지를 만들기 위해 많은 고생을 하고 있었다. 그러다보니 자연히 웹 시장이 증가하고, 개발자 수요가 증가하게되면서 많은 개발자들이 웹 시장으로 들어오게 되었다. 그리고 이 많은 개발자들 사이에서 서서히 강력한 커뮤니티가 형성되기 시작했다. 이런 커뮤니티 사이에서 드디어 jQuery, dojo, mootools 와 같은 라이브러리들이 많이 나오게 된다. 이러한 라이브러리들이 해결하고자 하는 공통된 목적은 단 하나, 개발자들이 더 이상 다른 브라우저에서의 구현을 신경쓰지않아도 되게끔 만들어주는 것이었다. 그 중에서도 jQuery가 큰 인기를 얻게 되었다.

이런 진취적인 변화속에서도 이 웹시장을 급격하게 바꾸는 사건이 있었다. 그 사건은 바로 2008년도에 google에서 출시한 Chrome 브라우저를 출시한 것이다. 이 Chrome 브라우저는 JIT(just-in-time complication)라는 자바스크립트를 실행하는 속도를 굉장히 빠르게 올린 강력한 엔진을 포함하고 있었다. 이런 크롬의 획기적인 등장에, 시장에 존재하던 다른 브라우저들은 자극을 받게 된다.

그리하여 2008년 7월, 모든 브라우저들이 모여서 표준안에 관한 생산적인 대화를 하게 된다. 그리하여 드디어 2009년 ECMAScript5가 나오게 되고, 그 뒤를 이어 2015년도에 ECMAScript6가 나오게 된다. (흔히 사용하는 class, arrow function, const, let 등은 ECMAScript6에 정의되어 있다)

그 뒤로도 매해마다 새로운 버전이 나오고 있는데, 조금씩 수정되고 있지만 커다란 변화는 5,6에서 대부분의 것이 정의되었다고 볼 수 있다.

그래서 이제는 JavaScript는 성숙하고 잘 정착된 언어이며, 모든 브라우저들이 이 ECMAScript의 표준 사항을 잘 따라가고 있기 때문에 이제는 더 이상 jQuery, dojo 등의 라이브러리 도움 없이도 충분히 자바스크립트와 웹 APIs를 이용하여 모든 브라우저에서 잘 동작할 수 있는 웹사이트를 제작할 수 있게 되었다.

각 브라우저들의 엔진

Chrome 브라우저에서 쓰여지는 V8엔진은 node.js와 ELECTRON에서도 많이 이용되어진다. 그리고 2020년도 2월경에는 Microsoft Edge사에서도 V8엔진을 대체하여 사용하고 있다.

시장에서 다양한 사용자들은 다양한 브라우저들을 쓰고 있고, 모든 사용자들이 최신 브라우저들을 쓰고 있는건 아니다. 하지만 개발자들은 쿨한 기능이 탑재된 최신 버전의 ECMAScript로 개발하고 싶어한다. 그래서 개발할때는 최신버전의 ECMAScript를 쓰고, 사용자에게 배포할때만 JavaScript transcompiler를 이용해서 즉, ECMAScript의 최신 버전을 5,6로 변환해주는 ‘BABEL’을 사용한다.

요즘은 SPA(Single Page Application)가 점점 뜨고 있다. 즉, 웹페이지를 만드는 것은 더 이상 충분하지 않다. 하나의 페이지 안에서 데이터를 받아와서 필요한 부분만 부분적으로 업데이트하는 것이 굉장히 유행하고 있다. 물론, 자바 스크립트만으로도 충분히 가능하겠지만 이 SPA를 더 쉽게 만들기 위해 React, Augluar, Vue 등의 프레임워크가 등장하게 되었다.

또, ECMAScript의 활발한 표준화와 강력한 자바 스크립트 엔진 V8을 통해서 node.js 가 등장하게 된다. 이 node.js 는 V8 자바스크립트 엔진을 이용하여 백엔드에서 서비스를 구현할 수 있게 만들어졌다.
또 리액트 네이티브로 모바일 어플리케이션도 충분히 만들수 있고, ELECTRON을 이용하여 데스크탑 어플리케이션도 만들 수 있다.

그리고 브라우저에서 동작할 수 있는 유일한 언어는 자바 스크립트였는데, 요즘에는 Web Assembly가 등장하여 Java, C++, Python, C#, Go등 다양한 언어를 이용하여 웹 어플리케이션을 만드는게 가능해졌다.