자바스크립트 공부를 하던 중 컴퓨터는 자바스크립트를 어떻게 번역하고 그 내부에서는 어떤 일이 벌어지는지 궁금해졌다. 이제 같이 알아볼까요!?
원시 프로그램(Source) - 번역(Compile) -> 목적 프로그램(Object) - 링크(Link) -> 로드 모듈(Module) - 로드(Load) -> 실행
번역(Compile)이라는 과정을 거쳐 기계어(Binary Code) 기반인 목적 프로그램(Object Program)이 작성된다.
이 번역을 수행하는 프로그램들이 컴파일러(Compiler)와 어셈블러(Assembler)이다.
컴파일러 : 고급언어(대부분의 프로그래밍 언어)로 작성된 프로그램을 번역하는 프로그램
어셈블러 : 저급언어인 어셈블리어로 작성된 원시 프로그램을 기계어로 번역하는 프로그램
인터프리터 : BASIC, LISP, APL, SNOBOL 등의 언어로 작성된 원시 프로그램을 번역하는 프로그램
컴파일러와 어셈블러와 다르게 작성된 원시 프로그램 전체를 기계어로 번환하지 않고 줄(행) 단위로 번역 + 실행까지 바로 수행하는 프로그램
프로그램 전체를 번역하는게 아니라 컴파일러와 다르게 목적 프로그램이 생성되지 않음.
원시 프로그램 : 고급언어나 어셈블리어로 작성된 프로그램
대부분의 고급 언어(C, Java)로 쓰인 프로그램들은 기계어로 된 목적 프로그램으로 변환되기 전에 어셈블리어로 변환된다.
컴퓨터 프로그래밍 언어의 한 종류로, 스크립트 작성 기능을 지원하는 소프트웨어(애플리케이션)을 제어하는 역할을 하는 언어. 스크립트 언어도 대부분 인터프리터 방식을 사용하는 인터프리터 언어라고 할 수 있다.
대표적으로 JavaScript, JSP, Python, Ruby등이 있다.
JavaScript는 웹 환경이 고도화되고 표준화되며 Node.js 런타임 환경 및 Electron 등이 등장하면서 스크립트 언어 자체만으로도 독립적인 프로그램의 개발이 가능해짐에 따라 소프트웨어를 제어하는 언어라고만 정의 할 수 없게 되었다.
고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성함.
번역 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 시간이 오래걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠름.
C언어, Java가 대표적이다.
링킹 : 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업
고급 프로그래밍 언어와 저급 프로그래밍 언어는 사람이 접근하기 쉬운지 어려운지를 기준으로 나눈다.
사람이 이해하기 쉽게 작성된 프로그래밍 언어
컴퓨터가 이해하기 쉬운 이진법으로 이루어진 언어.
기계어란 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어
기계어는 프로그램을 나타내는 가장 낮은 단계의 개념이다.
기계어를 사람이 이해하기 쉬운 기호와 1:1로 대응시켜 기호화한 프로그램 언어.
기호 언어라고도 부른다.
1995년 자바스크립트는 유저와의 상호작용을 위해 10일만에 탄생한 언어이다.
HTML 페이지를 동적으로 만드는 것에 목적이 있어 가벼운 인터프리터 언어로 만들어졌다.
자바스크립트는 개발자도구 콘솔에서 스크립트를 작성해 실행하는데 컴파일이 필요하지 않기 때문에 인터프리터 언어이다.
하지만 자바스크립트도 컴파일 과정을 거친다.
구글이 구글맵스를 개발하며 당시 브라우저, 특히 JavaScript 엔진에 한계를 느꼈다.
많은 유저 인터랙션이 필요했고 2009년 이를 커버할 수 있는 V8엔진을 출시했다.
자바스크립트의 성능을 비약적으로 향상시킬 수 있었던 이유는 엔진 내부에서 컴파일 과정을 거치기 때문이다.
엔진이 작동하는 원리로 살펴보자!
1. 엔진이 실행할 JS 파일을 받게 된다.
2. 파싱, AST(Abstract Syntax Tree)를 구축하는 과정을 거친다.
3. 인터프리터가 코드를 읽으며 실행한다.
4. 코드를 수행하는 과정에서 프로파일러가 지켜보며 최적화 할 수 있는 코드를 컴파일러에게 전달해준다.
5. 주로 반복해서 실행되는 코드 블록을 컴파일(최적화)한다.
6. 원래 있던 코드와 최적화된 코드를 바꿔준다.
자바스크립트는 실행되는 플랫폼에 따라 인터프리팅과 컴파일이 혼합되어 사용된다.
이 방식은 자바스크립트의 성능을 크게 향상시켰다.
자바스크립트는 인터프리터 언어이다!!!!!!!!!
자바스크립트 코드를 실행하려면 해석 엔진이 필요하다. 플랫폼에 따라 엔진 내부에서 컴파일 과정을 거친다!!!
참고했던 사이트
https://well-made-codestory.tistory.com/m/30
https://baobob1024.tistory.com/m/19
https://coding-factory.tistory.com/m/303
언어 번역 프로그램의 종류
https://blog.naver.com/djyoon1125/130174747994
자바스크립트는 인터프리터 언어인가?
https://hashcode.co.kr/questions/7560/javascript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%96%B8%EC%96%B4%EC%9D%B8%EA%B0%80%EC%9A%94-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%96%B8%EC%96%B4%EC%9D%B8%EA%B0%80%EC%9A%94
https://www.oowgnoj.dev/review/advanced-js-1