자바스크립트를 할줄은 알지만 기초가 부족하기에 완전히 바닥부터 다시 한번 자세하게 공부해보려고 합니다. [모던 자바스크립트 Deep Dive] 책을 읽으며 공부한 내용을 정리하겠습니다!

자바스크립트의 역사

자바스크립트는 1995년 넷스케이프의 브렌던 아이크가 개발한 브라우저용 경량 프로그래밍 언어입니다. 이듬해 마이크로소프트에서 JScript라는 파생 버전을 개발하며 브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 크로스 브라우징 이슈가 발생하기 시작했습니다.

ECMAScript

이에 넷스케이프에서 비영리 표준화 기구인 ECMA 인터네셔널에 JS의 표준화를 요청했습니다. 그렇게 탄생하게 괸 것이 표준화된 자바스크립트, ECMAScript입니다.

let, const, 화살표 함수, 클래스, 모듈 등 범용 프로그래밍 언어로서 갖춰야 할 기능을 대거 도입한 ES6가 발표된 2015년 이후 비교적 작은 기능들을 매년 추가해 버전업하고 있습니다.

JS와의 관계

자바스크립트는 프로그래밍 언어로서 기본 Core를 이루는 ECMAScript와 브라우저가 별도 지원하는 클라이언트 사이드 Web API(DOM, BOM, Canvas, XMLHttpRequest, fetch, WebStorage 등),

Ajax

1999년, 자바스크립트를 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능인 Ajax(Asynchronous JavaScript and XML)가 XMLHttpRequest라는 이름으로 등장했습니다. 이전에는 HTML 코드를 서버로부터 받아서 웹페이지 전체를 렌더링 하는 방식으로 작동했기에 페이지가 바뀌면 페이지 전체를 다시 렌더링했지만, Ajax의 등장 덕분에 변경이 필요한 부분만 한정적으로 렌더링 하는 방식이 가능해졌습니다.

jQuery

2006년 등장한 jQuery는 DOM(Document Object Model)을 더 쉽게 제어할 수 있도록 도와주고, 크로스 브라우징 이슈의 해결에도 일조했습니다. 자바스크립트보다 배우기 쉽고 직관적이기 때문에 넓은 사용자 층을 순식간에 확보했습니다.

V8 JavaScript Engine

2008년에는 구글에서 V8 자바스크립트 엔진을 발표했습니다. 그 뛰어난 성능 덕분에 웹 어플리케이션도 데스크탑 어플리케이션만큼 좋은 사용자 경험을 제공할 수 있게 됐습니다. V8 엔진으로 JS는 크게 발전하기 시작했으며 기존에는 웹 서버에서 수행되던 로직들이 대거 프론트엔드 영역으로 넘어오게 됐습니다.

Node.js

V8이 등장하고 이듬해 라이언 달이 V8 엔진으로 빌드된 Node.js 자바스크립트 런타임 환경을 발표했습니다. 브라우저의 JS 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작할 수 있게 돼, 자바스크립트 만으로도 프론트와 백을 모두 개발할 수 있다는 이점을 가져왔습니다.

SPA Framework

규모가 크고 복잡해진 모던 웹 어플리케이션과 발맞춰 대두된 CBD(Component Based Development) 방법론을 기반으로 하는 SPA(Single Page Application)가 대중화되며, Angular, React.js, Vue.js 등 다양한 SPA 라이브러리/프레임워크들이 등장했습니다.

자바스크립트의 특징

자바스크립트는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어로, 인터프리터 언어(interpreteer language)입니다. 모던 JS 엔진들은 인터프리터와 컴파일러의 장점을 결합해 비교적 느리다는 인터프리터 언어의 단점을 해결했습니다.

  • 명령형(imperative), 함수형(functional), 프로토타입 기반(prototype-based) 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어
  • TypeScript를 이용하면 더 강력한 객체지향 언어가 됩니다.

인터프리터 언어 vs 컴파일러 언어

  • interpreter language: runtime에 문 단위로 한 줄씩 중간 코드(intermediate code)인 바이트코드(가상 머신에서 실행하도록 만든 바이너리 코드, 실행 환경에 구애받지 않습니다)로 변환한 후 실행합니다. 실행 파일을 따로 생성하지 않고, 인터프리트 단계와 실행 단계가 분리돼있지 않다는 특징이 있습니다.
  • compiler languange: 코드가 실행되기 전 단계인 compile time에 코드 전체를 한번에 머신 코드로 변환한 후 실행합니다. 실행 파일을 생성하고, 컴파일 단계와 실행 단계가 분리돼 있습니다. 미리 컴파일을 하니 일반적으로는 인터프리터 언어에 비해 더 빠릅니다.

대부분의 모던 브라우저들이 사용하는 인터프리터들은 명시적인 컴파일 단계를 거치지는 않지만 복잡한 과정을 거쳐 일부 코드를 컴파일하고 실행합니다. 따라서 요즘은 그 구분이 점점 모호해지고 있다고 합니다.