JS의 소리를 찾아서 - Javascript의 탄생

목차

JS의 소리를 찾아서 시리즈

시리즈
JS의 소리를 찾아서 - 시작하면서
JS의 소리를 찾아서 - Javascript의 탄생
JS의 소리를 찾아서 - Javascript의 초기 실수와 선택들

이 글은 Javascript가 탄생하던 시절의 역사적인 배경에 대해 다룬다.

1. Javascript 이전의 상황

넷스케이프는 웹이 더 동적이어야 함을 빨리 깨달았습니다.

악셀 라우슈마이어 저, 한선용 옮김, '자바스크립트를 말하다' 97쪽, '자바스크립트는 어떻게 만들어졌는가?

1.1. 브라우저의 등장

1989년에서 1991년 사이에 팀 버너스-리가 개발자라면 한번쯤 들어보았을 HTML을 만들었다. 그리고 이 HTML로 만들어진 페이지를 볼 수 있는 브라우저 WorldWideWeb도 제작하여 배포했다.

하지만 당시에는 별로 큰 주목을 받지 못했다. 이것이 주목받기 시작한 건 1993년 1월 마크 앤드리슨과 에릭 비나가 만든 웹브라우저 모자이크가 출시되면서였다.

모자이크 브라우저는 기술적인 지식이 없는 사람들도 쉽게 사용할 수 있었고 윈도우즈를 지원했다. 그리고 사진 등의 멀티미디어를 페이지 내에서 볼 수 있었다. 기존 브라우저에서는 이미지 등의 멀티미디어를 보기 위해서 링크를 클릭하여 새 창에 이미지를 띄워야만 했다.

이런 여러 장점을 갖췄던 모자이크는 초기 웹이 널리 퍼져나가는 데에 큰 역할을 했다. 이 모자이크 브라우저를 개발한 리드 개발자들은 곧 인터넷의 역사에서 꽤나 자주 등장하는 넷스케이프를 설립한다.

넷스케이프는 1994년 12월 더 세련된 브라우저인 넷스케이프 네비게이터 1.0을 출시했다. 이는 빠르게 모자이크를 대체하고 주류가 되었다.

1.2. 브라우저에 멀티미디어 넣기

이제 웹 브라우저에서 HTML로 만들어진 문서를 보고 공유할 수 있게 되었다. 이는 엄청난 혁신이었다. 그러나 넷스케이프는 영리 기업이었기에 초기의 웹에 가치를 더하여 뭔가 돈을 벌 방법을 찾아야 했다.

그렇게 하기 위해서는 웹의 콘텐츠가 풍부해져야 했다. 그리고 그걸 위해서는 당연하게도 웹에서 멀티미디어를 잘 볼 수 있도록 해야 했다. 하지만 당시에는 멀티미디어를 페이지에 삽입하는 태그가 없었다. 따라서 사용자들은 이미지를 보려면 링크를 클릭하여 새 창에 이미지를 띄워야 했다.

이는 1993년 이미 마크 앤드리슨이 모자이크를 만들 때부터 고려되었다. 그는 그때부터 이미지를 페이지 중간에 삽입하여 보여주는 <img> 태그를 HTML 표준으로 제안하기도 했다. 또 1993년 마크 앤드리슨은 HTML 표준에 <img>가 들어가지 않았음에도 모자이크에 해당 기능을 포함시켰다. 모자이크는 그렇게 멀티미디어를 페이지 내부에 삽입할 수 있다는 장점과 함께 널리 퍼졌다.

그 다음에는 무엇을 해야 했을까? 당시에는 웹 페이지가 정적인 문서로만 존재했다. 이를 사용자와 상호작용할 수 있도록 하는 게 문제였다. 이 문제는 우리가 모두 아는 Javascript가 등장함으로써 해결된다.

하지만 당시에 넷스케이프는 그 문제에 당장 착수할 수 없었다. 당시에는 웹의 속도가 끔찍하게 느렸기에, 이런 환경 하에서 브라우저가 기본적인 멀티미디어를 더 잘 다룰 수 있게 하는 데에 집중해야 했기 때문이다. 당시 넷스케이프 1.0 브라우저에서는 사용자가 보려는 이미지를 로딩하는 동안 텍스트를 먼저 보여주는 최적화 등의 작업이 진행되었다.

1.3. 동적인 웹을 향해서

1995년 즈음에는 웹에서 멀티미디어를 다루는 작업이 어느 정도 안정되었다. 그래서 이제 넷스케이프는 웹에서 멀티미디어를 다루는 걸 넘어 웹 페이지와 사용자의 상호작용이 가능하도록 만들고자 했다. 넷스케이프의 창립자 마크 앤드리슨 또한 웹이 더 동적으로 동작해야 한다고 꾸준히 생각했다.

이 시기의 웹페이지들은 페이지가 로드되고 나면 서버와의 상호작용 없이는 동적으로 뭔가를 할 수 없었다. 당시에는 사용자가 폼에 입력한 값을 검증할 때조차도 서버에 데이터를 보내고 피드백을 받아야 했다!

당시의 HTML만으로는 페이지가 동적으로 움직이고 사용자와 제대로 상호작용하는 게 불가능했다. 웹 페이지에 동적인 무언가를 넣을 수 있게 해줄 언어가 필요했다. HTML에 프로그래밍 언어를 삽입할 수 있도록 해야 했다.

이제야 새로운 언어, 우리가 아는 Javascript의 이야기가 나온다.

2. Javascript가 없을 뻔한 이야기

이미 잘 알려져 있겠지만 1995년 5월, 나는 '자바와 비슷해야 하고', '초보자에게도 쉬워야 하며', '넷스케이프 브라우저 내의 거의 모든 것을 제어할 수 있어야 한다'는 강압적이고도 강제적인 관리 명령하에 열흘 만에 Javascript를 만들었다.

데이비드 허먼 저, 김준기 옮김, '이펙티브 자바스크립트'에 실린 브랜든 아이크의 추천사

2.1. 아이크의 등장

넷스케이프는 네비게이터 브라우저에 동적인 기능을 추가할 수 있는 언어를 구현하기로 했다. HTML에 프로그래밍 언어의 코드를 임베딩할 수 있게 하려고 한 것이다.

그리고 1995년 4월, 브랜든 아이크를 고용했다. 이 브랜든 아이크는 이후 Javascript의 창시자가 된다. 그가 고용된 이유는 Silicon Graphics Inc.와 MicroUnity라는 회사에서 "커널과 네트워크 작업을 할 수 있는 작은 특수목적 언어"를 만들어 본 경험이 있기 때문이었다.

하지만 아이크가 처음부터 새로운 언어를 만들고자 한 건 아니었다. 그는 기존 언어인 Scheme을 브라우저에 구현하겠다고 생각하고 있었다. 넷스케이프에서도 그렇게 하라고 이야기했다.

왜 Scheme이었는가 하면, 아이크가 Silicon Graphics Inc. 소속일 때 닉 톰슨이라는 사람이 아이크에게 SICP를 추천하여 읽게 했다고 한다. 그게 매우 감명깊었던 아이크는 리스프의 방언 중 하나인 Scheme을 사용하기로 결정했다. SICP는 표지의 마법사 그림을 따서 "마법사책"이라고도 불리는 프로그래밍 계의 고전인데 리스프로 쓰여 있다.

리스프의 방언이었던 Scheme은 매우 문법이 가벼웠고 동적이었으며 강력했고, 함수를 일급 객체로 다루는 함수형 패러다임을 받아들이고 있었다.

2.2. 상황의 전개

"Netscape plus Java kills Windows."

Marc Andreessen, 1995, 넷스케이프 회의

아이크는 1995년 4월 3일 넷스케이프의 클라이언트 팀으로 고용되었다. 하지만 고용되자마자 웹 서버와 프록시 제품들을 만드는 서버 그룹으로 옮겨져서 차세대 HTTP 관련 설계를 만드는 일을 한 달 정도 했다. 그래서 바로 웹에 필요한 스크립트 언어를 만드는 데 착수할 수 없었다.

그렇게 아이크가 Javascript를 만드는 작업을 시작하지 못하고 있는 동안 당시의 소프트웨어 회사들 간의 경쟁은 상황을 다른 구도로 끌고 간다.

넷스케이프는 1994년 말 마이크로소프트의 저가 인수 제안을 거절했다. 이후 넷스케이프 경영진은 마이크로소프트에게 직접적으로 공격받을 것으로 예상했고 따라서 먼저 웹 시장을 선점하려고 했다. 이를 위해서 썬 마이크로시스템즈와 손을 잡는다.

1995년 5월 23일 썬 마이크로시스템즈는 그 유명한 Java를 발표했다. 그리고 넷스케이프는 같은 날, Java를 넷스케이프 네비게이터 브라우저에서 사용할 수 있도록 하겠다는 발표를 했다. 이는 당시 마이크로소프트에 대항하기 위한 공동 전선이었다. 넷스케이프 창립자 마크 앤드리슨은 회의에서 "넷스케이프와 자바가 합쳐지면 윈도우를 이깁니다"라고 외쳤다.

여담이지만 지금 상황을 보면 알 수 있듯이 이런 시도들은 Javascript만 빼고 모두 실패하였다. 넷스케이프는 IE에 졌고 Java Applet은 실패했다. Javascript만 남아서 지금의 웹을 이끌고 있다.

아무튼 그런 이유로 브라우저에 넣을 언어에 대한 계획은 변경되었다. 사업 계획이나 출시 기간을 고려하면 Scheme, Python, Perl, Tcl같은 기존의 언어를 브라우저에 넣는 것은 불가능했다.

따라서 넷스케이프의 마크 앤드리슨과 썬의 빌 조이 등 "높으신 분들"은 어차피 브라우저에 들어갈 Java를 보완하는 작은 스크립트 언어를 설계하고 구현하기로 했다.

2.3. 초기의 토론

당시 넷스케이프 내부에서는 열띤 토론이 있었다. Java를 브라우저에 넣을 것인데 다른 언어가 왜 필요하냐는 것이었다. 이런 주장을 하는 사람들은 썬과 넷스케이프의 주류였는데 그들의 의문은 이랬다.

  1. Java는 브라우저에서 쓰일 스크립트 언어로 부적합한가?
  2. 왜 2개의 언어가 굳이 필요한가?
  3. 넷스케이프가 새로운 언어를 만들 만큼의 전문성이 있는가?

첫번째 의문은 쉽게 반박되었다. Java는 물론 지금도 주류를 차지하고 있을 만큼 좋은 언어다. 하지만 2024년 현재까지도 상대적으로 '쉬운 언어'의 포지션은 아니다. 하지만 브라우저에서는 누구나 간단하게 쓸 수 있는 스크립트 언어가 필요하다는 공감대가 있었다. 하지만 Java는 대부분의 웹 구성원들이 간단하게 사용하기에는 너무 복잡했다.

Java를 쓰려면 클래스와 메서드를 알아야 했고 타입과 변수, 리턴값에 대한 개념 등등이 모두 필요했다. 다음 코드는 Java로 Hello World를 출력하는 코드인데, 이 간단한 작업을 하는 코드조차 제대로 읽기 위해서는 클래스, 메서드, 패키지, 타입과 변수 등의 개념을 모두 알아야 한다.

// Java로 Hello World 출력하기
import java.util.*;

public class Main{
	public static void main(String args[]) {
    System.out.println("Hello World!");
	}
}
// Java로 Hello World 출력하기
import java.util.*;

public class Main{
	public static void main(String args[]) {
    System.out.println("Hello World!");
	}
}
// Java로 Hello World 출력하기
import java.util.*;

public class Main{
	public static void main(String args[]) {
    System.out.println("Hello World!");
	}
}
// Java로 Hello World 출력하기
import java.util.*;

public class Main{
	public static void main(String args[]) {
    System.out.println("Hello World!");
	}
}

따라서 넷스케이프는 더 가볍고, 배우기 쉬운 스크립트 언어가 필요하다고 판단했다. 지금도 Python등의 언어가 스크립트 언어라는 이유로 배우기 쉽다고 여겨지는데, 당시에도 가볍고 쉬운 언어를 위해서는 스크립트 언어가 트렌드였다고 한다.

두번째 의문은 경쟁자였던 마이크로소프트의 제품 전략을 인용하는 것으로 해결되었다. 당시 마이크로소프트는 전문 프로그래머들에게는 C++을, 아마추어나 디자이너 등 비전문가들에게는 Visual Basic을 제공하고 있었다. 즉 C++로 작성된 웹 컴포넌트들을 조립해 사용하기 위한 접착제 언어(원문은 glue language)로써 Visual Basic이 존재했던 것이다.

새로 만들어질 스크립트 언어 또한 Visual Basic과 비슷한 포지션이 될 것으로 보였다. 즉 새로 만들어질 스크립트 언어는 이미지나 플러그인, Java Applet 등으로 작성된 컴포넌트를 사용해서 컨텐츠를 만들 디자이너나 파트타임 프로그래머들을 위한 "초보자용" 언어였다.

Java와 Javascript를 마이크로소프트의 C++(전문 프로그래머를 위한 어려운 언어)과 Visual Basic(비전문가를 위한 쉬운 언어)에 대응되는 존재로 만들고자 한 것이다. 빌 조이(썬의 공동 창립자) 또한 그 아이디어에 동의했다.

이때 넷스케이프의 경영진들은 새로운 스크립트 언어는 Java의 보완재 같은 역할이므로 Java와 비슷한 문법을 가져야 한다고 결정했다. 이는 Perl, Python, TCL, Scheme과 같은 기존 언어들을 도입하는 선택지를 배제하도록 했다.

결국 이 토론은 Java와 새롭게 브라우저에 들어갈 언어가 서로 다른 목적을 가지고 있었기 때문으로 결론이 났다.

브라우저의 Java는 C++이나 Java를 기존에 사용했던 웹 컴포넌트 제작자들을 위한 언어였고, 브라우저에 들어갈 새로운 언어는 웹 디자이너와 같은 비전문가들을 위한 언어였던 것이다.

하지만 아직 세번째 의문이 남았다. 넷스케이프가 새로운 언어를 만들 만큼의 전문성이 있는가? 1995년 9월 출시될 넷스케이프 네비게이터 2.0에 새로운 언어가 들어갈 수 있겠는가?

이건 브랜든 아이크가 Mocha(당시 마크 앤드리슨이 지은 이름)를 만듦으로써 직접 증명해내야 했다.

3. Javascript의 첫 개발

3.1. 새로운 언어의 개발

아이크가 개발할 언어는 이제 Scheme과 비슷하면 안 되었다. 새로운 언어의 중요한 요구사항은 바로 'Java와 비슷해야 한다'는 거였다. Java의 보완재 역할을 해야 했기 때문이다.

하지만 그건 Java처럼 클래스 기반이 아니라 다른 방식으로 객체를 모델링해야 했다. 그리고 Java를 보완하는 언어로 포지셔닝되어 있었기 때문에 너무 고평가되면 안 되었다. 즉, 홍보를 위해서 Java와 비슷하면서도 약간 모자라 보여야 했다.

그런데 그런 것보다 가장 큰 문제가 있었다. 아이크에게는 시간이 없었다. 넷스케이프 네비게이터 2.0은 1995년 9월에 출시되어야 했고 새로운 스크립트 언어는 그 브라우저에 들어가야 했다. 즉 1995년 9월 전에 완성되어야 했다.

또한 이 새로운 스크립트 언어는 브라우저 개발에서 그렇게 우선순위가 높은 작업도 아니었기 때문에 시간도 많이 주어지지 않았다. 그래서 아이크는 1995년 5월, 단 10일만에 새로운 스크립트 언어의 프로토타입을 만들었다. 당연히 실수도 많았고 날림으로 개발된 부분도 많았다.

그래도 열흘의 프로토타이핑 기간 이후 이루어진 시연은 성공적이었다. 그리고 이는 넷스케이프 네비게이터 2.0의 프리알파 버전에 데모로 들어갔다.

3.2. Javascript의 이름에 관해서

Javascript의 처음 이름은 마크 앤드리슨이 지은 "Mocha"였다. 넷스케이프의 홍보팀은 잠재적인 상표권 충돌의 가능성을 보고 이후 이 이름을 "LiveScript"로 이름을 바꾸었다. 당시 넷스케이프에서 내놓은 다른 제품들의 이름도 "Live"로 시작했는데 이것들과 이름을 맞추려고 하는 의도도 있었다.

그 뒤 9월까지 아이크는 새로운 언어를 개선하고 네비게이터 2.0에 들어갈 수 있도록 준비했다. 그리고 1995년 9월 넷스케이프 네비게이터 2.0이 출시되었다. 여기에는 아이크의 새로운 언어가 LiveScript라는 이름으로 들어갔고 12월 초에 LiveScript는 Javascript로 이름이 바뀌었다.

참고로 새로운 언어의 이름이 결국 Javascript가 된 건 잘 알려진 대로 Java의 인기를 빌려서 인기를 얻기 위해서였다. 1995년 Java는 새로나온 핫한 언어였고 넷스케이프와 썬 마이크로시스템즈는 그 유명세를 이용하기로 한 것이다.

1995년 12월의 넷스케이프와 썬의 보도자료에서도 Javascript를 "객체 스크립트 언어"이면서 "Java 객체의 프로퍼티와 동작을 동적으로 수정할 수 있고" "쉬운 온라인 어플리케이션 개발을 위한 Java의 보완재"라고 소개하는 등 Java와의 연관성을 강조했다.