JS Compile과 Build

Lucid·2021년 4월 8일
3

서론

갑자기 게슈탈트 붕괴처럼 typescript가 외계어로 보이고, 아는 영어도 읽히지 않고
아무생각 없이 부담없이 읽었던 document가 이번주 내내 하나도 읽히지 않는 취업 후유증이 생겼다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅎr 진짜 왜 이러는거야 나한테 너무 정떨어진다.

개발하면서 build라는 말을 잘썼는데 막상 말로 표현하려니까 못하겠음
정리해보자.

compile

compile이란 A -> 컴파일해서 -> B로 바꾸는 과정을 말한다.
보통 Java, C#, Swift와 같은 고급 언어로 작성된 코드를 기계어로 변환하는 과정을 말한다.

자바스크립트에서의 컴파일러는 Babel과 Typescript 등이 있다.
Babel을 통해 최신 자바스크립트 스펙을 모든 브라우저에서 사용 가능한 스크립트로 컴파일
Typescript를 통해 TS -> JS 컴파일

자바스크립트? 인터프리터 언어임 .. 하지만 컴파일과정 거친다. (컴파일이 필요한 경우엔 컴파일)

V8 엔진

  • 구글이 주도하여 C++로 작성된 고성능의 자바스크립트 & 웹 에셈블리 엔진
  • 오픈소스
  • Google Chrome, Node.js에서 사용
  • ECMAScript와 Web Assembly를 표준에 맞게 구현하였다.

작동원리

사실 엔진이 동작하는 원리를 굳이 깊게 이해할 필요는 없지만 동작 과정을 안다면 언젠간 도움이 되리라 생각한다. 내 코드가 어케 돌아가는지는 알아야지

  1. 내 소스코드를 Parser로 넘김
  2. Parser는 소스코드 분석 후 AST(Abstract Syntax Tree, 추상 구문 트리)로 변경
    • AST : 프로그래밍 언어의 문법에 따라 소스 코드 구조를 표시하는 계층적 프로그램 표현이다.
    • AST 노드는 소스 코드의 항목(item)에 해당한다.
  3. AST를 Ignition(자바스크립트를 바이트 코드로 변환하는 인터프리터)으로 넘김
    • 바이트 코드로 변환함으로써 원본코드를 다시 파싱해야 하는 수고를 덜게 됨
    • 코드 양이 줄어들며 코드 실행 때 차지하는 메모리 공간 절약
  4. 바이트 코드를 실행하며 작동
    • 자주 실행되는 코드는 TurboFan으로 보내져서 최적화된 코드로 다시 컴파일
    • 사용이 덜 된다 싶으면 Deoptimizing하기도 함

결론 : 실행되는 플랫폼에 따라 인터프리팅과 컴파일이 혼합되어 사용되고 성능이 아주 좋다.

Build

소스 코드를 실행 가능한 파일로 만드는 과정을 의미한다.
Gradle, Maven, Ant와 같은 Build Tool을 이용해서 기능을 수행한다.

1. Generating sources (sometimes).
2. Compiling sources.
3. Compiling test sources.
4. Executing tests (unit tests, integration tests, etc).
5. Packaging (into jar, war, ejb-jar, ear).
6. Running health checks (static analyzers like Checkstyle, Findbugs, PMD, test coverage, etc).
7. Generating reports.

Build하며 Compile과정이 포함된다.

마치며


참고

profile
Find The Best Solution 😎

0개의 댓글