[모던 자바스크립트 딥다이브] 2장. 자바스크립트란?

Dora_ bang·2024년 7월 29일
post-thumbnail

2.1 자바스크립트의 탄생


자바스크립트는 브라우저에서 동작하는 경량 프로그래밍 언어가 필요해 탄생하게 되었다.

2.2 자바스크립트의 표준화


브라우저 사에서 자사 브라우저의 시장 점유율을 높이기 위해 자바스크립트 파생 버전이 생겨났으나 브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 크로스 브라우징 이슈가 생겨났다. 그에 따라 자바스크립트의 파편화를 방지하고 모든 브라우저에서 정상적으로 실행되는 자바스크립트를 ECMA에 표준화를 요청하게 된다.

2.3 자바스크립트 성장의 역사


2.3.1 Ajax
1999년, 자바스크립트를 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능인 AjaxXMLHttpRequest라는 이름으로 등장했다.

이전의 웹페이지는 완전한 HTML 코드를 서버로부터 전송 받아 렌더링하는 방식(Server Side Rendering)으로 동작했다. 이러한 방식은 바뀌지 않는 불필요한 부분도 새롭게 전송 받아야했으므로 성능 면에서 불리하다.

Ajax의 등장으로 인해 변경이 필요한 부분만 서버에서 전송 받아 한정적으로 렌더링하는 방식이 가능해졌다. 이로 인해 웹 브라우저에서도 빠른 성능과 부드러운 화면 전환을 보여줄 수 있게 되었다. 웹 애플리케이션 프로그래밍 언어로서 자바스크립트의 기능성을 확인하는 계기를 마련했다.

2.3.2 jQuery
2006년, jQuery의 등장으로 DOM을 쉽게 제어할 수 있고 크로스 브라우징 이슈가 어느 정도 해결되었다. 자바스크립트보다 러닝커브가 낮고 직관적인 jQuery를 더 선호하는 개발자가 많아지기도 하였다.

2.3.3 V8 자바스크립트 엔진
웹 애플리케이션 프로그래핑 언어로서의 가능성이 확인된 자바스크립트에 더욱 빠르게 동작하는 엔진이 필요성이 대두되었다. 구글에서 제공하는 V8 자바스크립트 엔진은 이러한 요구에 부합하는 빠른 성능을 보여주어 데스크탑 애플리케이션과 유사한 UX를 제공할 수 있게 되었다.

V8 자바스크립트 엔진을 통해 과거 웹에서 수행되던 로직들이 대거 클라이언트(브라우저)로 이동했고, 그 결과 프론트엔드 영역이 주목받는 계기로 작용했다.

2.3.4 Node.js
2009년 발표한 Node.js는 구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경이다. Node.js는 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작할 수 있도록 독립시킨 자바스크립트 실행 환경이다.

Node.js로 인해 독립할 수 있게된 자바스크립트는 브라우저를 벗어나 프론트 영역은 물론 백엔드 영역까지 아우르는 웹 프로그래밍 언어의 표준으로 자리잡을 수 있게 되었다. 이제 자바스크립트는 크로스 플랫폼을 위한 가장 중요한 언어로 주목받고 있다. 웹은 물론 모바일 하이브리드 앱, 서버 사이드, 데스크탑, 머신러닝, 로보틱스 환경을 위한 프로그래밍 언어로서 세계에서 가장 인기있는 프로그래밍 언어다.

2.3.5 SPA 프레임워크
이전의 개발 방식으로는 복잡해진 개발 과정을 수행할 수 없게 되어 많은 패턴과 라이브러리가 출현했다. 그로 인해 변경에 유연하면서 확장하기 쉬운 애플리케이션 아키텍처의 구축을 어려워져 프레임워크가 등장하게 되었다.

CBD(Component Based Development) 방법론을 기반으로 하는 SPA(Single Page Application) 프레임워크가 대중화되면서 React, Vue.js, Svelte, Angular 등 다양한 SPA 프레임워크·라이브러리가 많은 사용층을 확보했다.

2.4 자바스크립트와 ECMAScript


ECMAScript는 자바스크립트의 표준 사양인 ECMA-262를 말하며, 프로그래밍 언어의 값, 타입, 객체와 프로퍼티, 함수, 표준 빌트인 객체 등 핵심 문법을 규정한다.

클라이언트 사이드 Web API는 ECMAScript와는 별도로 월드 와이드 웹 콘소시엄에서 별도의 사양으로 관리하고 있다.

2.5 자바스크립트의 특징


자바스크립트는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이다. 기존 프로그래밍 언어에서 많은 영향을 받았다. 기본 문법은 C, 자바와 유사하고 셀프에서는 프로토타입 기반 상속, 스키마에서는 일급 함수의 개념을 차용했다.

자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어다. 대부분의 모던 자바스크립트 엔진은 인터프리터와 컴파일러의 장점을 결합해 비교적 처리 속도가 느린 인터프리터의 단점을 해결했다. 인터프리터는 소스코드를 즉시 실행하고 컴파일러는 빠르게 동작하는 머신 코드를 생성하고 최적화한다. 이를 통해 컴파일 단계에서 추가적인 시간이 필요함에도 더욱 빠르게 코드를 실행할 수 있다.


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

자바스크립트는 일반적으로 인터프리터 언어로 분류함

컴파일러 언어인터프리터 언어
코드 실행 전 컴파일 타임에서 소스코드 전체를 한번에 기계어로 변환 후 실행코드가 실행되는 런타임에 문 단위로 한 줄씩 중간코드인 바이트코드로 변환 후 실행
실행 파일 생성실행 파일 생성 X
컴퍼일 단계와 실행 단계 분리인터프리트 단계와 실행 단계 분리 X,
한 줄씩 바이트코드로 변환 후 즉시 실행
실행 전 컴파일은 단 한번 수행코드 실행시 매번 인터프리트 과정 반복 수행
컴파일과 실행 단계 분리로 인해 코드 실행 속도가 빠름인터프리트 단계와 실행 단계가 분리되어 있지 않고 반복 수행되므로 비교적 코드 실행 속도가 느림

그러나 대부분의 모던 브라우저에서 사용되는 인터프리터는 명시적인 컴파일 단계를 거치지 않지만 일부 소스코드를 컴파일하고 실행함

이를 통해 인터프리터 언어의 장점인 동적 기능 지원을 살리면서 실행 속도가 느리다는 단점을 극복함


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

2.6 ES6 브라우저 지원 현황


대부분의 모던 브라우저는 ES6를 지원하지만 100% 지원하고 있지는 않다. ES6 지원 현황은 해당 웹사이트에서 확인할 수 있다.

0개의 댓글