# 02 자바스크립트란?

## 2.1 자바스크립트의 탄생

1995년 약 90%의 웹 브라우저 시장을 점유하던 넷스케이프 커뮤니케이션즈는 웹페이지의 보조직인 기능을 수행하기 위해 브라우저에서 동작하는 경량 프로그래밍 언어를 도입하기로 결정했으며, 그래서 탄생한 것이 브렌던 아이크가 개발한 자바스크립트다.

## 2.2 자바스크립트의 표준화

자바스크립트가 탄생하고 얼마 뒤, 파생버전인 Jscript가 출시되었는데 Jscript와 JavaScript가 표준화되지 못하고 적당히 호환되는 문제가 발생했다. 이에 크로스 브라우징 이슈가 발생하자, 비영리 표준화 기구인 ECMA 인터네셔널에 자바스크립트 표준화를 요청했다. 그 결과로 1997년 **ECMA-262**라 불리는 표준화된 자바스크립트 초판이 출시되었으며 **ECMAScript**로 불리게 되었다.

## 2.3 자바스크립트의 성장의 역사&#x20;

초창기 자바스크립트는 웹페이지 보조적인 기능을 수행하기 위해 한정적인 용도로 사용되었다. 하지만 1999년 자바스크립트를 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능인 **\[Ajax]Asynchronous JavaScript and XML**가 **XMLHttpRequest**라는 이름으로 등장했다.

Ajax의 등장으로 화면 일부 변경시 전체 화면을 다시 전송받았던 이전과 다르게 변경되는 부분만 한정적으로 렌더링 하는 방식이 가능해졌으며 웹 브라우저에서도 데스크톱 애플리케이션과 유사한 빠른 성능과 부드러운 화면 전환이 가능해졌다.

### 2.3.2 JQuery

### 2.3.3 V8 자바스크립트 엔진

2008년 구글의 V8 자바크스립트 엔진의 등장으로 자바스크립트의 동작이 더욱 빨라지게 되었고 이로 인해 과거 웹 서버에서 수행되던 로직들이 대거 클라이언트(브라우저)로 이동했다.

### 2.3.4 Node.js

Node.js는 2009년 발표된 구글의 V8 자바크스립트 엔진으로 빌드된 자바스크립트 런타임 환경이다. Node.js는 브라우저의 자바스크립트 엔진에서만 작동하던 자바스크립트를 브라우저 이외의 환경에서 동작할 수 있도록 JS 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경이다. Node.js의 등장으로 JS는 브라우저를 벗어나 서버 사이드 애플리케이션 개발에서도 사용할 수 있는 범용 프로그래밍 언어가 되었다.

### 2.3.5 \[SPA]Single Page Application 프레임워크

복잡한 개발환경을 수행하기 위해서 변경에 유연하면서 확장하기 쉬운 애플리케이션 아키텍쳐 구축을 위해서 프레임워크가 등장하게 되었다. \[CBD 방법론]Component Based Development을 기반으로 하는 SPA가 대중화 되면서 Angler, React, Vue.js, Svelte 등 다양한 SPA 프레임워크, 라이브러리가 출시되었다.

## 2.4 자바스크립트와 ECMAScript

## 2.5 자바스크립트의 특징

자바스크립트는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 **웹 브라우저에서 동작하는 유일한 프로그래밍 언어**다.&#x20;

자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 \[**인터프리터 언어]**&#xB2E4;.&#x20;

**\[컴파일 언어]**&#xB294; 컴파일 단계와 실행 단계가 분리되어 있으며 실행 이전에 명시적인 컴파일 단계를 단 한 번 수행한다. 컴파일과 실행 단계가 분리되어 있으므로 코드 실행 속도가 빠르다.&#x20;

**\[인터프리터 언어]**&#xB294; 인터프리트 단계와 실행 단계가 분리되어 있지 않고 한 줄씩 바이트 코드로 변환하고 즉시 실행한다. 코드가 실행될 때마다 인터프리트 과정이 반복되므로 코드 실행 속도가 비교적 느리다.&#x20;

하지만 대부분의 모던 브라우저에서 사용하는 인터프리터는 명시적인 컴파일 단계는 없지만 복잡한 과정을 거치면서 일부 소스코드를 컴파일하고 실행한다. 이를 통해 동적 기능 지원 장점을 살리면서 실행속도가 느리다는 단점을 극복한다.

자바스크립트는 **명령형**, **함수형**, **프로토타입 기반 객체지향 프로그래밍**을 지원하는 **멀티 패러다임 프로그래밍 언어**다.
