JS 재시작
목차
이 튜토리얼은 자바스크립트를 재시작하기 위해서 작성하는 시리즈입니다. 타이틀을 JS 재시작하기(자바스크립트 재시작하기)라고 붙인 것은 나름의 이유가 있습니다. 새로운 카테고리의 첫번째 포스팅이므로 서두로써 조금 자바스크립트에 대한 주관적인 관점을 공유하려고 합니다. 바로 기술의 가이드를 읽으려는 분은 다음 포스팅으로 스킵하면 될 것 같습니다.
오늘날 자바스크립트는 방대한 생태계로 발전했습니다. 프로그래머 중에는 자바 스크립트가 웹의 클라이언트와 서버 모두를 떠받치고 있기 때문에 실질적으로 가장 중요한 프로그래밍 언어라고 주장하기도 합니다. 그런데 웹이 지금처럼 우리 일상에 깊숙히 들어오기 전에 자바스크립트는 진지한 프로그래밍 언어로 보는 시각이 적었습니다. 토이 프로그래밍 언어(toy programming language) 취급을 받았다고 말하는데, 쉽게 말해 장난감 정도의 언어였다고 합니다. 이러한 시각은 웹이 빠르게 발전한 후에도 꽤 오랫동안 남아있었으며 일부 전통 프로그래밍의 고인물 중에는(C++과 Java 커뮤니티) 지금도 자바 스크립트에 대한 편견이 완전히 사라졌다고 말할 수 있을지 모르겠습니다.
아마 완전히 인식이 바뀌지는 않았을 겁니다. 왜냐하면 자바스크립트는 웹과 함께 발전해왔기 때문에 그 용어의 정의 부터가 쉽지 않은데 C나 자바계열처럼 그래도 컴퓨터 과학자들이 모인 기업집단에서 정의하여 위에서 내려온게 아니라 대중의 필요에 의하여 밑에서 부터 올라왔기 때문입니다. 컴퓨터 소프트웨어의 역사에 있어서 위에서 내려오냐 밑에서 올라오냐는 오픈소스와 클로즈드 소스의 스토리와도 연관이 있습니다만, 상당히 긴 이야기라서 오픈소스에 대한 내용보다는 자바스크립트가 왜 toy language에서 지금의 web을 대표하는 major language가 되었는가에 대해서 이야기하려 합니다.
그 흐름을 돌아보면 자바스크립트가 방대한 생태계로 성장한 이유와 또 왜 이렇게 어려운 언어가 되었나 – 조금은 힌트를 얻을 수 있다고 봅니다. 컴퓨터 소프트웨어의 역사는 그냥 기술이 발달한 것 이니까 단순할 것 같지만 그 안에는 수많은 이해관계에 얽힌 기업, 커뮤니티, 사람들이 있습니다. 이런 이해관계는 지금도 작용하고 있기 때문에 역사에 대한 어떤 절대적인 시각을 이야기 하면 그것이 좋게 들리지 않을 사람도 있을지 모릅니다. 그래서 너무 단정적인 아이디어 보다는 자바스크립트는 지금 어디쯤에 와있는가? 자바스크립트와 내가 잘 맞는가? 이런 중요한 판단을 하는데 약간의 참고가 되는 정도로 작성하는 포스팅입니다.
자바스크립트란?
가장 어려운 질문입니다. 자바스크립트란 무엇인가? 기술적으로는 Ecma International의 Ecmascript 규격에 맞는 프로그래밍 언어를 의미합니다. 처음 세상에 등장한 것은 1995년으로 넷스케이프 브라우저를 위해 개발된 Spider Monkey Engine입니다.
현재 가장 유명한 자바스크립트 엔진은 구글 크롬 브라우저의 V8 입니다. 그 이유는 크롬을 제일 많이 쓰기 때문인데요. 크롬이 점유율을 높인 것은 꽤 오래전 부터 입니다. 2016년도에 이미 50%를 넘어섰고 현재 70%가까이 되기 때문에 업계 리더라고 볼 수 있습니다. 한국은 글로벌 트렌드와는 달리 MS 익스플로러에 오랜 기간 의존했었기 때문에 아직도 IE의 레가시 코드를 사용하는 경우도 꽤 있습니다. IE의 대표적인 흑역사(?)라면 Active X가 있는데 심지어 전 대통령이 언급한 일도 있습니다. (ActiveX 그만쓰고 대책을 세우라고)
보통 자바스크립트라고 말할 때 그 의미는 브라우저 안에서 돌아가는 자바 스크립트를 말합니다. Spider Monkey 나 V8은 브라우저 안에서 자바스크립트를 사용하는 인터프리터, 컴파일러, 런타임을 의미합니다.
전통적인 C언어와 비교하면 명확한 차이가 있습니다. C소스코드는 컴파일러에 의해 CPU 아키텍쳐에 따라 오브젝트 코드(기계코드)로 번역되고 그것을 여러가지 라이브러리와 함께 운영체제의 런타임이 최종 실행할 수 있는 단계로 링크(Link)하는 작업을 한 후 실행파일이 나옵니다. 이 과정을 빌드(build)라고 합니다. 프로그램의 실행자는 빌드 작업이 끝난 파일을 실행하고 운영체제의 로더(loader)가 보조저장장치에서 메모리로 올리고 CPU에게 작업할 수 있는 런타임(Runtime)이 시작되면 이제 프로그램을 사용할 수 있습니다.
한편 자바스크립트는 텍스트 파일로 웹서버에서 클라이언트에서 http 요청이 오면 관련된 html,css 파일 등과 함께 전송이 되고 브라우저에서 JIT(just in time) 컴파일 합니다. 웹페이지가 로드되고 사용자가 웹서핑을 하기까지 이런 과정을 거칩니다. 물론 v8내부의 로직은 엄청나게 복잡한데 C언어의 컴파일과 비교해보면 인터넷에서 자바스크립트 소스코드를 다운로드 받아서 응답시간과 로딩타임을 줄이기 위해서 많은 프로세스가 효율적으로 처리되야 합니다. C가 좋냐 자바스크립트가 좋냐 그 문제가 아니라 웹의 특성에 대응하기 위해 중간 처리과정이 다르다는 것 입니다.
자바스크립트 코드가 웹브라우저에 처음부터 컴파일 되어 있어서 어떤 웹사이트를 다운로드 받건 간에 자동으로 실행되면 좋겠지만 웹이 제공하는 수많은 서비스에 따라 다르기 때문에 그런 식으로 빌드된 자바스크립트는 채택되지 않았습니다. 상당히 심오한 이야기 입니다.
다시 말하면 자바스크립트는 클라이언트와 서버간의 로직을 컨트롤하기 위해서 실행되야 하는데 웹서버에서 코드를 다운로드 받은 후 그제서야 컴파일 하는 구조입니다. 컴파일이 되어 있는 상태로 배포하거나 빌드 후에 바로 사용하는 C언어 같은 정적인 언어와는 결이 다릅니다.
또 웹의 초창기에는 자바스크립트가 C언어 처럼 독립적으로 뭘 하기 보다는 오로지 브라우저에서 작동하는 언어였습니다. 그래서 지금과 달리 컴퓨터 환경에서 웹을 정말 통신 목적으로만 사용한 시절에는 사이드 언어, 토이 언어(toy language)가 되었을 수도 있겠지요. (적어도 당시의 사람들은 그렇게 믿었다)
*컴퓨터 언어의 발전은 굉장히 빠릅니다. 그 중에서 자바스크립트 커뮤니티의 속도는 상상 그 이상입니다. 프로그래머는 새로운 기술에 대해 공부를 하지 않으면 1~2년만 지나도 경쟁력이 떨어지는데 이는 직업군을 비교했을 때 상당한 차이가 있습니다. 프로그래머는 잠시 동안 공부를 하지 않으면 도태되는데 특히 웹쪽, 그리고 웹의 핵심인 자바스크립트 분야는 좀 심합니다.
기술이 빨리 발전하는 것은 좋지만 너무 빨리 가버리면 오히려 사람이 도태될 수 있는데 자바스크립트가 그런 분야라고 할 수 있습니다. 자바스크립트의 학습아 어려운 것은 우연이 아닙니다. 학습을 하고 적용하는 시간보다 빠르게 발전을 해버리면 그 전의 학습도 빠르게 가치를 잃어갈 수 있습니다. 이것은 빌게이츠가 저술한 ‘생각의 속도’라는 책을 떠올리게 하는데요. 정보사회가 너무 빠르게 변화하면 사람들이 알고 있는 기존의 패러다임이 무력화 되기 때문에 선택을 잘해야 합니다.
자바 스크립트에 대해서 이야기 하는데 답이 잘 나오지 않습니다. 그 이유는 위에서 이야기한 자바스크립트이 특수한 상황과 관련이 있습니다. 그렇다면 이제 자바스크립트를 좀 단순화 시켜서 볼 필요가 있습니다.
*자바스크립트는 크게 웹브라우저 안에서 동작하는 코드와 그 외의 영역에서 동작하는 자바스크립트로 나눌 수 있습니다. 전자는 충분히 이야기 했으니까 후자는 nodejs로 대표되는 백엔드의 자바스크립트입니다. 백엔드는 서버사이드를 의미하는데 geeksforgeeks 에 따르면 자바스크립트는 가장 유망한 백엔드 언어입니다. nodejs express를 중심으로 Facebook, Google, eBay 등이 백엔드에서 사용하고 있습니다.
자바스크립트가 방대한 이유는 이렇게 프론트엔드와 백엔드 모두에서 광범위하게 쓰이고 있다는 점이고 Ecmascript를 설계할 때 처음에 이렇게 될지 몰랐기 때문입니다. 모질라 재단의 유튜브 demysitied 시리즈에 보면 HTML CSS JAVASCRIPT를 구현한 웹기술은 현대의 AAA(Triple A급 게임) 정도의 첨단기술이라고 표현하는데 그 핵심은 역시 웹의 자바스크립트 입니다. (트리플 A급의 게임은 글로벌 게임사의 첨단 게임을 말함)
이것이 자바스크립트란? 에 대한 하나의 답이 될진 모르겠습니다. 다만 자바스크립트에 대한 수많은 오해가 있기에 지금 편견적으로 단정하는 답을 내놓는 것은 조금 성급한게 아닐까 싶습니다. MDN의 문서에서 조차 자바스크립트는 세계에서 가장 오해받고 있는 프로그래밍 언어로 악명이 높다고 공식 웹사이트에 기술하기도 했습니다. 거기 보면 구구절절하게 정치적 문제라던가 나열하고 있는데 공식사이트의 설명도 그렇고 MDN 기술자 들도 자바스크립트란? 에 대한 질문에는 상당히 모호하고 어려운 답변을 내고 있는 실정입니다. 자바스크립트는 이렇다 – 고 단정하는 것보다는 현재 이런 상황이다. 앞으로 어떻게 변할 것 같다 – 라는 의견을 가지는게 어떨까 싶습니다.
C언어나 Java의 경우 언어가 내세우는 명확한 컨셉이 있습니다. 프로그래머들은 그 컨셉에 평생의 혼을 불사르는 사람들입니다. 인터넷이 발전한다고 C언어나 Java가 갑자기 언어체계를 바꾸거나 하지 않습니다. 전통 언어에서 자바스크립트로 넘어온 경우 이런 부분을 생각해 볼 필요가 있다고 봅니다.
개인적으로는 C언어나 Java와 같은 Static과 OOP 언어를 선호합니다만, 그것은 한 프로그래머의 취향일 뿐이고 자바스크립트 커뮤니티가 앞으로 어떻게 간다고 한들 반감은 없습니다. 다음 세대에는 자바스크립트가 이 조상언어들을 뛰어넘을지 모르는 일이지요. 미래일은 알 수가 없습니다. C나 Java도 소싯적에는 그랬습니다. 그래서 주시할 필요가 있다고 봅니다.
자바스크립트 가이드
이 사이트에서 자바스크립트 포스팅이 좀 부족합니다. 아무래도 자바스크립트에 대한 선입견이 있다보니 포스팅을 많이 못했는데요. 또 자바스크립트 같이 문법이 복잡한(난잡한?) 언어는 별로 선호하지 않기 때문이기도 했습니다. 하지만 웹이란 것이 1.0 2.0 3.0으로 변화하면서 어떻게 변할지는 알수 없습니다.
웹이 어떻게 변할지 알았다면 관련 주식들을 미리 다 모아 놨을 겁니다. 현재로써는 자바스크립트가 가장 유망주기 때문에 좀 더 많은 포스팅을 하게 될 것 같습니다.
참고링크
Browser market share (netmarketshare.com)
TC39 – Ecma International (ecma-international.org)
JavaScript 재입문하기 (JS 튜토리얼) – JavaScript | MDN (mozilla.org)