브라우저엔 '자바스크립트 가상 머신’이라 불리는 엔진이 내장되어 있다.
- Chrome, Opera : V8
- Firefox : SpiderMonkey
- IE : Trident, Chakra(버전에 따라)
- Microsoft Edg : ChakraCore
- Safari : SquirrelFish
엔진은 어떻게 동작하나요?(기본원리)
1. 파싱 : 엔진(브라우저라면 내장 엔진)이 스크립트를 읽는다.
2. 컴파일 : 읽어 들인 스크립트를 기계어로 전환한다.
3. 실행 : 기계어로 전환된 코드가 실행되고 기계어로 전환되었기 때문에 실행 속도가 빠르다.
엔진은 프로세스 각 단계마다 최적화를 진행하여 스크립트 실행 속도는 더욱더 빨라지게 한다.
브라우저에서 자바스크립트로 할 수 있는 일은 다음과 같다.
브라우저는 개인 정보에 접근하거나 사용자의 데이터를 손상하는 것을 막기 위해 자바스크립트의 기능에 제약을 걸어놓았다.
웹페이지 내 스크립트는 디스크에 저장된 임의의 파일을 읽거나 쓰고, 복사하거나 실행(운영체제가 지원하는 기능)할 때 제약을 받을 수 있다.
모던 브라우저를 사용하면 파일을 다룰 순 있으나 접근은 제한되어 있다. 사용자가 브라우저 창에 파일을 ‘끌어다 두거나 인풋태그를 통해 파일을 선택할 때와 같이 특정 상황에서만 파일 접근을 허용한다.
카메라나 마이크 같은 디바이스와 상호 작용하려면 사용자의 명시적인 허가가 있어야 한다.
브라우저 내 탭과 창은 대개 서로의 정보를 알 수 없다. 그런데 자바스크립트를 사용해 한 창에서 다른 창을 열 때는 예외가 적용된다. 하지만 이 경우에도 도메인이나 프로토콜, 포트가 다르다면 페이지에 접근할 수 없다.
http://anysite.com 에서 받아온 페이지가 http://gmail.com 에서 받아온 페이지 상의 정보에 접근해 중요한 개인정보를 훔치는 걸 막기 위함이다.
자바스크립트를 이용하면 페이지를 생성한 서버와 쉽게 정보를 주고받을 수 있지만 타 사이트나 도메인에서 데이터를 받아오는 건 불가능하다. 가능하다 할지라도 원격 서버에서 명확히 승인을 해줘야 한다(HTTP 헤더 등을 이용).
모던 브라우저에선 추가 권한 허가를 요청하는 플러그인이나 익스텐션 설치가 허용된다.
이 세 가지 모두를 지원하는 브라우저 연관 기술은 자바스크립트뿐이다.
이런 특징 때문에 자바스크립트는 브라우저 인터페이스를 만들 때 가장 널리 사용되고 있다.
이 외에도 자바스크립트를 이용해 서버나 모바일 앱 등을 만드는 것도 가능하다.
근래엔 브라우저에서 실행 되기 전에 자바스크립트로 트랜스파일(transpile, 변환) 할 수 있는 새로운 언어들이 많이 등장했다.
최신 툴을 사용하면 트랜스파일을 빠르고 명확하게 수행할 수 있다. 최신도구는 자바스크립트 이외의 언어로 작성한 코드를 ‘보이지 않는 곳에서’ 자바스크립트로 자동 변환해준다.
이 외에도 자바스크립트로 트랜스파일 할 수 있는 언어는 다양하다. 개발 언어로 이런 언어 중 하나를 택한다고 하더라도 자신이 무엇을 하고 있는지 이해하려면 결국엔 자바스크립트를 알아야 한다.
참고자료 : 자바스크립트란?