이번에 자바스크립트를 톺아볼 것이다.
톺다: 샅샅이 뒤지거나 더듬어 찾거나 살피다.
톺다라는 말을 처음들어 보는데 우리나라 말에 참 여러 단어가 있다는 게 놀랍긴 하다.
아무튼 JavaScript에 대해 자세히 알아볼 차례다. Node.js로 게임 서버를 만든다 해서 JavaScript를 사용할 것이라는 건 알지만, 왜 JavaScript가 게임 서버로 이용이 가능한지는 아직 모르고 있었다.
아마 이 글을 보고 나서 JavaScript를 한 번 제대로 공부할 시간이 될 수 있을 것 같다.
먼저 자바스크립트의 정의를 보면 '웹페이지에 생동감을 불어넣기 위해 만들어진 프로그래밍 언어'라고 한다.
실제로 자바스크립트를 이용해 본 것은 거의 웹페이지가 유일하기 때문에 이 정의에 대해서는 부정할 게 없다고 생각한다.
자바스크립트는 웹페이지의 HTML 안에 작성 가능하고 스크립트라는 프로그램으로 분리 가능하다.
※ 왜 이름이 자바스크립트인가?
- 원래는 자바스크립트가 아니라 "LiveScript"라는 이름으로 불렸다고 한다. 그런데 만들어질 당시에 자바의 인기가 엄청나서 자바의 동생이라는 컨셉으로 언어를 홍보하면 좋겠다는 생각으로 이름을 자바스크립트로 바꿧다고 한다.
이거는 항상 궁금해 왔는데 그냥 단순히 자바의 이름빨을 가지고 온거였다는게 조금 어이가 없다.
자바스크립트는 브라우저 뿐만 아니라 서버에서도 실행이 가능하다고 한다. 또한 자바스크립트 엔진이라 불리는 특별한 프로그램이 들어 있는 모든 디바이스에서 동작이 가능하다.
모던 자바스크립트는 '안전한' 프로그래밍 언어다.
그 이유는 메모리나 CPU 같은 저수준의 영역의 조작이 필요하지 않은 브라우저를 대상으로 만든 언어란 것이다.
자바스크립트의 능력은 실행 환경에 상당한 영향을 받는다.
예를 들어 Node.js 환경에선 임의 파일을 읽거나 쓰고, 네트워크 요청을 수행하는 함수를 지원한다. 그리고 브라우저 환경에선 웹페이지의 조작이나 클라이언트와 서버의 상호작용에 대한 모든 일을 할 수 있다.
그렇다면 Node.js는 무엇인가?
Node.js는 JavaScript의 실행환경이라고 한다. (JavaScript 코드를 브라우저 밖에서 실행하게 해주는 런타임 환경)
사실 뒤에 .js가 붙기 때문에 Node.js 든 Express.js든 Vue.js든 모두 같은 프레임워크 비스무리 한게 아닌가 라고 생각했는데, 그게 아니었던 것이다.
브라우저에서 자바스크립트로 할 수 있는 일들
- 페이지에 새로운 HTML 추가 or 기존 HTML이나 스타일 수정
- 마우스 클릭, 포인터의 움직임, 키보드 키 눌림 등 사용자 행동에 반응
- 네트워크 통해 원격 서버에 요청 보내거나, 파일 다운로드, 업로드하기 (AJAX, COMET 같은 기술)
- 쿠키를 가져오거나 설정하기. 사용자에게 질문을 건네거나 메시지 보여주기
- 클라이언트 측에 데이터 저장 (로컬 저장소)
여기서 위의 두개 제외하면 제대로 해본 적이 없어서 잘은 모르겠다.
브라우저는 보안을 위해 자바스크립트의 기능에 제약을 걸어놓았다. 이런 제약은 개인정보 접근이나 사용자의 데이터 손상을 방지하기 위해 만들어져있다.
브라우저의 제약사항
- 웹페이지 내 스크립트는 디스크에 저장된 임의 파일을 읽거나 쓰고, 복사나 실행할 때 제약을 받는다. 이게 운영체제에서 지원하는 기능을 브라우저에서 못하게 막는다는 것이다.
(위에 자바스크립트는 Node.js 환경에선 임의 파일 읽거나 쓰고, 네트워크 요청을 수행하는 함수를 지원한다고 했다. 서버를 열어야 하기 때문에, 파일을 읽고 쓰는 것은 당연한 것이다.)- 자바스크립트를 이용하면 페이지 생성한 서버와 쉽게 정보를 주고 받을 수 있다. 하지만 타 사이트나 도메인에서 데이터 받아오는 것은 불가능하다. 가능하다 해도 원격 서버에서 명확히 승인을 해줘야 한다.
자바스크립트가 브라우저에서 할 수 없는 일은 보안 사항 때문에 기능을 줄인 것으로 볼 수 있는 것 같다.
웹페이지를 만드는 자바스크립트의 문법은 더 다양한 기능을 만들지 못하기 때문에 모든 사람을 만족시키지 않는다.
그래서 자바스크립트로 트랜스파일(변환)할 수 있는 언어들이 많이 등장했다. 자바스크립트 베이스의 언어들이라 보면 된다.
가장 대표적으로 보는 언어는 MS에서 개발한 TypeScript로 개발을 단순화하고 복잡한 시스템을 지원한다고 한다.
다양한 변환된 언더들이 존재하지만, 어떤 변환된 언어를 공부한다 해도 결국엔 자바스크립트가 베이스기 때문에 자바스크립트를 공부해야 한다.
Express.js
Nest.js
Nest.js에 대해
https://ghost.codersera.com/blog/nuxt-next-nest-confused/