* 이 글은 Udemy의 "JavaScript 완벽 가이드 : 초급 + 고급 마스터 과정" 강의를 수강한 뒤 개인 복습을 위해 정리하는 글입니다.
(섹션 1: 1 ~10)
Javascript의 정의
정의 1)
런타임에 컴파일되는 동적, 약형 프로그래밍 언어로, 이는 브라우저에서 웹 페이지의 일부로 실행될 수도 있고 호스트 환경이라고 불리는 모든 머신에서 직접 실행될 수 있다.
정의 2)
Javascript는 웹페이지를 보다 동적으로 만들기 위해 생성되었다. 브라우저 내에서 페이지 내용을 직접 변경하기 위해 만들어졌고 최초에는 LiveScript라고 불렸으나 Java의 인기로 인해 JavaScript로 이름이 변경되었다.(하지만 Java와 Javascript와의 관계는 전혀 없다.)
웹페이지의 작동 과정
먼저 사용자는 웹페이지를 방문할 때 브라우저를 사용한다. 브라우저가 설치된 클라이언트인 컴퓨터를 사용해 URL이나 구글 검색을 통해 웹페이지를 로드한다. 즉 HTML 파일이 호스팅 된 웹페이지가 있는 인터넷의 컴퓨터로 전송이 되는데 이것을 요청이라고 부른다. 그리고 서버가 그 웹페이지를 로드해 다시 브라우저로 보내게 되는데, 이것은 응답이라고 부른다.
Javascript는 이 웹페이지의 동작 과정을 동적으로 만들어주기 위해 사용하게 된다. 즉, 페이지를 다시 로드하지 않고 뒤에서 요청을 보내고 데이터를 가져오는 등의 작업을 한다.
JavaScript가 브라우저에서 실행되는 과정
우리가 작성한 자바스크립트 코드가 브라우저에서 실행되도록 하려면 JavaScript Engine을 반드시 거친다. JavaScript Engine에서는 먼저 코드 분석을 한 뒤 코드를 머신에서 더 빠른 코드로 실행되는 코드로 컴파일하고 머신 코드가 실행된다. 이 과정을 거치면 웹페이지에 Javascript 코드가 나타나게 된다.
Javascript Engine은 Javascript 코드를 실행하려는 모든 환경에 내장되어있다. 예시로 Chrome에는 V8이라는 엔진이 내장되어있으며 Firefox에는 SpiderMonkey이라는 엔진이 내장되어있다. 오늘날 Javascript Engine은 많이 최적화가 되어있어 엔진이 컴파일되지 않은 코드를 실행하기 시작한 후에 더 빠른 실행을 시작하기 위해 이미 실행 중인 코드를 컴파일하여 동적으로 전환하는 작업이 일어나도록 할 수 있다.
오늘날의 컴퓨터는 동시에 여러 작업을 수행할 수 있도록 다중 스레드가 지원되지만 Javascript 코드 실행은 항상 운영 체제의 단일 스레드에서 진행된다.
Javascript의 특징 : Dynamic + Weakly Typed (동적 + 약형)
동적 특성을 가진다는 것은 미리 컴파일되지 않고 런타임에 분석 및 해석이 되어 컴파일되기 때문에 특정 작업의 수행이 가능해진다는 것을 의미한다.
약형 특성을 가진다는 것은 데이터 유형을 가정해 자동으로 유추될 수 있다는 것을 의미하며, 이는 데이터 유형이 코드 한 줄마다 변경될 수도 있다는 동적 특성과도 관련 있다.
브라우저 환경에서의 JavaScript 실행 vs 호스팅 된 환경에서의 JavaScript 실행
브라우저 환경에서는 JavaScript를 실행하면 시각적 피드백을 받으면서 작업을 확인할 수 있다는 장점이 있지만 JavaScript가 브라우저 환경에서 실행될 때 할 수 없는 작업이 있다. 보안 상의 이유로 로컬 파일 시스템에 액세스 할 수 없다는 것이다. 만약 로컬 파일 시스템에 액세스를 할 수 있다면, 방문하는 모든 웹페이지가 우리의 파일 시스템을 읽을 수 있고 컴퓨터 파일을 삭제할 수 있는 등의 끔찍한 일이 일어날 수도 있다. 이는 소위 샌드박스에서 실행이 되는데 이는 운영 체제 등과 상호 작용을 할 수 없다.
반면 JavaScript는 브라우저를 통하지 않고 다른 환경에서도 코드를 실행할 수도 있다. 구글의 JavaScript Engine V8은 어디에서나 JavaScript를 실행할 수 있도록 추출이 되어 만일 브라우저에 엔진이 있다면 엔진을 브라우저에서 떼어내 독립적인 도구로 이용해 다른 곳에 직접 JavaScript를 실행시킬 수 있다. 이와 같은 기능을 제공하는 도구를 Node.js라고 한다.
Node.js는 어느 컴퓨터에서나 실행할 수 있고 웹 백엔드와 웹 서버를 구축하는 데에도 자주 사용된다. 이는 사용자의 브라우저의 클라이언트가 아닌 서버 측에서 실행되는데 컴퓨터에서 바로 실행되기 때문에 로컬 파일 시스템으로의 접근과 파일 작성 등의 작업이 가능하다. 따라서 브라우저 환경에서의 JavaScript와 달리 Node.js 코드는 웹페이지에 들어가면 실행되는 식으로 작동되는 것이 아니라 사용자가 직접 실행해야 된다. 이는 실행이 되고 있는 머신 내의 파일 시스템에서만 접근이 가능하다. 또한 운영 체제 등과도 상호 작용을 할 수 있게 된다. 하지만 로드된 웹페이지에 직접 접근할 수 없기 때문에 브라우저 환경에서 JavaScript를 이용할 때와 같이 HTML이나 CSS를 조작할 수는 없다. 즉 브라우저 환경과 접근할 수 있는 기능이 서로 반대가 된다.
'Study Record > Javascript' 카테고리의 다른 글
JavaScript 데이터 타입 (0) | 2022.06.20 |
---|---|
JavaScript 변수와 연산자 (0) | 2022.06.15 |
웹사이트에 JavaScript 추가하기 (0) | 2022.06.15 |
Java와 JavaScript의 차이점, 클라이언트 측과 서버 측 JavaScript의 차이점 (0) | 2022.06.15 |
Javascript 공부 기록 (0) | 2022.06.13 |