유데미 JavaScript 완벽 가이드: 초급+고급 마스터 과정
자바스크립트란?
런타임에 컴파일되는 동적 약형 프로그래밍 언어
- dynamic, weakly typed
- interpreted, "on the fly" compiled language(compiled at runtime)
- "hosted language", runs in different environment
브라우저 내에서 페이지의 내용을 직접 변경하기 위해 만들어짐
- to make webpages more dynamic
자바스크립트의 실행
자바스크립트 엔진 크롬(v8) 같은 브라우저 내에 내장되어 있음, 파이어폭스(spidermonkey)
자바스크립트 엔진을 통해 브라우저에서 실행되는 과정(싱글 스레드에서 실행)
1. Parse Code: 엔진에서 코드 분석
2. Compile to Machine Code: 기계어가 더 빠르니까 머신 코드로 컴파일링
3. Execute Machine Code: 머신 코드 실행
동적 vs 약형 언어
Dynamic, interpreted Programming Language
- Not pre-compiled, instead parsed and compiled "on the fly" (e.g. in the browser)
Code evaluated and executed at runtime
- Code can change at runtime (e.g. type of a variable)
컴파일 언어는 개발 중 또는 개발 후에 컴파일되는 반면, 자바스크립트는 전송 중 컴파일이기 때문에 코드가 런타임에 평가되고 실행된다.
코드가 런타임에서 변경될 수 있다.
Weakly Typed Programming Language
- Data types are assumed (e.g. assigned to variables) automatically
- You don't define that some variable has to hold a certain value(e.g. a number)
- Data types are not set in stone but can change
자바스크립트가 데이터 타입을 자동으로 추측해서 할당함
변수가 보유할 데이터 타입을 미리 정의할 필요 없음
데이터 타입을 변경할 수 있음
자바스크립트 실행
Browser-side
- Javascript was invented to create more dynamic websites by executing in the browser
새 페이지를 로드하지 않고도 웹사이트의 내용을 변경할 수 있음
- JavaScript can manipulate the HTML code, CSS, send background Http requests & much more
Javascript를 사용해 백그라운드 Http 요청을 보낼 수 있음
- JavaScript CAN'T access the local filesystem, interact with the operating system etc
보안상의 이유로 로컬 파일 시스템에 엑세스할 수 없음
"Other" (e.g. Server-side)
- Google's JavaScript Engine(V8) was extracted to run JavaScript anywhere(called "Node.js")
구글의 자바스크립트 엔진 V8은 어디서나 Javascript를 실행할 수 있음
- Node.js can be executed on any machine and is therefore often used to build web backends(server-side JavaScript)
백엔드와 웹 서버를 구축하는 데에도 자주 사용됨
- Node.js CAN access the local filesystem, interact with the operating system etc. It CAN'T manipulate HTML or CSS
Node.js는 실행 되고 있는 머신 내의 로컬 파일 시스템(not computer, it's server)으로의 접근과 파일 작성 등의 작업 가능, HTML이나 CSS를 접근할 수 없다.
JavaScript vs Java
Java
- Object-oriented 객체지향적, strongly types 엄격한 타입
- NOT run in the browser 브라우저에서 실행되지 않음
JavaScript
- Flexible, weakly types 유연하고 약형 타입
- Can run in the browser 브라우저에서 실행 가능
Client-side vs Server-side
Client-side(Browser)
- The origin of JavaScript
자바스크립트의 기원
- Different browser vendors provide their own JavaScript execution engines(e.g. V8)
다양한 브라우저에서 자바스크립트 실행 엔진 제공(ex. V8)
- Allows interaction with web page and browser APIs(e.g. get user location)
브라우저에서 웹페이지와 상호 작용 가능
Server-side(NodeJS)
- Why not use JavaScript outside of the browser? Allows for code & knowledge re-usage!
- 서버 측에서는 브라우저에서 엔진을 추출하여 브라우저 외부에서 실행하는게 목적, 자바스크립트 지식을 재사용하되 다른 작업에 자바스크립트 활용
- Extracted V8 engine to run JavaScript anywhere
V8엔진 어디서나 JavaScript(& Node.JS) 실행 가능
- Special non-browser APIs (e.g. to work with file system, incoming Http requests etc.)
기타 API. 파일 시스템으로 작업하거나 들어오는 HTTP 요청 처리 가능