약간의 사담...
우리 지역은 교통수단이 불편해서 도서관까지 가려면 큰 맘을 먹고 가야한다고 생각했는데, 생각보다 우리 집 앞에 오는 버스가 도서관과 가까운 정류장에 가는 것을 알게 됐다. 마침 그 동네에 볼 일이 종종 생길 것 같아서 이 참에 도서 대출증을 만들었다. 그리고 신간 코너를 둘러보는데 모던 자바스크립트 Deep Dive가 있길래 냉큼 집어왔다! 가격 때문에 고민하고 있었는데 이렇게 공짜로 볼 수 있다면 봐야하지 않겠나...! DeepDive 태그에는 모던 자바스크립트 Deep Dive를 읽으면서 알고 있는데 다시 한번 정리가 필요하거나, 새로 얻은 인사이트를 정리해 올릴 예정이다.
이전엔 웹 페이지를 서버에서 그려서 HTML과 CSS파일을 내려보내주는 방식이었다. 이는 일부분만 페이지를 변경하고 싶어도 서버에서 파일을 받아 처음부터 렌더링을 해줘야 했다.
하지만 Ajax가 나타난 후 서버와 브라우저간의 비동기 통신이 가능하게 되면서 서버로부터 필요한 데이터만 받아 렌더링이 가능해지게 되었다.
기존의 자바스크립트보다 DOM을 더 쉽게 제어할 수 있게 되었다.
차츰 웹이 발전함에 따라 크고 복잡한 규모의 웹이 생겨났다. 그리고 이런 웹은 더 빠르게 동작하는 엔진을 필요로 하게 되었다. 자바스크립트의 V8 엔진이 대두되며 더 빠른 코드의 처리가 가능해졌고, 웹 서버에서 수행하던 로직이 클라이언트로 대거 이동하게 되었다.
V8엔진으로 빌드된 자바스크립트의 런타임 환경이다. 비동기 입출력을 지원하고, 단일 스레드와 이벤트 루프 기반으로 동작한다.
Node JS의 등장으로 원래는 브라우저에서만 동작하던 자바스크립트가 프론트엔드와 백엔드 둘 다를 구현할 수 있게 되었고 하나의 범용 프로그래밍 언어가 되었다.
데스크탑 어플과 비슷한 사용자 경험을 제공하고자 하는 요구에 따라 웹의 규모와 복잡도가 증가했다. 이에 따라 많은 패턴이 생겨났으며 프로젝트를 쉽게 관리할 수 있는 라이브러리의 필요성이 대두되었다.
이에 따라 CBD(Component Based Development)기반의 SPA(Single Page Application)이 등장하게 되었다.
브라우저와 Node JS가 있다. 브라우저와 Node JS는 실행환경이 다르기 때문에 API 사용시 주의해야한다.
브라우저는 화면에 HTML과 CSS를 렌더링하는 목적이기 때문에 Node JS가 기본으로 지원하는 File 입출력 시스템을 제공하지 않는다.
반대로 Node JS는 브라우저 외부에서 자바스크립트 실행환경을 제공해주는 역할이기 대문에 브라우저가 지원하는 DOM API를 제공하지 않는다.
프로젝트 규모가 커짐에 따라 React, Vue, Babel, Webpack 등을 도입해야할 때가 있다. 이때 Node JS와 npm이 필요하다.
npm은 자바스크립트의 패키미 매니저이며, Node JS에서 사용할 수 있는 패키지를 모아둔 저장소 역할과 더불어 패키지의 설치 & 관리를 위한 CLI를 제공한다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 공간을 식별하기 위해 붙이는 이름을 의미한다.
변수에 값을 저장하는 것을 의미한다.
변수의 이름 혹은 어떤 값을 구별해서 식별할 수 있는 고유 이름을 의미한다.
자바스크립트 엔진은 코드를 실행하기 전에 코드 전체를 읽어서 코듸 내부에 있는 모든 선언문을 찾아서 식별자를 저장한다.
이에 따라 코드 실행 전이지만 모든 변수의 정보를 다 알고 있게 되고, 변수 선언문이 마치 코드의 선두로 끌어올려진 것처럼 동작한다.
변수 선언은 순차적으로 실행되는 런타임 이전에 먼저 실행되지만 값의 할당은 런타임 시점에 실행된다.
표현식이 평가되어 생성된 결과를 의미한다.
사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 의미한다.
표현식은 값으로 평가될 수 있는 문이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 값을 참조한다.
var socre = 100; // 1
var score = 50 + 50; // 2
score; // 3 (값을 생성하진 않지만 위 코드 뒤 score는 값을 갖게 되고 표현하게 되므로 표현식이다.)
프로그램을 실행하는 단위이자 최소 실행 단위이다. 예시로 선언문, 할당문, 조건문, 반복문 등이 있다.
문법적인 의미를 가지며 더이상 나눌 수 없는 코드의 기본요소이다.
var sum = 1 + 2;
위 구문에서 var
sum
=
1
+
2
;
는 각각 모두 토큰이며 이 모든 것을 합친 단위가 문이다.
표현식은 문의 일부일 수도 있고 그 자체로 문일 수도 있다.
var x; // 표현식 X, 문 O => 값을 표현하지 않는다.
x = 1 + 2; // 표현식 O, 문 O => 값을 갖고 있다.
var foo = var x; // 문은 값처럼 할당할 수 없다.
var foo = x = 3; // 표현식인 문은 값처럼 할당할 수 있다.