JavaScript 는 왜 만들어졌을까?

최홍식·2025년 8월 15일
post-thumbnail

JavaScript 를 알아보자

프론트엔드 개발자로 일하면서 매일 사용하는 JavaScript,
하지만 이 언어가 어떻게 탄생했고 어떤 과정을 거쳐 발전해왔는지는 자세히 몰랐던 것 같습니다.

그래서 이번 글에서는 JavaScript의 탄생 배경과 표준화 과정과 발전사를 정리해봤습니다.

혹시 내용 중 틀린 부분이나 보완할 점이 있다면 댓글로 알려주시면 감사하겠습니다. 😭😭😭

JavaScript의 탄생 배경

탄생 시기와 배경

1995년 당시 웹은 HTML과 이미지, 그리고 단순한 링크로 구성된 정적인 페이지가 전부였습니다.
사용자는 페이지 내용을 읽고 링크를 클릭하는 것 이상의 상호작용을 할 수 없었죠.

이미지 설명 [최초의 웹 페이지]

하지만 웹이 점점 대중화되면서, 개발자들은 페이지 안에서 버튼 클릭 시 즉시 반응하거나 폼 입력값을 실시간으로 검증하는 등 동적인 동작이 필요하다고 느꼈습니다.

HTML과 CSS만으로는 이런 기능을 구현할 수 없었기에, 새로운 스크립트 언어의 필요성이 커졌습니다.

넷스케이프(Netscape)의 시도

당시 브라우저 시장을 이끌던 넷스케이프(Netscape)는 이러한 요구를 해결하기 위해,
가볍고 배우기 쉬운 브라우저 전용 스크립트 언어를 만들기로 합니다.

이미지 설명 [Netscape Navigator]

이 프로젝트를 맡은 엔지니어 브렌던 아이크(Brendan Eich)는 단 10일 만에 JavaScript를 완성했습니다.

급하게 만들어진 만큼 문법적 일관성이 부족했지만, "브라우저에서 간단한 사용자 반응을 구현"한다는 목표는 충분히 달성했습니다.

이름에 ‘Java’가 들어간 이유

원래 언어의 이름은 Mocha였고, 이후 LiveScript로 변경되었습니다.

하지만 당시 큰 인기를 끌던 프로그래밍 언어 Java의 브랜드 인지도를 활용하기 위해!

최종적으로 JavaScript라는 이름이 붙었습니다.

Java와 JavaScript는 일부 문법적 유사성을 제외하면 완전히 다른 언어입니다.
이 이름은 철저히 마케팅 전략이었습니다.


표준이 없던 시절과 ECMAScript의 등장

브라우저 전쟁과 호환성 문제

JavaScript 초창기에는 공식 표준이 없었습니다. 각 브라우저 벤더가 제각각 확장하면서 호환성 문제가 커졌죠.

  • 넷스케이프: JavaScript

  • 마이크로소프트(Internet Explorer): JScript

같은 기능도 브라우저마다 코드가 달랐고, 이로 인해 크로스 브라우징(브라우저 간 호환성) 문제가 심각해졌습니다.

개발자는 같은 웹 페이지를 만들기 위해 브라우저별로 코드를 수정·보완해야 했으며, 이 시기를 흔히 브라우저 전쟁(Browser Wars)이라고 부릅니다.

ECMAScript 표준의 등장

혼란을 해결하고자 1997년, 넷스케이프는 JavaScript를 국제 표준화 기구 ECMA International에 제출했고,ECMAScript(ES)라는 이름으로 표준이 제정되었습니다.

이 표준은 ECMA-262 문서에 정의되어 있으며, 브라우저들은 ECMA-262 명세를 기준으로 JavaScript를 구현하기 시작했습니다.

대표적인 ECMAScript 버전:

  • ES1 (1997): 최초 표준 버전

  • ES3 (1999): try/catch 예외 처리, 정규표현식 추가

  • ES5 (2009): JSON 지원, strict mode, Object.defineProperty 등 도입

  • ES6 / ES2015: let/const, 클래스, 모듈, 화살표 함수 등 대규모 개편

이미지 설명 [ECMA-262 아카이브]

⭐️ ECMA-262 공식 문서 확인하기


ES4, 결국 채택되지 못하다

혹시 ECMAScript 버전 목록을 보며 “ES3 다음에 왜 바로 ES5가 나오지?” 라고 궁금하셨나요?

그 이유는 ES4가 개발 도중 폐기되었기 때문입니다.

ES4(2000년대 초반 제안)는 JavaScript를 대규모로 개편하려는 시도였습니다.

계획안에는 아래와 같은 기능이 포함되어 있었습니다.

  • 클래스 기반 객체지향 문법

  • 정적 타입 시스템

  • 모듈 시스템

  • 제네릭, 네임스페이스, 데코레이터

  • 새로운 데이터 구조

변화의 폭이 너무 커서 기존 코드와의 호환성 문제가 심각할 것으로 예상되었고, 벤더 간 입장 차이도 컸습니다.

당시 마이크로소프트(IE)는 아예 개발에 참여하지 않았고, 모질라(파이어폭스)는 일부 기능만 시험적으로 구현했습니다.

결국 내부 합의가 이뤄지지 못해 2008년 TC39가 ES4 폐기를 결정했고, 이후 대규모 개편보다 호환성을 유지하며 점진적으로 발전하는 방향으로 전환되어 ES5(2009)가 탄생했습니다.


JavaScript 언어의 특징

브라우저에서 실행되는 언어

HTML과 CSS가 각각 구조와 스타일을 담당한다면, JavaScript는 동작(행동)을 담당합니다.

버튼 클릭, 입력 값 검증, 스크롤 이벤트, 서버 데이터 요청 등 사용자 상호작용이 가능합니다.

인터프리터 언어

JavaScript는 별도의 컴파일 과정 없이 브라우저가 바로 읽고 실행합니다.
덕분에 수정 후 새로고침만 하면 즉시 결과를 확인할 수 있어 개발 속도가 빠릅니다.

⭐️ 인터프리터 vs 컴파일러

구분인터프리터(Interpreter)컴파일러(Compiler)
실행 방식코드를 줄 단위로 읽으며 즉시 실행코드를 사전에 전체 변환 후 실행
변환 시점실행 중(런타임)실행 전(빌드/컴파일 타임)
속도 특성초기 실행이 빠름, 전체는 상대적으로 느릴 수 있음초기 준비가 느릴 수 있으나 실행은 빠름
에러 발견해당 줄에서 즉시컴파일 단계에서 일괄
대표 사례JavaScript*, Python, PHPC, C++, Go

⭐️ 현대 JavaScript 엔진은 인터프리터와 JIT을 혼합 사용

현대 JavaScript 엔진은 코드를 먼저 해석하며 실행을 시작하고,
실행 중 자주 사용되는(핫) 코드만 골라 JIT(Just-In-Time) 컴파일 방식으로 기계어로 변환해 최적화합니다.  

JIT은 실행 중에 필요한 부분만 즉시 컴파일하여 초기 실행 속도를 유지하면서,
반복 실행되는 코드의 성능을 높이는 기술입니다.

동적 타입 언어

JavaScript는 동적 타입 언어입니다. 즉, 변수의 타입이 컴파일 시점이 아니라 실행 시점(런타임)에 결정됩니다.

💡 런타임(Runtime): 프로그램이 실제로 실행되고 있는 시점을 뜻합니다.

변수 선언 시 타입을 명시할 필요가 없고, 같은 변수에 다른 타입(숫자, 문자열, 객체 등)의 값을 재할당할 수 있습니다.

let value = 10;      // 현재 타입: number
value = "Hello";     // 현재 타입: string
  • 장점 👍: 유연함, 빠른 프로토타이핑, 자유로운 타입 변환

  • 단점 👎: 런타임에 타입 변화로 인한 예상치 못한 버그 발생, 대규모 코드의 유지보수 난이도 상승

예시 👀:
아래와 같은 예시처럼 실행 시점에 타입이 달라지면, 덧셈 대신 문자열 결합이 일어날 수 있습니다.

function add(a, b) {
  return a + b;
}

console.log(add(2, 3));     // 5 (숫자 덧셈)
console.log(add(2, "3"));   // "23" (문자열 연결)

이러한 이유로 TypeScript 처럼 정적 타입 검사를 지원하는 언어를 함께 사용하는 경우가 많습니다.

멀티 패러다임 언어

JavaScript는 절차적·객체지향·함수형 프로그래밍을 모두 지원하는 멀티 패러다임 언어입니다.

상황에 맞춰 다양한 스타일을 혼합해 사용할 수 있어, 작은 스크립트부터 대규모 애플리케이션까지 유연하게 개발할 수 있습니다.

  • 절차적 프로그래밍: 명령어를 순서대로 작성하며 프로그램을 진행

  • 객체지향 프로그래밍: 객체와 클래스 중심으로 데이터와 동작을 묶어서 관리

  • 함수형 프로그래밍: 함수를 일급 객체로 취급하고, 부수효과를 최소화, 불변성 선호

마무리

JavaScript는 단순한 브라우저 스크립트에서 출발했지만, 표준화(ECMAScript/ECMA-262)를 통해 호환성과 일관성을 확보했고, 오늘날에는 웹·서버·모바일·데스크톱까지 아우르는 범용 프로그래밍 언어로 성장했습니다.

참고

  • MDN Web Docs – JavaScript, ECMAScript 가이드
  • JavaScript.info(ko.javascript.info) – 현대 자바스크립트 튜토리얼
  • ECMA-262(ECMAScript® Language Specification)
profile
안녕하세요, 프론트엔드 개발자 최홍식입니다.

0개의 댓글