모던 자바스크립트 Deep Dive_자바스크립트란

모던 자바스크립트 Deep Dive_자바스크립트란

·

4 min read

02_자바스크립트란 ❓

2.1 자바스크립트의 탄생

  • 1995년, 넷스케이스 커뮤니케이션즈는 웹페이지의 보조적인 기능을 수행하기 위해
    ➡️ 브라우저에서 동작하는 경량 프로그래밍 언어를 도입하기를 결정
    ➡️ 그래서 탄생한 것이, 브렌던 아이크가 개발한 자바스크립트

  • 1996년 3월, 모카(Mocha) 로 명명
    ➡️ 넷스케이프 커뮤니케이션즈의 웹 브라우저인 넷스케이프 내비게이터2 에 탑재
    ➡️ 그 해 9월, 라이브스크립트로 이름이 변경
    ➡️ 그 해 12월, 자바스크립트라는 이름으로 최종 명명

2.2 자바스크립트의 표준화

  • 1996년 8월, 마이크로소프트는 자바스크립트의 파생 버전인 JScript 를 인터넷 익스플로어 3.0 에 탑재했다.

  • 그러나 문제는 JScript 와 자바스크립트가 표준화되지 못하고 적당히 호환되었다는 것이다.

  • 즉, 넷스케이프 커뮤니케이션즈와 마이크로소프트는 자사 브라우저의 시장 점유율을 높이기 위해 자사 브라우저에서만 동작하는 기능을 경쟁적으로 추가하기 시작했다.

결론적으로 브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 크로스 브라우징 이슈가 발생하기 시작했다.

  • 1996년 11월, 넷스케이프 커뮤니케이션즈는 컴퓨터 시스템의 표준을 관리하는 비영리 표준화 기구인 ECMA 인터내셔널에 자바스크립트의 표준화 요청

  • 1997년 7월, ECMA-262라 불리는 표준화된 자바스크립트 초판 사양이 완성되었고, 상표권 문제로 자바스크립트는 ECMAScript로 명명

  • 1999년, ECMAScript 3(ES3) 가 공개.

  • 2009년, ECMAScript 5(ES5) 출시. HTML5와 함께 출현한 표준 사양

  • 2015년, ECMAScript 6(ECMAScript2015, ES6) 공개.
    ➡️ let/const 키워드, 화살표 함수, 클래스, 모듈 등과 같이 범용 프로그래밍 언어로서 갖춰야 할 기능들이 대거 도입하는 큰 변화가 있었다.

  • ES6 이후, 버전업은 비교적 작은 기능을 추가하는 수준으로 매년 공개될 것으로 예고 되었다.

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

초창기 자바스크립트는 웹 페이지의 보조적인 기능을 수행하기 위해 한정적인 용도로 사용 되었다. 이 시기에는 대부분의 로직은 웹 서버에서 실행 되었고, 브라우저는 서버로부터 전달받은 HTML 과 CSS 를 단순히 렌더링 하는 수준 이었다.

렌더링(Rendering)
: HTML, CSS, 자바스크립트로 작성된 문서를 해석해서 브라우저에 시각적으로 출력하는 것

2.3.1 Ajax

  • 1999년, Ajax가 XMLHttpRequest라는 이름으로 등장

Ajax
: 자바스크립트를 이용해 서버와 브라우저가 비동기(asynchronous) 방식으로 데이터를 교환할 수 있는 통신 기능

Ajax 등장 이전

  • 이전의 웹페이지는 html 태그로 시작해서 html 태그로 끝나는 완전한 HTML 코드를 서버로부터 전송받아 웹 페이지 전체를 렌더링 하는 방식으로 동작했다.

  • 따라서 변경할 필요가 없는 부분까지 서버로부터 다시 전송받기 때문에 불필요한 데이터 통신이 발생하고, 처음부터 다시 렌더링해야 하기 때문에 성능 면에서 불리했다.

Ajax 등장 이후

  • 웹 페이지에서 변경할 필요가 없는 부분은 다시 렌더링하지 않고, 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 렌더링 하는 방식이 가능해졌다.

  • 이로써 웹 브라우저에서도 데스크탑 애플리케이션과 유사한 빠른 성능과 부드러운 화면 전환이 가능해졌다.

  • 대표적인 계기가 2005년 구글이 발표한 구글 맵스

2.3.2 jQuery

  • 2006년 jQuery 의 등장으로 다소 번거롭고 논란이 있던 DOM 을 더욱 쉽게 제어할 수 있게 되었고 크로스 브라우징 이슈도 어느 정도 해결 되었다.

2.3.3 V8 자바스크립트 엔진

  • 2008년, 구글의 V8 자바스크립트 엔진 등장
    ➡️ 구글 맵스를 통해 웹 애플리케이션 프로그래밍 언어로서의 가능성이 확인된 자바스크립트로 웹 애플리케이션을 구축하려는 시도가 늘면서 더욱 빠르게 동작하는 엔진의 필요성 대두.
    ➡️ V8 엔진의 등장으로 데스크탑 애플리케이션과 유사한 사용자 경험(UX) 을 제공할 수 있는 웹 애플리케이션 프로그래밍 언어로 정착

  • V8 자바스크립트 엔진으로 촉발된 자바스크립트의 발전으로 과거 웹 서버에서 수행되던 로직들이 대거 클라이언트(브라우저)로 이동, 프론트엔드 영역이 주목받는 계기로 작용함

2.3.4 Node.js

  • 2009년 라이언 달이 발표한 Node.js 는 구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경이다.

  • Node.js 는 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작 할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경이다.

  • Node.js는 비동기 I/O를 지원, 단일 스레드(single thread) 이벤트 루프 기반으로 동작, 요청 처리 성능이 우수하다.

2.3.5 SPA 프레임워크

  • 모던 웹 애플리케이션은 데스크탑 애플리케이션과 비교해도 손색없는 성능 과 사용자 경험 을 제공하는 것이 필수가 되었고, 개발 규모와 복잡도도 상승했다.

  • 따라서 이전 개발 방식으로는 복잡해진 개발 과정을 수행하기 어려워졌고, 많은 패턴과 라이브러리가 출현 했다.

  • 그 덕분에 개발에 많은 도움을 주었지만 변경에 유연하면서 확장하기 쉬운 애플리케이션의 구축을 어렵게 했고, 필연적으로 프레임워크가 등장하게 되었다.

현재 자바스크립트는..

  • 크로스 플랫폼을 위한 가장 중요한 언어로 주목받고 있다.크로스 플랫폼(영어: cross-platform) 또는 멀티 플랫폼(영어: multi-platform)은 컴퓨터 프로그램, 운영 체제, 컴퓨터 언어, 프로그래밍 언어, 컴퓨터 소프트웨어 등이 여러 종류의 컴퓨터 플랫폼에서 동작할 수 있다는 것을 뜻하는 용어이다.

2.4 자바스크립트와 ECMAScript

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

  • 각 브라우저 제조사는 ECMAScript 사양을 준수해서 브라우저에 내장되는 자바스크립트 엔진을 구현자바스크립트는 일반적으로 프로그래밍 언어로서 기본 뼈대(core)를 이루는 ECMAScript와 브라우저가 별도로 지원하는 클라이언트 사이드 Web API, DOM, BOM, Canvas, XMLHttpRequest, Fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web worker 등을 아우르는 개념이다.

요약

  • ECMAScript 는 JavaScript와 같은 스크립트 언어의 표준을 말한다.

  • JavaScript는 ECMAScript를 기반으로 하며 ECMAScript언어 중 가장 인기 있는 언어로 알려져 있다.

  • ECMAScript는 스크립팅 언어를 어떻게 만들어야 하는지를 설명하는 일종의 설명서 라고 생각하면 되고, JavaScript는 ECMAScript를 사양을 바탕으로 만들어진 언어 인 것이다.

2.5 자바스크립트의 특징

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

  • 자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리어 언어 다.

  • 대부분의 모던 자바스크립트 엔진(Chrome의 V8, FireFox의 Spidermonkey, Safari의 JavaScriptCore, Microsoft Edge의 Chakra 등)은

    • 인터프리어와 컴파일러의 장점을 결합
      ➡️ 비교적 처리 속도가 느린 인터프리어의 단점을 해결 했다.
  • 인터프리어는 소스코드를 즉시 실행

  • 컴파일러는 빠르게 동작하는 머신 코드를 생성하고 최적화한다.

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