javascript 공부 1주차

sdtana·2021년 3월 13일
0
post-thumbnail

목표

자바스크립트 파일을 자바스크립트 엔진으로 실행하는 방법 이해하기.

학습할 것

  • JavaScript Engine이란 무엇인가
  • JavaScript의 동작 원리
  • 실행하는 방법
  • 바이트 코드란 무엇인가
  • JIT 컴파일러란 무엇이면 어떻게 동작하는지
  • 자바스크립트 엔진의 구성 요소
  • 자바스크립트 엔진들의 차이

JavaScript Engine이란 무엇인가

JavaScript engine은 JavsScript 코드를 bytecode로 번역하는 프로그램이다. JavaScript 자체는 interpreter 언어이나 실행 속도가 느리다는 단점이 있어 JavaScript engine이 주로 사용되거나 복잡한 코드를 bytecode로 컴파일하여 실행 속도를 향상시킨다.

JavaScript의 동작 원리

JavaScript는 interpreter 언어이다.
interpreter 언어는 런타임 도중 코드를 문 단위로 한 줄씩 Bytecode로 변환한 후 즉시 실행한다.
코드가 실행될 때마다 인터프리트 과정이 연속적으로 수행되며, 그렇기 때문에 실행 파일이 생성되지 않는다. 대신 인터프리트 단계와 실행 단계가 반복적으로 수행되므로 실행 속도가 느리다는 단점이 있다.

JavaScript를 실행하는 방법

모든 브라우저는 기본적으로 JavaScript engine을 내장하고 있으므로, 웹 브라우저를 킨 다음 F12를 눌러 개발자 도구에서 실행 가능하다.
또한 node.js에서도 JavaScript engine이 내장되어 있어 JavaScript 실행이 가능하다.

바이트 코드란 무엇인가

특정한 하드웨어가 아닌, 가상 머신에서 실행하도록 작성된 바이너리 코드이다. 기본적으로 가상 머신에서 동작하기 때문에, 어떤 플랫폼에도 종속되지 않으며 실시간 컴파일러 또는 JIT 컴파일러에 의해 바이너리 코드로 변환된다.

JIT 컴파일러란 무엇이며 어떻게 동작하는가

JIT 컴파일러는 프로그램이 실행된 후 실행되는 컴파일러로써, 일반적으로 바이트 코드나 VM 명령어를 즉석에서 바이너리 코드로 변환하는 컴파일러다.
또한 컴파일 도중 코드를 캐싱하여, 같은 함수가 호출될 때 매번 컴파일 하는 것을 방지한다.

JavaScript engine의 구성 요소

  • Parser: 코드를 token이라는 작은 단위로 쪼갬
  • AST(Abstract Syntax Tree): parser에서 분해된 token을 기반으로 나무 구조를 생성함.
  • Interpreter: 나무 구조로 변환된 코드를 Bytecode로 변환한다.
  • Profiler: 입력받은 Bytecode에서 최적화가 가능한 부분을 기록한다.
  • Compiler: Profiler가 기록한 부분을 기계어로 변환하여 최적화한다.
  • Memory heap: 함수나 변수가 메모리의 할당되는 구간이다.
  • Call stack: 함수 호출 순서를 저장하고 관리하는 구간이다. 후입 선출(LIFO) 구조이며, 만약 call stack 크기를 넘어서는 양의 호출이 쌓이게 되면 스택 오버플로우가 일어난다.

자바스크립트 엔진들의 차이

  • V8: 구글의 크롬 브라우저에서 사용되는 자바스크립트 엔진이다. 가장 많이 사용되고 웹브라우저가 아닌 Node.js나 Deno에서도 사용된다.
  • SpiderMonkey: 모질라 재단의 파이어폭스에서 사용되는 자바스크립트 엔진이며, 가장 먼저 JavaScript와 JIT 컴파일러를 사용한 엔진이다.
  • Webkit: 애플의 사파리에서 사용되는 자바스크립트 엔진이다.

과제

깃 리포지토리를 생성하는 방법

Git init으로 깃 리포지토리를 생성할 수 있다.

로컬 컴퓨터의 리포지토리를 깃과 연결하는 방법

Git config에서 유저 설정을 하면 해당 계정과 로컬 컴퓨터의 리포지토리를 연동할 수 있다.

코드를 푸시, 풀, 커밋하는 방법

코드 푸시: git push - 리포지토리에 현재 내용을 저장함.
코드 풀: git pull - 리포지토리의 내용을 파일에 저장함.
코드 커밋: git commit - 변경사항을 리포지토리에 기록함.

출처

profile
귀차니즘 탈출 시도중

0개의 댓글