본문 바로가기

[모던JS] 001. [소개] 자바스크립트란?

codeConnection 2024. 3. 23.

원문

정의

자바스크립트란?

자바스크립트(JavaScript)란 웹페이지에 생동감을 불어 넣기 위해 만들어진 프로그래밍 언어이다.

자바스크립트는 최초 LiveScript라는 이름으로 불렸다. 그러나 당시에 Java라는 프로그래밍 언어가 인기가 좋았기에 이에 편승하기 위해 자바스크립트라고 이름을 바꾸었다.

스크립트란?

스크립트(script) : 자바스크립트로 작성한 프로그램을 스크립트라고 부른다.

스크립트는 HTML로 작성된 웹 페이지의 HTML 안에 작성할 수 있는데 웹 페이지를 불러올 때 스크립트가 자동으로 실행된다.

스크립트는 다른 언어처럼 별도의 컴파일이 필요 없다.

자바스크립트의 동작

자바스크립트는 웹 브라우저에서 실행할 수 있고, 서버에서도 실행할 수 있다. 그리고 자바스크립트 엔진(JavaScript Engine)이라 불리는 프로그램이 있는 모든 디바이스에서도 실행 가능하다.

대표적인 자바스크립트 엔진은 V8(크롬, 오페라 브라우저), SpiderMonkey(파이어폭스), IE(Trident, Chakra) 등이 있다.

위 엔진은 자바스크립트로 개발할 때 OO 기능은 V8 엔진에서만 작동한다라는 등의 문구를 볼 때 접하므로 알고 있으면 좋다.

자바스크립트 엔진의 동작 순서

  1. 파싱(Parsing)
    • 코드를 토큰(Token)으로 분해하고 문법 구조를 해석한다.
    • 엔진(또는 브라우저 내장 엔진)이 스크립트를 읽는다.
  2. 컴파일(COmpilation)
    • 엔진이 파싱을 통해 읽어 들인 스크립트를 기계어로 전환한다.
  3. 실행 (Runtime)
    • 기계어로 전환된 코드가 실행된다.

브라우저에서 할 수 있는 일과 할 수 없는 일

자바스크립트는 저수준 언어이다. 즉 안전한 언어이다. 고수준 언어처럼 기계 자체를 컨트롤 하지 않는다. 메모리나 CPU를 조작하지 않는다는 뜻이다.

애초체 자바스크립트는 웹 브라우저에서 동작을 위해 만든 언어이기 때문에 위의 과정이 필요 없다.

할 수 있는 일

  • HTML 페이지에 새로운 HTML을 추가하거나 기존의 HTML을 수정하기, CSS 수정하기
  • 마우스 클릭, 포인터 움직임, 키보드 키 눌림 등과 같은 사용자 행동에 반응하기
  • 네트워크를 통해 원격 서버에 요청을 보내거나 파일 다운로드, 업로드 하기 (AJAX, COMET 등)
  • 쿠키를 가져오거나 설정하기. 사용자에게 질문을 건네거나 메시지 보여주기.
  • 클라이언트 측에 데이터 저장하기(로컬 스토리지)

할 수 없는 일

브라우저는 최소한의 보안을 위해 몇 가지 기능 제약을 걸었다. 주로 사용자의 개인정보 보호와 관련한 내용이다.

  • 사용자의 디스크에 저장된 파일을 읽거나 쓰는 등의 행위를 할 수 없다.
    • 다만 파일을 다루지 못하는 것은 아니다. 사용자가 직접 브라우저에 파일을 업로드 할 때는 파일을 다룰 순 있다. 하지만 그 파일에 접근할 순 없다.
  • 카메라, 마이크를 사용할 때는 사용자의 권한 허가를 무조건 받아야 한다.
  • 동일 출처 정책(Same Origin Policy) : 브라우저에서 여러 탭이나 창을 열었을 때 다른 탭의 내용에 접근할 수 없다. 다만 자바스크립트를 이용해서 한 창에서 다른 창을 열 때는 접근할 순 있지만 이 경우에도 도메인이나 프로토콜, 포트가 다르면 접근할 수 없다. 이 정책을 피해서 코딩하는 방법은 심화내용에서 다룬다.
  • 다른 사이트의 도메인에서 데이터를 얻는 것은 불가능하다. 가능하다 할지라도 원격 서버에서 권한을 허가해주어야만 한다.

자바스크립트만의 강점

Python과 같은 언어도 Django등의 프레임 워크로 웹 페이지를 만들 수 있지만, 자바스크립트만으로 할 수 있는 장점들이 있다.

  • HTML, CSS와 완전히 통합할 수 있음.
  • 다른 언어에 비해 웹 페이지를 동작시킬 때 더 간결함.
  • 모든 웹 브라우저에서 지원하고 표준 언어로 사용됨.

자바스크립트 너머의 언어들

자바스크립트가 모든 개발자의 니즈를 충족하지 못하여 자바스크립트에서 파생된 언어들이 있다.

이런 언어들로 작성하면 자바스크립트로 변환(transpile)해주기 때문에 동일하게 사용할 수 있다.

  • CoffeeScript : 짧은 문법, 쉬운 코드. Ruby 개발자들이 주로 사용
  • TypeScript : MS에서 개발한 언어. JavaScript와의 큰 차이점은 변수를 선언할 때 타입까지 같이 선언해야 한다는 점. 그래서 코드를 읽을 때 자료형이 무엇인지 JavaScript는 개발자가 직접 캐치해야 하지만 타입스크립트는 명확하다. 단 JavaScript는 자료형을 선언하지 않는 만큼 나중에 형 변환을 하며 유연하게 사용할 수 있는데 타입스크립트는 불가능하다.
  • Flow : 페이스북 개발. 타입스크립트처럼 자료형 명시를 강제하나 방식은 타입스크립트와는 다르다.
  • Dart : 구글 개발. 모바일 앱과 같이 브라우저가 아닌 환경에서도 동작할 수 있도록 고유의 엔진을 가진 언어.

댓글