자바스크립트의 다양한 이름들 node.js, ecma, v8
Tags: javascript
Published: 2021-08-16 15:25:22

분명 자바스크립트 강의를 듣는데 뭔가 다른 단어가 나오면 혼란스럽다. "아니, 나는 자바스크립트를 배우고 싶다구요!"

더 알고 싶어 자바스크립트를 검색하면 nodejs, ecma2015 같은 단어가 눈에 띈다. 크롬은 v8 엔진이니 뭐시기 하는데, 아니 도대체 이건 뭐란 말인가?

나는 프로그래밍 언어가 만들어지는 공정을 얘기하고자 한다. 왜 브라우저마다 다른 것이지? 왜 자바스크립트를 그렇게 부르지? 이해하게 될 것이다.
⠀
⠀
⠀
## 자바스크립트
먼저 우리가 이해하기 어려운 점이 있다. 자바스크립트는 웹브라우저에서 사용하는 유일한 언어다. 그래서 브라우저만 생각하고 있는데, 누군가는 컴퓨터의 콘솔 창을 키고 무슨 명령어를 입력하는데 자바스크립트라고 한다. 여기서 내가 알던 자바스크립트가 어색해진다.

우리가 흔히 말하는 자바스크립트는 웹브라우저에서 사용하는 그 언어가 맞다. 클릭했을 때 이벤트 넣고, 스타일 수정하고, 알림 창 띄울 때 '자바스크립트' 코드를 작성한다.
⠀
⠀
⠀
### Vanilla JS
자바스크립트를 부르는 다른 말이다. 2019년 즈음되선 볼 수 없는 단어다.

이런 단어를 사용할 정도로 순수한 자바스크립트는 보기 힘들었다. 그전까진 대부분 제이쿼리를 이용했는데, 자바스크립트로 만들어진 라이브러리임에도 불구하고 사람들은 자바스크립트는 모르고 제이쿼리는 알았다. 정말로...

해외도 이러한 현상이 정말 심각했다. ES5 시절에만해도 웹개발에선 디자이너가 중요했지 지금처럼 개발자가 중요하지도 않았고 자바스크립트를 프로그래밍 언어로 보지도 않았다. 

그렇게 프로그래밍에 대한 이해도가 낮은 개발자가 주로 사용하다보니 제이쿼리, 앵귤러JS, 리액트같은 라이브러리를 자바스크립트의 일부로 생각하는 경향이 있었고 결국 커뮤니티에선 바닐라JS라는 단어까지 나온 것이다.
⠀
⠀
⠀
## V8
구글에서 만든 자바스크립트 엔진이다. 엔진은 우리가 작성한 자바스크립트 코드를 실행하는 역할을 담당한다. 

변수를 사용하고, 함수를 만들고, 분기문으로 처리하는 등 코드를 넣으면 엔진은 그 문법에 알맞게 실행한다.

만약 일반 종이에 자바스크립트 소스를 작성하면 어떻게 될까? 아무 일도 일어나지 않는다. 컴퓨터에 자바스크립트 코드를 작성해도 아무 일도 일어나지 않는다. 바로 엔진에 그 소스 코드를 전달했을 때 엔진은 그 코드를 해석하고 컴퓨터에 명령을 내린다.

브라우저에선 자바스크립트 파일을 불러오면 브라우저에 내장된 자바스크립트 엔진이 그 코드를 실행한다. 가장 많이 사용하는 구글의 크롬 브라우저가 바로 이 V8 엔진을 이용해 자바스크립트 소스를 실행한다.

엔진은 보통 C, C++ 언어를 기반으로 제작하고, 마이크로소프트는 차크라(인터넷 익스플로러, 엣지 구버전, 2021년까지 보안패치 진행), 애플의 사파리는 웹킷(JavascriptCore), 파이어폭스는 스파이더몽키라는 엔진을 만들어 사용하고 있다.
⠀
⠀
⠀
## ECMAScript
엔진이라는 존재를 인식했다. 그럼 엔진은 그 코드를 어떻게 해석할까? 이를 스펙이라 부르는데, ECMAScript가 바로 스펙이다. 문법을 정하고 그 문법은 어떻게 작동해야 하는지 상세하게 설명한다.

스펙이란 단어는 낯설지 않다. 우리가 물건을 구입해도 볼 수 있다. 내용물이 뭐가 들었고, 높이와 넓이는 어떻게 되는지 그리고 어떤 기준을 충족하는지 등등 이 내용을 근거로 실물을 보지 않고도 우리는 어떤 물건인지, 필요한지 판단할 수 있다.

스펙에 적힌 내용은 이런 것들이 있다. 어떤 개념과 키워드가 있는지, + 연산을 사용하면 어떻게 작동해야 하는지, 배열은 어떤 조건을 충족해야 하는지 등 어떤 걸 구현해야 하는지 문법과 컨셉을 설명하고 있다.

물론 이것은 그냥 문서이고 엔진 개발자가 자기 마음대로 만들 수도 있다. 실제로 스펙 내용이 부족했던 2000년대에는 브라우저마다 코드를 다르게 작성해야 했고, 그냥 정말로 혼돈의 카오스였다. 

그래서 개발자들은 인터넷 익스플로러를 기준으로 작업했는데, 당시 점유율이 압도적으로 높아 다른 브라우저를 생각하지 않아도 큰 문제 없었다.

우리가 사용하는 자바스크립트는 ecma라는 단체에서 TC 39라는 팀이 관리하는 스펙을 이용하고 있다.
⠀
⠀
⠀
## node.js
프로그래밍 언어는 컴퓨터에서 명령어 입력해가며 실행한다. 그러나 앞서 말했지만 자바스크립트는 웹 브라우저에서 실행할 수 있는 유일한 프로그래밍 언어이기 때문에 오히려 컴퓨터에서 실행한다는 개념이 어색하다.

V8 엔진을 기반으로 만들었고, 컴퓨터의 파일을 관리하거나 HTTP 서버를 운영하는 등의 API를 자바스크립트 문법을 이용해 제공한다.

초기엔 팀이 갈라지고 말이 많았지만, 페이팔, 링크드인, 넷플릭스 같은 거대 IT 기업이 이용하면서 인정을 받게 되었다. 최근엔 웹 프로그래밍 강의로 RoR, Java가 아닌 nodejs가 많이 보인다. 자바스크립트는 쉽게 익힐 수 있는 언어면서 괜찮은 성능을 보여주고 있어서 많은 사랑을 받고 있는 게 아닌가 생각된다.
⠀
⠀
⠀
## Deno
nodejs를 만든 Ryan Dahl이 Go 언어로 넘어간 듯하다가 deno를 만들었다. nodejs에서의 아쉬움을 개선했다. 이것도 컴퓨터에서 돌아가는 자바스크립트다.

가장 핫한 rust, typescript 언어를 사용했고, ESM을 사용(nodejs는 아직도 esm의 일부만 지원한다)하는게 가장 도드라지는 특징이다.

초창기인 지금은 지켜볼 뿐이고, 자바스크립트에 익숙하지 않다면 nodejs를 대체하는 존재라는 정도로만 인식하고 있으면 된다.
⠀
⠀
⠀
## Typescript
자바스크립트에 타입 기능을 더한 프로그래밍 언어다. 자바스크립트로 변환하는 도구도 제공한다.

2018년?까진 리액트에 적용되있는 페이스북에서 만든 flow를 채택하는 라이브러리를 보곤했는데, 사용하는게 조금 혼란스러웠다.

지금 한창 유행이긴 하지만 제대로 이해하지 않으면 없느니 만도 못하다. 이왕 접한다면 시간 좀 내서 소스코드가 어떻게 변하는지 이해한 후 사용하길 권장한다.
⠀
⠀
⠀
## CoffeeScript
파이썬이 굉장히 사랑받던 10년 전쯤, 간결한 문법으로 인기를 모았던 언어다. 타입스크립트와 역할이 똑같다. 지금은 아무도 안 쓴다고 봐도 무방하고, 배울 필요도 없다.

약간 트렌드를 읽을 수 있는게, 2010년 전후로는 문법이 간결한게 인기였고, 2020년 전후로는 타입이 인기다.
⠀
⠀
⠀
## jQuery
존 레식<sup>John Resig</sup> 아재가 제작한 자바스크립트 라이브러리다. 당시 자바스크립트는 혼돈의 카오스였다. 표준이 미약하다보니 브라우저마다 문법이 다른 부분이 많았다. 국내는 IE 독점이지만 해외에선 파이어폭스, 크롬의 비중이 높았다.

서로 다른 브라우저를 같은 문법으로 코딩할 수 있고, 자바스크립트에 비해 사용이 간단하다보니 자바스크립트는 몰라도 제이쿼리는 배우는 상황이 되었다.

당시엔 프론트엔드(퍼블리셔라는 직무도 있긴 했지만 디자이너나 개발자가 떠맡았다)만 전문적으로 하는 인력을 배치하는게 기업 운영 입장에선 쉽지않아 제대로된 개발자도 없었다.

진입장벽이 없다보니 지식이 전혀 없는 사람이 주로 사용했고 사이트 하나에 5개 버전의 제이쿼리가 들어가거나 소스코드가 엉망인 경우가 허다해서 지금은 애물단지로 인식되고있다.