본문 바로가기

Study/JavaScript

What is Javascript?

어디에서 동작하는가? | Runtime Environment

Javascript이 무엇인지 알아보기 전에, 런타임 환경 즉 코드 실행 환경이 무엇인지 간단히 살펴보자.  

 

A runtime environment is where your program will be executed. And it determines what global objects your program can access. If you write code for program with JS, you can run it in two environments: Browser, Node.

 

런타임 환경이란, 우리가 작성한 코드가 실행될 환경을 말한다. 만약 우리가 Javascript 코드를 작성하면, 우리의 코드는 Browser와 Node에서 실행될 수 있다. 이 환경이 browser냐 node냐에 따라, 우리가 만든 프로그램이 접근할 수 있는 global object(전역 객체)이 달라진다. 

Browser 

Browser(for example, chrome, firefox, safari) JS가 실행되는 가장 흔한 환경이다.

 

브라우저 환경에서 global object은 window인데, 크롬 브라우저의 console 창에 "this" 라고 입력하면 이 object에 어떤 것들이 담겨있는지 확인할 수 있다. 그 중에서도 alert와 prompt에 대해 짚고 넘어가면, alert는 브라우저 위에 경고창을 띄울 수 있는 함수이고, prompt는 모달을 통해 사용자에게 입력 값을 받고, 그 값을 반환하는 함수이다. 

 

이런 함수는 browser에서만 사용할 수 있다. node 환경에서는 경고창을 띄우거나, 입력값을 받을 수 없다. 브라우저 환경에서 실행하기 위해 만들어진 Applications을 front-end applications 이라고 한다. 

Node 

2009년, 브라우저 없이도 JS 코드를 실행시키기 위한 목적으로 Node 실행 환경이 만들어졌다. 덕분에 JavaScript만을 이용하여 full-stack applications을 개발하는 것이 가능해졌다.

 

2009년 이전에는, back-end applications을 만들기 위해서 다른 프로그래밍 언어를 이용해야 했다(Java, PHP...). 브라우저와 노드 환경은 완전히 다르기 때문에, 노드에서는 브라우저가 제공하는 값이나 함수를 사용할 수 없다(window 객체에 접근할 수 없기 때문이다). 대신 노드 환경은 back-end applications access가 가능한데, 예를 들어 computer’s file system, database, and network로의 접근이다. 

어떻게 동작하는가? | interpreter

브라우저와 노드, 즉 자바스크립트의 실행 환경에는 자바스크립트 엔진이라는 것이 내장되어 있고, 이 엔진에 내장된 interpreter(번역기)는 우리가 작성한 자바스크립트 코드를 컴퓨터가 이해할 수 있게 번역하고, 실행하게 도와준다.

 

컴퓨터가 이해하는 유일한 언어는 1과 0으로 이루어진 이진수(binary number) 뿐이라는 이야기를 들어 보았을 것이다. 즉, 사람의 언어와 비슷한 high level code 자체를 컴퓨터가 이해할 수는 없다. 예를 들어 let myAge = 23 이라고 작성한다면, 이 코드를 이해하는 건 사람이지 컴퓨터가 아니라는 뜻이다. 자바스크립트 엔진의  interpreter는 우리가 작성한 js 코드를 컴퓨터(cpu)가 이해할 수 있도록 번역해주는 역할을 한다. 

 

이런 역할을 다른 언어에서는 compiler가 한다. 그렇다면 interpreter와 compiler의 차이는 무엇일까?

 

interpreter는 JS로 작성한 프로그램을 실행시키면, 프로그램의 코드를 한줄 한줄씩(line by line) 번역해 나간다. compiler는 프로그램을 실행시키기 전에 미리 코드를 번역해서 준비한다. 그렇기 때문에 JS로 작성된 프로그램은 실행 준비 속도가 빠르고(미리 준비할 것이 없기 때문), compiler를 이용하는 언어로 작성된 프로그램은 실행 준비에는 시간이 걸리지만, 실행 속도가 빠르다(실행 중에는 번역 작업을 하지 않기 때문).

가장 잘 알려진 자바스크립트 엔진은 chrome, edge, node.js에서 사용되는 V8 엔진인데, interpreter와 compiler의 장점을 적절하게 조합한 엔진(Just In Time Compilation, JIT-Compilation)이라고 한다. 

ECMA Script

우리가 영어를 번역하는 최초의 외국인이라고 생각해보자. 어떻게 번역 작업을 시작해야할까? 번역 작업을 하기 위해서 제일 필요한 건 뭘까? 아마도 영어 사전일 것이다.

 

우리가 사용하는 언어를 번역하는 과정과, JS를 컴퓨터가 이해할 수 있는 언어로 번역하는 과정은 유사할 것이다. 즉, JS에서 사용되는 문법이 잘 정의된 사전이 필요하다. 이 사전이 ECMAScript이다. 영어 사전은 번역 뿐만 아니라, 언어를 작성하는 방법의 기준이 된다. 모르는 게 있을 때 ECMA Script를 찾아볼 수도 있다. 하지만 너무 어려워서 JS언어를 만든 brendan eich가 창립한 Mozilla의 MDN을 Official Site로 이용한다. 

그래서 JavaScript가 뭔데? : Um...

나는 JS가 도구라고 생각한다. 더 좋은 정보를 찾기 위한 도구로서 영어를 사용하는 것처럼, JS는 내가 원하는 프로그램을 만드는 데 사용되는 멋진 도구라고 생각한다. 하지만 MDN은 그렇게 생각하지 않는 것 같다.

 

다음은 MDN에서 JavaScript를 검색하면 나오는 definition이다.

 

JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, Apache CouchDB and Adobe Acrobat. JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles. 

 

음... 그렇구나. 조금 복잡한 도구이다.

지난 두어달 동안 JS 공부를 하면서 한 두번은 들어본 적이 있는 용어이지만, 정확히 의미하는 바가 무엇인지 알 수 없는 단어를 체크했다. 앞으로 이것들이 의미하는 바가 무엇인지 천천히 알아보자. 

'Study > JavaScript' 카테고리의 다른 글

Function & Functional Programming  (0) 2022.03.26
Control flow statement  (0) 2022.03.25
Operator  (0) 2022.03.25
Data Type  (0) 2022.03.24
Variables  (0) 2022.03.24