1. 자바스크립트의 정의
- 자바스크립트로 작성한 프로그램을 스크립트(script)라고 부릅니다.
- 스크립트는 웹페이지의 HTML 안에 작성할 수 있는데,
웹페이지를 불러올 때 스크립트가 자동으로 실행됩니다.
- 스크립트는 특별한 준비나 컴파일 없이 보통의 문자 형태로 작성할 수 있고,
실행도 할 수 있습니다.
자바스크립트는 브라우저뿐만 아니라 서버에서도 실행할 수 있습니다. 이 외에도 자바스크립트 엔진(JavaScript)이라 불리는 특별한 프로그램이 들어 있는 모든 디바이스에서도 동작합니다. 브라우저에는 "자바스크립트 가상 머신" 이라 불리는 엔진이 내장되어 있습니다.
엔진은 어떻게 동작하나요?
1. 엔진이 스크립트를 읽습니다. ("파싱")
2. 읽어 들인 스크립트를 기계어로 전환합니다. ("컴파일")
3. 기계어로 전환된 코드가 실행됩니다.
-기계어로 전환되었기 때문에 실행 속도가 빠릅니다.
엔진은 프로세스 각 단계마다 최적화를 진행합니다. 심지어 컴파일이 끄타고 실행 중인 코드를 감시하면서, 이 코드로 흘러가는 데이터를 분석하고, 분석 결과를 토대로 기계어로 전환된 코드를 다시 최적화하기도 합니다. 이런 과정을 거치면 스크립트 실행 속도는 더욱 더 빨라집니다.
2. 브라우저에서 할 수 있는 일
자바스크립트의 능력은 실행 환경에 상당한 영향을 받습니다. Node.js 환경에서는 임의의 파일을 읽거나 쓰고, 네트워크 요청을 수행하는 함수를 지원합니다.
브라우저 환경에서는 웹페이지 조작, 클라이언트와 서버의 상호작용에 관한 모든 일을 할 수 있습니다.
브라우저에서 자바스크립트로 할 수 있는 일은 다음과 같습니다.
- 페이지에 새로운 HTML을 추가하거나 기존 HTML, 혹은 스타일 수정하기.
- 마우스 클릭이나 포인터의 움직임, 키보드 키 눌림 등과 같은 사용자 행동에 반응하기.
- 네트워크를 통해 원격 서버에 요청을 보내거나, 파일 다운로드, 업로드하기.
- 쿠키를 가져오거나 설정하기, 사용자에게 질문을 건네거나 메시지 보여주기.
- 클라이언트 측에 데이터 저장하기 ("로컬 스토리지")
3. 브라우저에서 할 수 없는 일
브라우저는 보안을 위해 자바스크립트의 기능에 제약을 걸어놓았습니다. 이런 제약은 악성 웹페이지가 개인 정보에 접근하거나 사용자의 데이터를 손상하는 것을 막기 위해 만들어졌습니다.
브라우저에서 자바스크립트로 할 수 없는 일은 다음과 같습니다.
-
웹페이지 내 스크립트는 디스크에 저장된 임의의 파일을 읽거나 쓰고, 복사하거나 실행할 때 제약을 받을 수 있습니다.
-운영체제가 지원하는 기능을 브라우저가 직접 쓰지 못하게 막혀있기 때문입니다.
-
브라우저 내 탭과 창은 대개 서로의 정보를 알 수 없습니다. 그런데 자바스크립트를 사용해 한 창에서 다른 창을 열 때는 예외가 적용딥니다. 하지만 이 경우에도 도메인이나 프로토콜, 포트가 다르다면 페이지에 접근할 수 없습니다.
-이런 제약사항을 "동일 출저 정책(Same Origin Policy)"이라 부릅니다.
이 정책을 피하려면 두 페이지는 데이터 교환에 동의해야 하고, 동의와 관련된 특수한 자바스크립트 코드를 포함하고 있어야 합니다.
-
자바스크립트를 이용하면 페이지를 생성한 서버와 쉽게 정보를 주고받을 수 있습니다. 하지만 타 사이트나 도메인에서 데이터를 받아오는 건 불가능합니다.
가능하다 할지라도 원격 서버에서 명확히 승인을 해줘야 합니다.
-브라우저 환경 밖, 예를 들어 서버라면 이러한 제약은 존재하지 않을 것입니다.
이런 제약사항은 사용자의 보안을 위해 만들어졌습니다. http://anysite.com에서 받아온 페이지가 http://gmail.com에서 받아온 페이지 상의 정보에 접근해 중요한 개인정보를 훔치는 걸 막기 위함입니다.
4. 자바스크립트만의 강점
- HTML/CSS와 완전히 통합할 수 있다.
- 간단한 일은 간단하게 처리할 수 있게 해준다.
- 모든 주요 브라우저에서 지원하고, 기본 언어로 사용된다.
이 세 가지 모두를 지원하는 브라우저 연관 기술은 자바스크립트뿐이다. 이런 특징 때문에 자바스크립트는 브라우저 인터페이스를 만들 때 가장 널리 사용되고 있다. 이 외에도 자바스크립트를 이용해 서버나 모바일 앱 등을 만드는 것도 가능하다.
5. 자바스크립트 "너머의" 언어들
근래에는 브라우저에서 실행 되기 전에 자바스크립트로 트랜스파일(trancepile, 변환) 할 수 있는 새로운 언어들이 많이 등장했습니다.
최신 툴을 사용하면 트랜스파일을 빠르고 명확하게 수행할 수 있습니다. 최신도구는 자바스크립트 이외의 언어로 작성한 코드를 "보이지 않는 곳에서" 자바스크립트로 자동 변환해줍니다.
자바스크립트로 트랜스파일이 가능한 언어
- CoffeeScript는 자바 스크립트를 위한 "syntactic sugar" 입니다.
짧은 문법을 도입하여 명료하고 이해하기 쉬운 코드를 작성할 수 있습니다.
- TypeScript는 개발을 단순화 하고 복잡한 시스템을 지원하려는 목적으로 "자료의 명시화(strict data typeScript)"에 집중해 만든 언어 입니다. Microsoft 개발
- Flow역시 자료형을 강제하는데,TypeScript와는 다른 방식을 사용합니다. Facebook 개발
- Dart는 모바일 앱과 같이 브라우저가 아닌 환경에서 동작하는 고유의 엔진을 가진 독자적 언어입니다. Google 개발
이 외에도 자바스트립트로 트랜스파일 할 수 있는 언어는 다양합니다.