[JavaScript] 모던 JS Deep Dive 2장

ubin·2023년 10월 7일

JavaScript

목록 보기
4/21
post-thumbnail

2.1 자바스크립트의 탄생

  • 1995년 웹 브라우저 시장의 거장 넷스케이프 커뮤니케이션즈에서 개발된 경량 프로그래밍 언어
  • 자바스크립트의 기능은 웹페이지의 보조적인 기능을 수행하는 것
  • 현재 모든 브라우저의 표준 프로그래밍 언어

2.2 자바스크립트의 표준화

  • 1996년 마이크로소프트에서 자바스크립트 파생 버전인 JScript를 인터넷 익스프로러에 탑재
  • 문제는 자바스크립트 & JScript 모두 표준화가 된 것이 아닌, 적당히 호환되어 자사 브라우저에서만 동작하는 기능들이 생겨났음 → 브라우저에 따라 웹페이지가 다르게 동작하는 크로스 브라우징 이슈 발생 → 모든 브라우저에서 호환되는 웹페이지 개발 매우 어려움
  • 1997년 표준화된 자바스크립트 초판이 발행됨
  • 2009년 ES5는 HTML과 함께 출현한 표준 사양
  • 2015년 ES6는 범용 프로그래밍 언어로 갖춰야 할 기능들이 대거 추가됨

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

초창기의 자바스크립트는 웹페이지의 ‘보조적인’ 기능을 수행하는 역할이었다.

초창기 로직

웹 서버에서 실행 → 서버로부터 받은 HTML&CSS 렌더링

Ajax?

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

  • Ajax 사용 전: 태그로 시작해서 끝나는 완전한 html 코드를 서버로부터 전송받아 웹페이지 전체를 렌더링
    • 이렇게 하면, 화면이 전환될 때마다 새로 받아와서 랜더링을 해줘야 함
    • 재랜더링이 불필요한 부분까지 재랜더링 → 불필요한 통신 발생 → 성능 안좋음
  • Ajax 사용 후: 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 렌더링하는 방식
    • 빠른 성능과 부드러운 화면 전환 가능

JQuery?

자바스크립트의 라이브러리 중 하나로, DOM을 보다 쉽게 제어할 수 있게 도와줌

  • 자바스크립트보다 배우기 쉽고 직관적임
  • 크로스 브라우징 이슈도 해결됨

V8 자바스크립트 엔진?

웹 브라우저를 만드는데 기반을 제공하는 구글 오픈 소스 자바스크립트 엔진으로 자바스크립트 코드를 받아 컴파일하고 실행하는 C++ 프로그램

  • 자바스크립트 엔진은 유저와 상호작용을 위해서 인터프리터 방식을 사용해왔지만, 코드가 길어질수록 속도가 느려진다는 단점이 있음
  • 속도 향상을 위해 자바스크립트 코드를 더 효율적인 머신 코드로 변역함
    • 머신 코드로 작성되어야만 CPU가 이해하고 처리할 수 있음
  • JIT(Just In Time) Compiler = 동적 컴파일(인터프리터) + 정적 컴파일(컴파일러) → 바이트 코드 생성
    • 바이트 코드 → 머신 코드 → 캐싱 ⇒ 같은 함수 머신 코드 중복 생성 방지

Node.js?

자바스크립트 엔진에서만 동작하는 한정적인 환경 이외에도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 실행 환경

  • 보통 서버 사이드 애플리케이션 개발에 사용됨
  • node.js 환경에서 동작하는 app는 자바스크립트로 개발됨
  • 비동기 I/O를 지원하고 단일 스레드 이벤트 루프 기반으로 동작함 ⇒ Single Page Application 개발에 적합
🧐 자바스크립트는 **크로스 플랫폼**을 위한 가장 중요한 언어로 주목받고 있다.

SPA 프레임워크

  • 웹 애플리케이션의 개발 규모와 복잡도가 상승할수록, 이전 개발 방식으론 수행할 수 없게되었다.
  • 더불어 생성된 다양한 라이브러리도 개발엔 많음 도움이 되었지만, 변경에 유연하면서 확장하기 쉬운 app 아키텍쳐의 구축을 어렵게 했음.
  • Angular, React, Vue.js와 같은 프레임워크가 등장됨

자바스크립트와 ECMAScript

자바스크립트는 일반적으로 ECMAScript를 아우르는 개념

  • 각 브라우저는 ECMAScript 사양을 준수해서 브라우저에 내장되는 자바스크립트 엔지을 구현

자바스크립트의 특징

  • 웹 브라우저에서 동작하는 유일한 프로그래밍 언어
  • 개발자가 별도의 컴파일을 수행하지 않는 인터프리터 언어
  • 모던 자바스크립트 엔진(V8, ..)은 인터프리터 & 컴파일러의 장점을 결합해 느린 처리 속도를 해결함
    • 모던 브라우저에서 사용되는 인터프리터는 컴파일러처럼 명시적인 컴파일 단계를 거치지 않지만, 복잡한 과정을 거치며 일부 소스코드를 컴파일하고 실행함
    • 하지만 런타임에 컴파일되며 실행 파일이 생성되지 않고 인터프리터의 도움 없이 실행할 수 없기 때문에 컴파일러 언어는 아님
🧐 자바스크립트는 명령형, 함수형 그리고 클래스 기반 객체지향 언어보다 강력한 프로토타입 기반 객체지향 프로그래밍을 지원하는 **멀티 패러다임 프로그래밍 언어**

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

profile
프론트엔드 개발자가 되고싶은 코린이⌨️

0개의 댓글