Chapter 1

JS 기초

  • 1.1 프로그래밍이란?
  • 1.2 프로그래밍 언어
  • 1.3 구문과 의미
  • 1.4 자바스크립트의 탄생과 표준화
  • 1.5 자바스크립트 성장의 역사
  • 1.6 자바스크립트의 특징
  • 1.7 자바스크립트 실행 환경

JS를 깊이 파기 전에 먼저 프로그래밍이 뭔지, JS가 어떤 언어인지, 어디서 돌아가는지부터 잡고 가자.

프로그래밍은 문법 암기가 아니라 컴퓨터에게 일을 시키기 위한 커뮤니케이션이야. 사람이 원하는 걸 컴퓨터가 이해할 수 있는 형태로 바꾸는 과정인데, 여기서 핵심은 문제 해결 능력이지. 코딩 그 자체보다, 문제를 정확히 이해하고 적절한 해법을 설계하는 능력이 더 중요해. 컴퓨터는 사람이 당연하다고 생각하는 것도 하나하나 설명해줘야 하니까, 모호하지 않게 정확히 사고하는 훈련이 필요해. 이걸 저자는 **Computational Thinking(컴퓨팅 사고)**이라고 불러.

사람이 기계어를 직접 쓸 수는 없으니까, 사람이 이해할 수 있는 약속된 구문으로 코드를 작성하고, 그걸 기계어로 변환하는 과정을 거치잖아. 이 변환을 하는 게 컴파일러 또는 인터프리터야. 프로그래밍 언어는 사람과 컴퓨터 사이의 번역 계층이라고 보면 돼. 그리고 자연어처럼 **구문(syntax)**과 **의미(semantics)**가 있어서, 문법적으로 맞는 코드라도 의미적으로 틀릴 수 있거든. 문법을 외우는 것보다 그 코드가 무슨 의미인지 이해하는 게 훨씬 중요하다는 거야.

그럼 자바스크립트는 어떻게 태어났을까? 1995년, 넷스케이프의 브렌던 아이크가 단 10일 만에 만든 언어야. 원래 이름은 Mocha, 그다음 LiveScript, 최종적으로 JavaScript. 자바와는 아무 관계가 없어 — 당시 자바의 인기에 편승하려는 마케팅 전략이었을 뿐이지. 넷스케이프와 마이크로소프트(JScript)가 각자 다른 방향으로 구현하면서 크로스 브라우저 호환성 문제가 심각해졌고, 결국 ECMA 인터내셔널에 표준화를 요청해서 ECMAScript라는 표준 사양이 탄생했어.

성장 흐름을 보면 이래. **Ajax(2005)**로 비동기 통신이 가능해지면서 Google Maps 같은 게 나왔고, **jQuery(2006)**가 DOM 조작을 쉽게 만들어 크로스 브라우저 이슈를 해소했지. **V8 엔진(2008)**을 구글이 만들면서 JS 성능이 확 올라갔고, 이걸 기반으로 **Node.js(2009)**가 나와서 브라우저 밖에서도 JS를 실행할 수 있게 됐어. 그리고 Angular, React, Vue 같은 SPA 프레임워크가 등장하면서 프론트엔드 아키텍처가 본격화된 거지.

ECMAScript는 **언어 사양(specification)**이고, 자바스크립트는 ECMAScript + 브라우저 API(DOM, BOM 등)를 포함하는 더 넓은 개념이야. JS는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이고, 인터프리터 언어이지만 V8 같은 모던 엔진은 JIT 컴파일로 성능을 끌어올려. 멀티 패러다임 언어로, 명령형/함수형/프로토타입 기반 객체지향을 모두 지원하지.

JS가 돌아가는 환경은 크게 두 가지야 — 브라우저Node.js. 둘 다 JS 엔진을 내장하고 있지만, 제공하는 API가 달라. 브라우저는 DOM, BOM, Canvas 같은 클라이언트 사이드 API를 제공하고, Node.js는 파일 시스템, HTTP 서버 같은 서버 사이드 API를 제공하거든. 크롬 개발자 도구(DevTools)의 Console 패널에서 바로 JS를 실행해볼 수 있고, Node.js를 설치하면 터미널에서 node 명령어로 REPL 환경을 사용하거나 파일을 직접 실행할 수 있어. npm은 Node.js의 패키지 매니저로, 수많은 오픈소스 라이브러리를 관리하지.


정리

1장 읽고 기억할 거 세 가지:

  1. 프로그래밍은 문법 암기가 아니라 문제 해결을 위한 사고 훈련이고, 구문보다 의미가 중요해.
  2. JS는 10일 만에 태어났지만, **ES6(2015)**를 전환점으로 표준화와 엔진 발전을 거치며 웹의 핵심 언어가 됐어.
  3. JS 실행 환경은 브라우저Node.js 두 가지고, 제공하는 API가 다르다는 걸 기억하자.