자바스크립트의 역사
HTML의 쓰임은 과학자들이 논문의 내용을 서로에게 공유하는 용도로 만들어지기 시작했습니다.
HTML로 작성한 문서는 다른 컴퓨터에서도 쉽게 볼 수 있었고,
HTML은 텍스트 뿐만 아니라 이미지를 보여주기도 하고 하이퍼링크를 타고 다른 페이지로 이동하는 기능도 생겨 났습니다.
그 이후 넷스케이프는 HTML에 움직이는 효과를 주기 위해 HTML에서 실행될 수 있는 언어를 개발하게 되는데
그 언어가 바로 현재의 자바스크립트입니다.
당시에는 모카라는 이름으로 세상에 나왔으며, 그 이후 라이브스크립트로 이름을 바꿨다가 나중에는 자바의 인지도가 높아지고 있을 때 자바스크립트로 이름을 바꿨습니다.
자바스크립트는 웹브라우저에서 돌아가는 스킴(함수형과 절차적 프로그래밍을 지원하는 다중패러다임 프로그래밍 언어)이지만, 문법은 자바나 C처럼 보이면서 쉬워보여야 한다는 조건이 있었습니다.
그래서 문법적으로는 자바와 C언어의 영향을 많이 받았고 초기 자바스크립트는 함수형 언어로 만들어졌습니다.
그리고 자바스크립트를 더욱 발전시키기 위해 자바스크립트를 객체지향언어로 설계를 하게 되는데
이 때 셀프라는 언어를 모방하게 됩니다.
셀프는 다른 객체지향 언어와 다르게 클래스를 사용하지 않는 프로토타입기반 객체지향 언어였고,
그렇기 때문에 현대의 자바스크립트는 클래스 문법을 지원하지만,
내부적으로는 프로토타입기반의 객체지향 구현기법을 사용하고 있습니다.
(ES5까지는 함수를 이용해 프로토타입 기반 객체지향 프로그래밍을 구현했습니다)
자바스크립트는 여러 언어의 문법이 혼합 되었고 제대로된 표준이 존재하지 않았기 때문에
많은 개발자들에게 많은 오해를 불러오게 되었습니다.
그럼에도 불구하고 웹이 발전하면서 마이크로소프트는 독자적인 자바스크립트 엔진을 만들기 시작하는데,
자바스크립트라는 이름의 저작권 문제를 피하기 위해 JScript 라는 이름을 붙이게 됩니다.
넷스케이프사와 마이크로소프트는 서로 경쟁을 하면서 자바스크립트에 여러가지 기능을 추가하게 되는데,
이 때문에 자바스크립트는 브라우저 호환성 문제와 여러가지 잔 버그들이 생겨나게 됩니다.
그리고 넷스케이프사가 원래 제공하는 기능들을 제공하기 위해 마이크로소프트는 넷스케이프의 자바스크립트를 리버싱엔지리어링을 통해 일부를 가지고 오게 되는데 이 때 현재 존재하는 IE버그도 같이 가지고 오게 됩니다.
하지만, 이 때 ActiveXObject가 마이크로소프트 브라우저에 탑재 되면서 자바스크립트가 발전하게 되는 큰 계기를 가지고 오게 됩니다.
그 당시 ActiveXObject은 마이크로소프트 오피스프로그램들과 연동을 위한 것이였는데 모질라에서도 동일한 일을 하는 XMLHttpRequest객체가 추가 되었고, 이후 구글과 다른 IT회사들에 의해 Ajax라는 기술이 탄생했습니다.
Ajax로 인해 자바스크립트는 급속도로 발전하게 되는데 모바일 웹이 나오면서 개발하는 패러다임도 바뀌게 되었고, 기존에 명확하지 않는 자바스크립트의 스펙을 명확하게 잡아나가기 시작합니다.
Ajax가 나온 이후 많은 개발자들이 자바스크립트에 대해 관심을 가지기 시작했고, 웹은 전성기를 맞이하게 됩니다.
하지만, 자바스크립트는 여전히 브라우저간 호환성 문제를 가지고 있었는데,
이 문제를 해결하기 위해 JQuery가 등장하게 됩니다.
JQuery는 모든 브라우저에서 호환성 문제를 극복할 수 있게 도와주었고,
간단한 문법으로 누구나 쉽게 DOM을 제어할 수 있게 해주었으며, JQuery 플러그인을 이용해 쉽게 추가적인 기능도 만들 수 있게 되었습니다.
그리고 2008년도 구글이 크롬 브라우저와 함께 V8엔진을 소개 하게 되는데 V8엔진은 자바스크립트가 느리다는 인식을 바꾸는데 한몫을 하게 됩니다.
이 후 V8엔진을 기반으로 Node.js(자바스크립트 실행환경)가 만들어지는데 Node.js의 탄생은 Java의 모토인 Write Once, Run Anywhere를 자바보다 더 잘 어올리는 언어가 됩니다. Node.js는 자바스크립트를 이용해서 서버, 데스크탑 프로그램, 모바일 어플리케이션을 만들수 있게 도와주었고, 자바스크립트로 만든 프로그램은 모든 브라우저와, 모든 운영체제, 웹을 지원하는 모든 스마트폰에서 돌아가게 되었습니다.