
01 프로그래밍
1.1 프로그래밍이란
- 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션
- 프로그래밍을 잘 하기 위해서는 문제 해결 능력이 필요함
- 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명해야함. => 코드
- 컴퓨팅 사고(Coputational Thiking) 로 문제를 바라봐야함.
1.2 프로그래밍 언어
- 자연어 : 사람이 이해할 수 있는 언어 ex) 밥먹어
- 기계어 : 컴퓨터가 이해할 수 있는 언어 ex) 010111010...
컴퓨터에게 실행을 요구할 땐 기계어로 명령을 전달해야함. 하지만 사람이 기계어를 이해하고 구사하기 매우 어려움.
따라서 사람이 이해할 수 있는 프로그래밍 언어(Programming Language)를 사용해 프로그램을 작성한 뒤,
컴퓨터가 이해할 수 있는 기계어로 번역하는 과정을 거쳐 명령을 전달하게된다.
그렇게 번역해주는 번역기를 컴파일러(Compiler) 혹은 인터프리터(Interpreter)라고 함.

즉, 프로그래밍은 프로그래밍 언어를 사용해 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션임.
프로그래밍 언어는
- 구문 Syntax
- 의미 Semantics
의 조합으로 표현된다.
1.3 구문과 의미
변수의 이름에 지을 때, 의미적으로 옳은 이름을 지어야함.
let number = "안녕";
console.log(number * number); // NaN
위와 같이 문법적으로 옳지만, number에 문자열이 저장되는 것은 의미론적으로 옳지 않다.
프로그래밍의 목적은 문제 해결이다.
문제 해결 능력으로 만들어낸 해결 방안은 프로그래밍 언어의 문법을 사용해 표현되고, 요구사항이 실현되어야 의미가 있다.
- 프로그래밍은 요구 사항을 분석해, 적절한 자료구조와 함수의 집합으로 변환한 후, 그 흐름을 제어하는 것
02 자바스크립트란
2.1 자바스크립트의 탄생
1995년
넷스케이프 커뮤니케이션즈는
웹페이지의 보조적인 기능을 수행하기 위해 브라우저에서 동작하는 경량 프로그래밍 언어를 도입
그것이 자바스크립트이다.
2.2 자바스크립트의 표준화
1996년
마이크로소프트가 자바스크립트 파생버전 "JScript"를 인터넷 익스플로어3.0에 탑재함
- 문제는 JScript와 자바스크립트가 표준화 되지 못하고 적당히 호환됨.
이로 인해 크로스 브라우징 이슈가 발생하고, 모든 브라우저에서 정상적으로 동작하는 웹페이지를 개발하기 무척 어려워짐
- 1997년 자바스크립트 표준안 ECMAScript 탄생!

- ES5 : HTML5와 함께 출현한 표준 사항
- ES6 (ECMAScript 2015) : let/ const, 화살표 함수, 클래스, 모듈 등 범용 프로그램이 언어로 갖춰야 할 기능들을 대거 도입함.
2.3 자바스크립트 성장의 역사
2.3.0 초창기
처음엔 거의 웹페이지의 보조적인 기능을 수행함. 그 당시 대부분의 로직이 웹서버에서 실행되었음(SSR). 브라우저는 서버로부터 전달받은 HTML과 CSS를 단순히 *렌더링함.
*렌더링 : HTML, CSS, 자바스크립트로 작성된 문서를 해석해 브라우저에 시각적으로 출력하는 것
2.3.1 AJAX
1999년, 자바스크립트를 이용해 서버와 브라우저가 비동기방식으로 데이터를 교환할 수 있는 통신 기능 등장!
Ajax(Asynchronous JavaScript and XML)
이전에는 SSR으로, 완전한 HTML코드를 서버로 부터 전송 받아 웹 페이지 전체를 렌더링했음.
따라서 화면이 전환되면 서버로부터 새로운 HTML을 전송받아 웹페이지 전체를 처음부터 다시 렌더링해야함.
단점
- 변경할 필요가 없는 부분 까지 포함된 HTML코드를 서버로부터 다시 전송받아야함. 성능 떨어짐.
- 그로 인해 화면이 순간적으로 깜박이는 현상 발생
Ajax의 등장으로 SSR의 단점 해결! => SPA로 나아감...
- 웹 페이지에서 변경할 필요 없는 부분은 다시 렌더링 X
- 서버로 부터 필요한 데이터만 전송받아 렌더링.
- 부드러운 화면 전환
2.3.2 JQuery
JavaScript의 까다로운 DOM(Document Object Model)를 쉽게 제어할 수 있는 jQuery탄생!
하지만 현재는 바닐라JS에 비해 무겁고 느리기 때문에 잘 사용하지 않는 추세다.

2.3.3 V8 자바스크립트 엔진
2008년 구글의 V8 자바스크립트 엔진 등장.
자바스크립트는 데스크톱 애플리케이션과 유사한 사용자 경험을 제공할 수 있는 웹 애플리케이션 프로그램 언어로 정착하게됨.
웹 서버에서 수행되던 로직이 클라이언트로 대거 이동함.
자바스크립트 엔진(V8, SpiderMonkey, ...)은 인터프리터와 컴파일러의 장점을 결합해 비교적 처리가 느린 인터프리터의 단점을 해결함!
그에 대한 자세한 설명은 2.5에
2.3.4 Node.js
2009년 구글의 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경 Node.js 등장.
Node.js는...
- 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를
- 브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨, 자바스크립트 실행환경!
- 즉 브라우저를 대신할 실행 환경임.
SSR 애플리케이션 개발에 주로 사용됨.
API (모듈, 파일 시스템, HTTP) 제공
Node.js의 특징
- 자바스크립트 엔진을 기반으로 하여, Node.js 환경에서 동작하는 애플리케이션은 자바스크립트를 사용해 개발함. 즉, 프런트엔드와 백엔드 영역에서 둘다 자바스크립트를 사용할 수 있다는 장점
- 비동기 I/O를 지원하며 단일 스레드 이벤트 루프 기반으로 동작해서 요청 처리 성능이 좋다.
- 크로스 플랫폼을 위한 언어
2.3.5 SPA 프레임워크
개발 규모와 복잡도가 상승함에 따라, 변경에 유연하며 확장하기 쉬운 애플리케이션 아키텍처 구축을 도와주는 프레임워크가 등장.
Angluer, React, Vue.js, Svelte ...
2.4 자바 스크립트와 ECMAScript
- ECMASript === ECMA-262
- 자바스크립트의 표준 사항.
- 자바스크립트
- 프로그램이 언어로 기본 뼈대를 이루는 ECMASCript와
- 브라우저가 별도로 지원하는 클라이언트 사이드 Web API (DOM, BOM, Canvas, ...)

2.5 자바스크립트의 특징
- HTML, CSS와 웹을 구성하는 요소
- 웹 브라우저에서 동작하는 유일한 프로그래밍 언어
- 인터프리터 언어 (interpreter language)
- 개발자가 별도의 컴파일러 작업을 수행하지 않음
- 모던 자바스크립트 엔진(크롬 V8, 파이어폭스 SpiderMonkey...)는 인터프리터장점 + 컴파일러 장점, 처리 속도가 빨라짐.
모던 브라우저에서 사용되는 인터프리터는 전통적인 컴파일러 처럼 명시적인 컴파일 단계는 거치진 않지만, 복잡한 과정을 거치며 일부 소스를 컴파일하고 실행함. 그래서 보통 인터프리터 보단 속도가 빠르다.
인터프리터 언어 VS 컴파일러 언어

컴파일러 언어 | 인터프리터 언어 |
코드 실행 전, 컴파일 시간에 소스코드 전체를 한번에 기계어로 변환후 실행함. | 런타임(코드 실행 단계)때 문 단위로 한 줄씩 중간 코드(intermediate code)인 바이트코드로 변환 후 실행 |
실행 파일 생성 | 실행 파일 생성 X |
컴파일, 실행 단계가 분리되어있음 | 인터프리터 단계와 실행 단계 분리 X 인터프리터는 한 줄씩 바이트 코드로 변환하고 즉시 실행 |
컴파일은 딱 한번만 수행됨 | 코드 실행 될 때 마다, 인터프리터 과정 반복 수행 |
실행시엔 실행만 하면 되므로 코드 실행 속도가 빠름 | 인터프리트 단계랑 실행 단계가 분리되어있지 않아 반복 수행하므로 속도가 느림 |
'JavaScript > JavaScript 예복습' 카테고리의 다른 글
JavaScript 예습 | 16~18장 (0) | 2021.09.14 |
---|---|
JavaScript 예습 | [deep dive] 13 ~ 15장 (0) | 2021.09.12 |
JavaScript 예습 | [deep dive] 10 ~ 12장 (0) | 2021.09.09 |
JavaScript 예습 | [deep dive] 6장~9장 (0) | 2021.09.07 |
JavaScript 예습 | [Deep Dive] 04장 ~ 05장 (0) | 2021.09.06 |