배경
그린에서 나무를 거쳐 커피가 되기까지?
자바는 1991년 6월 Sun Microsystem의 그린팀에서 부터 시작되었다.
그린팀은 자바의 창시자로 잘 알려져 있는 제임스 고슬링(James Gosling)과 패트릭 노튼(Patrick Naughton), 마이크 쉐리든(Mike Sheridan)으로 이루어져 있었으며 초기 개발 목적은 현재와 많이 달랐다.
현재 자바는 인터넷 웹서비스 또는 안드로이드와 같은 모바일 환경, 게임, 비즈니스 솔루션 등등 다양한 분야에서 사용되지만 본래 자바는 셋톱박스와 같은 가전제품에 내장될 소프트웨어를 위한 플랫폼 독립적인 언어였다. TV와 시청자가 서로 상호 작용할 수 있는 Interactive한 환경을 만들기 위해 시작된 것이다. 지금은 스마트 TV, IPTV가 너무 대중화되어 있지만 당시만 해도 이 생각은 매우 앞서 나가는 것이었다고 한다.
맨 처음 제임스 고슬링은 이것을 "그린톡"이라고 불렀고 파일 확장자는 .gt였다. 그 이후 1992년 제임스 고슬링에 의해 이 언어의 이름은 "오크(Oak)"로 명칭이 변경되었다. 한국어로는 참나무를 뜻하는 오크로 이름을 붙인 이유는 사무실 밖에 있던 나무를 보고 지은 이름이라고 한다.
(참나무 즉, 도토리가 열리는 나무들은 힘을 상징하기도 하고 많은 국가로부터 나라의 국화로 선정되기도 한 나무라고 한다. 이런 멋진 의미를 가득 담고 있는 이유일 줄 알았는데 생각보다 시시한 이유라 더 재밌는 것 같고 언어가 탄생한 사무실의 밖에 있던 나무라고 하니 더 의미 있는 것 같기도 하다)
그 후 1995년 오크는 다시 한 번 이름을 변경하게 되는데 이미 오크라는 이름으로 상표 등록이 되어 있었기 때문이었다.
새로운 이름을 선택하기 위해 프로젝트팀은 모임을 가지게 되었다고 한다.
제안된 이름은 'dynamic', 'revolutionary', 'silk', 'jolt', 'DNA' 등이었다고 하는데 팀 일원들은 이 언어의 에센스(혁명적이고 굉장하고 엄청나고 끝내주는?)를 보여줄 만하고 쉬운 철자와 말하기 재미있는 무언가를 원했다고 한다.
제임스 고슬링은 아래와 같이 말했다고 한다.
JAVA는 Silk와 더불어 최고의 선택 중 하나였고
자바라는 이름은 매우 독특했기 때문에 팀 멤버의 대부분이 JAVA를 선호했다.
자바는 처음 커피가 생산된 인도네시아의 섬이라고 한다. 자바섬이라고 불리고 자바 섬에서 나온 커피를 자바 커피했다고 한다.
그리고 제임스 고슬링은 자바 커피를 하루에 10잔 이상 마시는 자바 커피 애호가였다고 한다.
한 번만 쓰고 어디서든 실행하자! (Write Once Run Anywhere!)
처음 자바의 목적은 셋톱박스, 리모컨, 전자레인지 등 가전제품에 내장될 소프트웨어를 위한 플랫폼(Platform) 독립적인(independent) 언어였다. 플랫폼 독립적이라는 말은 자바를 배웠다면 한 번씩 들어봤을 문장이다.
과거에는 대부분의 컴퓨터 언어가 특수한 아키텍처나 OS에 맞게 컴파일되도록 설계가 되어있었다. 자바 이전에 객체지향의 개념을 도입한 C++은 모든 CPU에 맞게 컴파일될 수 있었지만 해당 CPU에 맞는 컴파일러가 필요했다. 하지만 각각의 환경을 위한 컴파일러 개발 비용은 비싸고 오랜 시간이 소요된다는 문제가 있었고 좀 더 나은 방식을 찾기 위해 제임스 고슬링과 그 동료들은 다양한 환경의 CPU에서 실행될 수 있는 이식성이 뛰어난 Cross Platform 언어 개발에 착수하게 된 것이다. 이렇게 Write Once, Run Anywhere (WORA)라는 모토가 만들어진 것이다.
킹메이커, 인터넷
과거부터 효율적이며 플랫폼 독립적인 이식성에 대한 요구는 있었으나 구현이 어려웠으며 항상 다른 문제들에 의해 뒷전으로 밀려나 있었다. 그러나 인터넷과 월드 와이드 웹(WWW)의 출현으로 이식성 문제가 다시 대두되었다. 인터넷은 다양한 컴퓨터, 운영 체제, 그리고 CPU로 넘쳐나는 광대한 분산형 시스템이기 때문에 우선순위에서도 밀려나 있었던 이식성은 가장 중요한 사안이 되어버린 것이다.
자바의 발전 역사에서 인터넷과 웹은 빼놓을 없는 주제 중 하나이다. 인터넷의 도움으로 자바는 프로그래밍 최전선에 자리 잡게 되었고 인터넷 또한 자바 애플릿(Java Applets)에 많은 영향을 받았기 때문이다.
1993년 경, 자바 프로젝트팀은 임베디드(Embeded) 제어기에서 사용할 코드를 개발할 때 자주 나타나던 이식성의 문제가 인터넷을 위한 코드를 개발할 때도 나타난다는 사실을 알게 되었다. 이리하여 자바의 초점은 가전제품에서 인터넷으로 옮겨지게 된 것이다. 그 후 1998년 발표된 J2SE 1.2에서는 웹에서도 자바를 돌릴 수 있게 해 주는 자바 애플릿(Java Applet)이 추가되며, 자바의 인기는 급상승하게 된다. 엄청난 통찰력이 아닐 수 없다. 만일 자바가 개발되던 시기에 웹이 형태를 갖추지 못했다면, 자바는 가전제품의 프로그램 개발에만 쓰이는 언어로 남았을 것이다. 그러나 이식 가능한 언어를 요구하는 웹의 출현으로 인해 자바는 당시 컴퓨터 언어 설계 프로젝트의 선두로 부상하게 된다. 따라서 자바 언어 설계에 최초의 영감을 제공한 것은 아키텍처 중립적인 프로그래밍 언어에 대한 요구이지만 궁극적으로 자바가 대성공을 거두도록 이끈 것은 인터넷이라고 해야 할 것이다.
자바 애플릿 (Java Applets)
자바 애플릿은 응용을 뜻하는 application과 작다는 의미의 접미사 let을 조합한 합성어로 인터넷상에서 전송되고, 자바를 지원하는 웹브라우저에서 실행될 수 있도록 설계된 프로그램이다. 다른 많은 컴퓨터 언어로도 애플리케이션을 개발할 수 있지만 애플릿은 오직 자바로만 개발할 수 있다. 자바는 애플릿을 통해 웹 상의 두 가지 곤란한 문제, 즉 보안과 이식성을 해결하였다.
- 보안성: 네트워크 사용자는 프로그램을 다운로드할 때마다 바이러스에 감염될 위험을 안고 있다. 때문에 자바 이전에는 많은 사용자들이 실행 가능한 프로그램을 자주 다운로드하지 않고, 다운로드한 경우라도 그것을 실행하기 전에 바이러스 검사를 했었다. 이렇게 하더라도 대부분의 사용자는 시스템이 바이러스에 감염되거나 악성 프로그램이 시스템에서 실행되어 개인정보를 빼돌리는 것을 우려했다. 자바는 사용자의 컴퓨터와 네트워크 애플리케이션 사이에 방화벽(firewall)을 제공하여 이 문제를 해결했다. 자바를 지원하는 웹 브라우저를 사용하면 바이러스 감염에 대한 두려움 없이 안전하게 자바 애플릿을 다운로드할 수 있다.
- 이식성: 인터넷은 다양한 컴퓨터, 운영 체제, 그리고 CPU로 넘쳐나는 광대한 분산형 시스템이기 때문에 다양한 플랫폼에 동적으로 다운로드되는 프로그램을 위해서는 이식성 있는 실행코드를 생성하는 방법이 필요했고 자바는 이를 해결했다.
당시에는 엄청났지만 애플릿 역시 시간이 지날수록 보안 문제가 있었고 자바 가상 머신(JVM)을 통해 실행되어 비교적 속도가 느리다는 단점이 있었다. 또한 웹브라우저가 점점 발전하고 거기다 HTML5, Javascript가 발전하면서 더 이상 추가적인 설치가 필요하고 번거로운 애플릿, 플래시 같은 웹 플러그인은 그 장점을 점점 잃어갔다.
모질라 재단에서 2015년 10월 파이어폭스에서 NPAPI 플러그인 지원을 중단하겠다는 발표를 했고, 곧이어 오라클에서는 2016년 1월 Java 9부터 애플릿을 위한 자바 플러그인 지원을 중단하겠다고 발표했다. 따라서 자바 애플릿은 Java 9 이후 역사 속으로 사라질 예정이며, 이후 자바 애플릿이 했던 역할은 유사한 기술인 Java Web Start 가 대신하게 된다.
JDK와 JRE
자바를 처음 설치하면 폴더 아래 JDK와 JRE가 각각 설치되는 것을 볼 수 있다.
Java로 프로그램을 실행을 위해서는 JRE가 필요하고 개발을 위해서는 JDK가 필요하다.
이때 JDK는 개발을 위해서 당연히 JRE를 포함하고 있다.
JRE(Java Runtime Environment)란
자바 실행 환경(Java Runtime Environment)의 약자로 자바로 만들어진 프로그램을 실행시키는데 필요한 라이브러리들과 각종 API, 자바 가상 머신(JVM)을 포함한다. JRE로는 자바를 개발할 수는 없지만 실행할 수는 있다.
JDK(Java Development Kit)란
자바 개발 키트(Java Development Kit)의 약자로 개발자들이 자바로 개발하는 데 사용된다. JDK안에는 개발에 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고 실행을 위해 JRE도 포함되어 있다
주요 특징
운영체제 독립적
자바는 처음부터 'Write One Run Anywhere'이라는 철학을 가지고 개발되었기 때문에 자바의 개발환경과 배포 환경이 달라도 프로그램을 다시 컴파일할 필요가 없다. 그리고 이것이 가능한 이유는 자바가 자바 가상 머신(JVM, Java Virtual Machine)에서 돌아가기 때문이다. 자바 가상 머신은 자바 컴파일러를 통해 사용자의 코드를 Byte 코드로 변환한다. 따라서 이론적으로 모든 자바 프로그램은 CPU나 운영체제의 종류와 무관하게 동일하게 동작한다.
객체지향언어 (OOP, Object - Oriented Programming language)
자바는 객체 지향 프로그래밍 언어로서 객체 지향의 특징인 상속, 캡슐화, 다형성, 추상화가 잘 적용되어 있는 언어이다.
이 특징들은 코드의 재사용성을 증가하고 유지보수를 용이하게 만든다.
GC를 통한 자동 메모리 관리
C, C++ 언어에서는 생성된 객체를 개발자가 직접 코드를 작성해 제거해야 했지만 자바에서는 자체적으로 메모리 누수 방지하기 위하여 사용하지 않는 메모리 영역을 처리해준다. 이 역할을 담당하는 것이 GC(Garbage Collector)이며 덕분에 개발자는 메모리 관리에 대한 부담을 덜고 프로그래밍에 더욱 집중할 수 있다.
네트워크, 분산처리의 지원
다양한 Java API 라이브러리들은 네트워크 및 분산처리와 관련된 기능을 쉽게 개발할 수 있도록 지원한다.
이러한 특징으로 인해 자바 언어는 대규모 분산처리 환경 등의 프로그래밍에 적합하다.
멀티쓰레드의 지원
하나의 프로그램이 동시에 여러 작업을 처리하거나 대용량 작업을 빠르게 처리하기 위해 병렬처리를 하려면 멀티 스레드 프로그래밍이 필요하다. 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하기 때문에 실행되는 운영체제와 관련 없이 멀티 스레드를 쉽게 구현 가능하다
동적 로딩(Dynamic Loading)의 지원
자바는 동적 로딩을 지원함으로써 프로그램 실행 시 모든 객체가 로딩되지 않고 필요한 시점에 필요한 객체를 동적으로 로딩하여 사용할 수 있다.
글을 마치며
나는 무슨 기술을 배울 때 항상 탄생 배경을 살펴보는 편인다. 새로운 기술의 탄생 배경을 읽어보면 기술에 대해 더 깊이 이해할 수 있고 기술의 특징이 어떤 사상에서 왔으며 어떠한 필요에 의해 만들어졌는지 조금 더 쉽게 이해할 수 있는 것 같다. 그리고 기술적인 이유도 있겠지만 그냥 자바 이름의 변천사와 같은 이야기가 재밌게 느껴지는 것도 크다. 학창 시절 젤 좋아하던 과목도 역사였는데 그래서 그런가 이런 시시콜콜한 이야기가 흥미롭고 기술에 대한 나의 관심도에도 영향을 주는 것 같다. 자바는 처음 프로그래밍을 배우기 시작하면서부터 쓰던 언어라 그런지 가끔 오히려 기초적인 내용을 스스로 까먹는다는 생각이 들 때가 많다. 그래서 한동안 자바에 대한 기초적이고 필수적인 내용들을 스스로 정리해보려고 한다. 파이팅 나 자신!
참고 자료 및 사이트