[JavaScript] 훑어보기
문득 궁금했었지만 실제로 알고있지 않아도 큰 무리가 없었던 태생.
하지만 앞으로 자바스크립트를 의미있게 사용하기 위해, 왜 어떠한 목적으로 javascript가 태어났는지 정도는 알고있어야 개발자의 기본 덕목이지 않을까 생각한다.
JavaScript 역사
자바스크립트는 과거 1990년대 넷스케이프 커뮤니케이션즈 코퍼레이션으로부터 탄생했다.
현재 구글의 크롬 브라우저가 세계 브라우저 시장을 점유하고 있는것 처럼 당시에는 넷스케이프 커뮤니케이션즈의 넷스케이프 네비게이터라는 브라우저가 시장의 약 80%를 지배했다고 한다.
지금의 구글을 생각해보면.. 그만큼 영향력이 어마무시 했을것 같다..
당시 넷스케이프에서는 HTML에 코드를 웹 페이지 마크업으로 직접 작성하면서 웹 디자이너들과 프로그래머들이
이미지, 플러그인 등의 요소를 쉽게 조합할 수 있는 동적인 마크업을 위해 글루 언어(glue language)가 필요하다고 판단하여 개발이 시작되었다.
이 때 스크립트 언어가 자바와 비슷한 문법을 구현하고자 썬 마이크로시스템즈와 협업하여 공식적으로 라이브스크립트(LiveScript)가 탄생했고,
자바 프로그래밍 언어로부터 파생되었다는 인상을 심어주기 위해서였는지 나중에 자바스크립트라고 공식명칭을 바꾸었다. 이때 명칭때문에 많은 혼란을 야기했다고 한다.
자바와 비슷한 문법을 구현한 것이지 자바 자체를 도입한 것이 아니었기 때문인것 같다.
정리하면 JavaScript는 HTML 동적 마크업을 위해 개발되었으며 명칭은 단순히 자바와 비슷한 문법을 지원하고 지향하기 때문이었다.
근래 Node.js와 같은 런타임 환경과 같이 서버 사이드 프로그래밍에도 사용되고 있다. 점점 Java와 닮아가고 있다는 느낌을 받는다.
ECMA 스크립트
우리가 잘 알고있는 크로스 브라우징의 눈엣가시 IE브라우저를 개발한 마이크로소프트도 당시 JavaScript의 성공에 자극을 받아 J스크립트를 개발했다.
J스크립트?? 자바스크립트와 다른 스크립트였던 것인가??? 혼란스럽다.
우리가 개발한 JavaScript 코드는 크롬, IE, 사파리, 오페라 등등 대부분의 브라우저에서 호환이 되어 무리없이 동작을 한다.
그렇다면 각 브라우저별로 넷스케이프 네비게이터에 호환하는 JavaScript처럼 각 개발사별로 독립적인 스크립트 언어를 개발해내었다는 의미가 된다.
어떻게?? JavaScript 기술을 빼돌려 돌려쓴 것인가?
조사해본 결과, 지금 각 브라우저별로 자바스크립트가 호환되어 동작하는 이유는 ECMA-262 표준명세를 따랐기 때문이라고 한다.
표준이 있었다! ECMA스크립트라고 들어본 적이 있을것이다.
당시 넷스케이프 커뮤니케이션즈에서 JavaScript를 릴리즈 하고 마이크로소프트가 이에 적당히 호환되는 J스크립트를 개발하면서 JavaScript 표준의 필요성이 생겼던것 같다.
넷스케이프는 JavaScript의 표준화를 위해 기술 규격을 Ecma 인터네셔널에 제출하였고 이 규격에 대한 작업은 ECMA-262의 이름으로 1997년 6월 채택되었다.
참고로, Ecma 인터네셔널은 정보통신 시스템을 위한 국제적 표준화 기구라고 한다.
결국 ECMA스크립트는 ECMA-262에 의해 표준화된 언어의 이름이고,
JavaScript와 J스크립트는 모두 ECMA스크립트와의 호환을 목표로 하면서, ECMA 규격에 포함되지 않는 확장 기능을 제공하고 있다.
현재의 JavaScript같은 브라우저별 스크립트 언어들은 ECMA스크립트 언어를 호환하는 방언?이라고 할 수 있다.
ECMA 스크립트의 실행은?
자바스크립트의 역사와 표준의 개념을 알고나니 뇟속이 든든해진 기분이다.
그렇다면 ECMA 스크립트는 각 브라우저별로 어떻게 실행되는 것일까?
웹 브라우저의 자바스크립트 엔진에 의해서 동작을 한다. 이 엔진은 코드를 실행하는 프로그램 또는 인터프리터(소스를 기계어로 번역하지 않고 직접 실행)라고 할 수 있다.
최초의 자바스크립트 엔진은 넷스케이프 내비게이터 브라우저를 위해 C++로 개발된 스파이더 몽키이며
이를 시작으로 현재까지 각 브라우저별로 자바스크립트 엔진을 보유하고 개발해오고 있다.
- 스파이더몽키 - 모질라,파이어폭스 지원
 - V8 - 구글 크롬, Node.js
 - 웹킷 - 애플 사파리
 - 차크라 - 마이크로소프트 IE
 - 제리스크립트 - 사물인터넷용 자바스크립트 엔진
 
각 운용하는 엔진이 다르다보니 모든 브라우저가 ECMA 표준을 따르지만, 브라우저별로 javascript뿐만 아니라 html, css등등의 최신 표준명세에 대하여 지원하는 수준이 다를 수 있다.
(크로스브라우징을 몰랐던 한 때 특정 소스가 IE에서 에러를 발생시키는 현상을 보고 충격을 받은적이 있었다..)
그렇기 때문에 빌드시 js코드를 하향명세로 변환해주는 라이브러리를 사용하지 않는다면, 되도록 보수적인 문법을 사용하여 코드를 작성하는것을 추천한다.
정리
- JavaScript는 Html을 동적으로 마크업하기 위해 넷스케이프 커뮤니케이션즈에서 개발한 객체 기반 스크립트 프로그래밍 언어.
 - Java를 따라 비슷한 문법을 구현하였지만, 실제로 Java 자체와 연관성은 없다
 - 브라우저별 JavaScript의 호환을 위해 국제기술규격언어 ECMA스크립트(ECMA-262)를 표준으로 지원하며 브라우저별 방언으로 확장 지원.
 - 브라우저별로 JavaScript 엔진을 운영하며 최신 표준에 대하여 각 브라우저별로 지원하는 수준이 다를 수 있다.
 
![]()
다음 포스팅에서는 JavaScript의 동작원리를 조금 더 상세하게 알아보자!

