자바스크립트(JavaScript)란? 자바스크립트는 왜 'Java' 스크립트가 되었나?
자바스크립트는 인터프리터 기반의 언어로서 브라우저에 내장된 자바스크립트엔진(인터프리터) 위에서 동작하는 동적 타입언어입니다.

자바스크립트는 원래 모카라는 이름을 가진 언어로 넷스케이프사의 브랜든 아이크에 의해 개발되었습니다. 그러다가 라이브 스크립트라는 이름으로 바뀐 후 넷스케이프와 자바를 개발한 썬마이크로시스템즈가 함께 마케팅조약을 체결하면서 자바스크립트로 이름이 바뀌었습니다. 당시에 잘나가던 Java를 앞에 붙여줌으로써 자바스크립트를 많이 알릴 수 있게 된것이죠.

두 언어의 이름에 둘 다 자바가 들어가지만 실제 언어의 패러다임이나 추구하는바는 엄청난 차이가 있습니다. 흔히들 인도와 인도네시아만큼 다르다고 하는데, 실제로 이 둘은 엄청나게 다른 언어입니다.

자바를 재밌게 공부하고 나서 쉬워보이던 자바스크립트를 공부하려다가 파면 팔수록 너무나 자바와 다르고 어려워서 멘붕이었던 기억이 있네요.




ECMA Script? JavaSciprt?
자바스크립트에 대해 알아보는 과정에서 ECMA Script라는 단어를 많이 보게됩니다.

앞서 말했듯 JavaScript는 최초 넷스케이프사에서 만든 언어이고 당연하게도 넷스케이프사에서 개발한 브라우저인 넷스케이프 네비게이터에서 동작하였습니다. 그러다가 마이크로 소프트사가 자신의 브라우저인 인터넷 익스플로러에서도 자바스크립트 엔진을 구현하였고 마이크로소프트사 자체적으로로 자바스크립트를 본인의 입맛에 맞게(?) 구현하였습니다. 

넷스케이프사의 점유율을 앞지르기 위해 자신만의 자바스크립트를 개발하여 여러가지 기능과 API를 추가한것이죠.

웹 개발자들은 자바스크립트 언어가 각각의 브라우저에서 다르게 동작했기에 개발하는 과정에도 이부분을 신경써야 했습니다. 즉 개발시 호환성을 꼭 생각하면서 개발해야 했던 깃이죠. 이 문제를 해결하기 위해 ECMA 인터네셔널이라는 곳에서는 자바스크립트 표준화를 진행하게 됩니다. 즉 ECMA 표준을 정해두고 자바스크립트를 구현하는 브라우저는 서로의 호환성을 위해 ECMA 사양에 따라서 구현해라! 라고 권고 하는것이죠.

ECMA 인터네셔널은 19997년 ECMAScript1(ES1)을 발표했고, 최근인 2015년에는 ECMAScript6(ES6)이 발표됨과 동시에 많은 기능이 추가되었고 여러 브라우저에서 이 사양을 구현하였기 때문에 개발자는 호환성을 고려하지 않고도 편-안하게 자바스크립트라는 언어로 프론트엔드 어플리케이션을 개발할 수 있게 되었습니다.

다만 기존에 개발된 수많은 웹어플리케이션이 ECMA5 이하의 사양일때 개발되었고 아직도 ECMA6 스펙을 전부 지원해주는 브라우저가 많지는 않으므로 ECMA5 샤앙을 기본적으로 공부하는것이 좋습니다. 특히 우리나라는 웹 브라우저로 인터넷익스플로러의 점유율이 상당한데, 인터넷 익스플로러는 아직까지도 ECMA6을 완벽하게 지원하고 있지 않기 때문입니다.


ECMA Script 버전과 발표 시기





자바스크립트 언어의 특징

1. 인터프리터 언어이다
기존에는 자바스크립트가 인터프리터 언어라는 특성으로 인해 느리다는 편견이 있었지만 사용자의 컴퓨터 성능이 증가하고 브라우저내의 자바스크립트 엔진이 발전함에 따라 성능이 좋아졌습니다.

2. 동적 타입 언어이다
Java나 C++등의 언어처럼 변수의 타입이 선언과 동시에 정해지는 정적 타입 언어가 아닌 실행되는 도중에 타입이 동적으로 바뀔 수 있는 동적 타입 언어입니다.

3. 함수 자체가 자료형이고 객체이다
자바스크립트에서는 함수 자체가 객체이고 자료형이며, 따라서 다른 함수를 호출할때 함수를 인자로 넘길수도 있고 함수자체를 리턴할 수 있습니다. 이런 함수를 일급 함수라고 하며, 따라서 자바스크립트는 일급함수 언어라고 합니다.

4. 객체지향이면서도 함수지향이다
자바스크립트는 객체지향적인 코딩과 함수지향적 코딩이 가능한 멀티 패러다임 언어입니다.

5. 함수가 스코프를 정의한다
다른 언어들은 if문이나 for문 안에서 사용되는 변수또한 지역변수로 사용되지만 자바스크립트는 함수 범위에 따라 변수의 스코프가 정의됩니다. 물론 최신버전의 자바스크립트는 함수 범위뿐 아니라 몇가지 문법을 통해 스코프를 결정할 수 있게 바뀌었으나 아직까지는 기존의 함수를 통해 스코프를 정의하는 방법을 많이 사용합니다.


6. 브라우저를 조작할 수 있다
자바스크립트는 태생이 브라우저 엔진 위에서 동작하는 언어이므로 브라우저의 화면(DOM)이나 기능들을 조작할 수 있는 API를 제공합니다. 물론 NodeJS는 서버환경이기 때문에 NodeJS에서 사용되는 자바스크립트의 경우에는 브라우저를 조작할 수 있는 API가 없습니다.




자바스크립트가 활용되는 곳
자바스크립트는 기존에 브라우저에서만 동작하도록 설계되었으나, 현재는 여러 환경에서 사용됩니다. 구글은 크롬에 있는 자바스크립트 엔진(v8)을 가지고서버용으로 사용하기도 하며(NodeJS), 언어 자체만을 빌려 게임 개발(유니티)에도 사용합니다. 즉 실행되는 환경이나 엔진은 각기 다르더라도 자바스크립트라는 언어의 패러다임이 가져다 주는 이득이 많기에 여기저기서 많이 사용되는것입니다.

또한 몇년전까지만 하더라도 서버는 Java나 C#등이 대세였지만 최근에는 JavaScript 기반의 웹서버인 NodeJS가 점차 많이 사용되는 추세입니다. 우리가 알고있는 소셜네트워크 플랫폼인 Linked in도 백엔드를 다른 언어에서 자바스크립트 기반의 웹서버인 NodeJS로 바꿨다고 합니다.

추가적으로 자바스크립트는 IoT 분야에서도 활용이 가능하며, 자바스크립트에서의 객체 리터럴 표기법인 JSON은 수많은 플랫폼에서 데이터를 주고받을때 사용되는 대세 포맷이 되었습니다.





자바스크립트의 큰 장점 두가지

여러환경에서 사용 가능
실제 구동되는 환경은 각각 다르겠으나 언어 자체는 서버개발과 프론트엔드 개발, 게임개발, 데스크탑용 어플리케이션 개발까지 다양하게 활용 가능합니다.

웹어플리케이션 풀스택 개발이 가능
자바스크립트를 배워두면 NodeJS의 등장으로 풀스택 개발이 가능합니다. 기업 입장에서 서버개발자(백엔드)와 프론트엔드 개발자를 각각 따로 고용하는것보다 자바스크립트를 능숙하제 다룰 수 있는 개발자만 고용하는것이 훨씬 경제적일 수 있습니다. 개발자 입장에서도 여러가지 언어를 학습하는것보다 자바스크립트에 대한 숙련도만 높이면 되는 이득이 있습니다.






자바스크립트가 떠오른 이유(매우 주관적인 생각임을 밝힙니다)
1. 자바스크립트 언어가 가져다주는 생산성이 인정받게 되었습니다.

2. 과거에는 사용자 pc 사양이 좋지 못하여 서버에서 화면을 그렸지만 최근으로 오면서 사용자의 PC사양이 매우 좋아졌고 그에 따라 서버는 화면을 그리는데 사용되는 부하를 줄이고 그 부담을 사용자의 pc에서 많은 처리를 위임하는 방식으로 발전했습니다.

3. 과거에는 브라우저에 포함되어있는 javascript 엔진의 성능이 좋지 못했으나 최근에는 많은 발전과 최적화가 진행되어 성능이 다른 언어 못지않게 엄청나게 좋아졌습니다.

4. 과거에는 자바스크립트의 API가 좋지 못해 다양한 기능들을 개발 할 수 없었습니다. 그에 따라 마이크로 소프트진영의 액티브엑스나 플래시 등이 대세였으나 최근에는 HTML5가 등장하면서 자바스크립트에 많은 API가 추가되었고 액티브액스나 플래시를 사용할 필요가 없어졌습니다.

5. 자바스크립트가 발전함에 따라 수많은 서드파티가 등장하였습니다. 자바스크립트가 발전함과 동시에 사용할 수 있는 오픈소스 자바스크립트 라이브러리나 프레임워크가 등장하였습니다. 따라서 자바스크립트를 이용하면 많은 부분을 직접 개발하지 않고도 웹 어플리케이션 개발이 가능해졌습니다.

6. 스마트폰이나 태블릿의 등장과 함께 웹 어플리케이션이 대세가 되면서 Rest API 아키텍처, SPA(Single Page Application)가 등장하게 되고 클라이언트(브라우저)의 역할이 매우 중요해졌고 클라이언트를 조작할 수 있는 자바스크립트 또한 자연스럽게 떠오르게 되었습니다.

7. 여러 환경에서 사용가능해지면서 자바스크립트만 알게 되면 어려 환경에 맞는 어플리케이션 개발이 가능하게 되었습니다.




매우 개인적인 의견
지금까지 자바스크립트 언어에 대한 역사와 특징을 살펴보았습니다. 많은 장점들을 나열하긴 했지만 분명 자바스크립트 언어에도 장점을 취하기 위해 버려지는 부분이 있을것입니다. 

저는 자바를 메인언어로 사용하는 백엔드 개발자기에 자바스크립트를 많이 알지는 못하며 경험이 많지 않아 장단점을 정확히 알지는 못하지만 아직까지 대규모 엔터프라이즈 어플리케이션 개발에는 동적언어인 자바스크립트보다는 정적언어인 자바나 C#이 대세이지 않아 생각이 됩니다. 

가장 큰 단점으로 자바의 경우 IDE레벨에서 소스코드를 추적하기가 매우 쉽지만 자바스크립트는 추적하기가 훨씬 어려운 느낌이 있었습니다. 이부분은 제가 숙련되지 못한 부분도 크지만 유지보수 측면에서는 꽤 큰 비용으로 작용하는것으로 보였습니다. 

이부분과 겹치는것이 컴파일언어인 자바의 경우에는 컴파일 단계에서 수많은 오류를 걸러내는것이 가능하지만 자바스크립트는 동적언어답게 자체적으로 스무스하게(?) 넘어가버리는 경우가 많아서 오류를 찾기 어려운 단점또한 있습니다. 

물론 제가 사용하는 자바언어에 비해 상대적으로 그렇게 느끼는 것이기는 합니다. 그러나 자바스크립트는 다른언어를 버리고 익히는 언어가 아닌 부수적으로 알아야하는 두번째 무기로서의 언어로는 매우 좋은 언어가 아닌가 싶습니다.

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!