[Java의 역사 #1] 플랫폼 독립적인 언어 Java
안녕하세요 (전)프포자 @stunstunstun 입니다. 이번 포스팅에서는 한국에서 가장 많이 사용하는 프로그래밍 언어라고해도 과언이 아닌 Java에 대한 이야기를 해볼까 합니다. 본문에서는 경어는 생략합니다.
컴퓨터 언어 혁명은 두 가지 요소에 의해 이루어졌다. 프로그래밍 과학의 진보와 컴퓨터 환경의 변화가 바로 그것이다. 자바도 예외는 아니다. 자바는 C, C++에서 물려받은 풍부한 유산을 선별하여 채택하였고, 그것에 최신 프로그래밍 경향을 반영하는 요소들로 채워졌었다.
온라인 환경의 출현에 맞추어, 자바는 고도의 분산형 구조에 적합한 능률적인 프로그래밍 방식을 제공한다. 자바는 1991년, Sun Microsystems의 제임스 고슬링(James Gosling,) 패트릭 노튼(Patrick Naughton), 크리스 와츠(Chris Warth), 에드 프랭크(Ed Frank), 그리고 마이크 쉐리든(Mike Sheridan)에 의해 창안되었다.
플랫폼 독립적인 언어를 만들자!
초기에 이 언어는 Oak라 명명 되었으나 1995년에 Java로 바뀌었다. 다소 놀라운 일이지만, 원래 자바는 인터넷을 통한 웹 서비스 또는 Android와 같은 모바일 환경을 위해 개발된 것이 아니었다.
자바가 지향했던 것은 토스터, 전자레인지, 리모콘 등의 가전제품에 내장될 소프트웨어를 위한 플랫폼(platform) 독립적인(Independent) 언어였다. 대충 짐작할 수 있듯이 중심 제어기로 사용되는 CPU는 매우 다양하다. 문제는 대부분의 컴퓨터 언어가 특수한 아키텍쳐나 OS에 맞게 컴파일 되도록 설계된다는 것이였다.
Write Once Run Anywhere!
가령 C++를 예를 들어 보자. C++ 프로그램은 모든 종류의 CPU에 맞게 컴파일될 수 있지만, 그것을 위해서는 해당
CPU에 맞는 C++컴파일러가 필요하다. 하지만, 각각의 환경의 컴파일러를 위한 비용은 비싸고 개발하는데 시간이 너무 많이 소요되는 문제가 있다.
좀 더 나은 방식을 찾기 위해 James Gosling 과 그 동료들은 다양한 환경의 CPU에서 실행 되는 코드를 생성 할수 있는, 이식성이 뛰어난 Cross Platform 언어의 개발에 착수 했다. 이러한 배경을 바탕으로 Write Once, Run Anywhere와 같은 철학을 가지고 있는 자바의 탄생으로 이어 지게 된 것 이다.
인터넷과 자바의 만남
자바의 세부적인 부분이 개발되고 있을 무렵, 2차적이긴 하지만 자바의 미래를 결정지을 만큼 중요한 요인이 나타났
다. 바로 월드 와이드 웹(WWW) 의 출현 으로, 만일 자바가 개발되던 시기에 웹이 형태를 갖추지 못했다면, 자바는 가전제품의 프로그램 개발에만 쓰이는 언어로 남았을 것이다. 그러나 이식 가능한 언어를 요구하는 웹의 출현으로 인해 자바는 당시 컴퓨터 언어 설계 프로젝트의 선두로 부상하게 된다.
대부분의 프로그래머는 초기 경험을 통해 이식성이 좋은 프로그램은 그만큼 구현하기가 어렵다는 것을 깨닫게 된다. 효율적이며 플랫폼 독립적인 이식성이 뛰어난 프로그램 개발에 대한 요구는 거의 프로그래밍이라는 학문 자체 만큼
이나 오래 계속 되어 오긴 했지만, 지금까지는 다른 문제들에 의해 뒷전으로 밀려나 있었다.
그러나, 인터넷과 웹의 출현으로 이식성의 문제가 다시 전면으로 떠올랐다. 아무튼, 인터넷은 다양한 컴퓨터, 운영 체제, 그리고 CPU로 넘쳐나는 광대한 분산형 시스템인 것이다.
한 때는 성가시기만 하고 우선 순위에서도 밀려나 있었던 문제가 이제는 명백하게 가장 중요한 사안이 되어버렸다. 1993년 경, 자바 팀은 임베디드(Embeded) 제어기에서 사용할 코드를 개발할 때 자주 나타나던 이식성의 문제가 인터넷을 위한 코드를 개발할 때도 나타난다는 사실을 알게 되었다.
이리하여 자바의 초점은 가전제품에서 인터넷으로 옮겨지게 된 것이다. 따라서 자바 언어 설계에 최초의 영감을 제공한 것은 아키텍처 중립적인 프로그래밍 언어에 대한 요구이지만 궁극적으로 자바가 대성공을 거두도록 이끈 것은 인터넷이라고 해야 할 것이다.
자바의 발전
인터넷은 자바가 프로그래밍 세계의 전면으로 부상하도록 했으며 자바는 인터넷에 큰 영형을 미쳤다. 이유는 간단하
다. 자바가 가상 공간을 자유롭게 돌아 다닐 수 있는 객체의 세계를 확장 했기 때문이다. 네트워크에는 서버와 PC사
이에 전송 되는 두 가지 객체 영역이 존재하는데, 수동적 정보와 동적이고 능동적인 프로그램이 그것이다.
예를 들면, e-메일을 읽는 것은 수동적 정보를 보는 것이다. 프로그램을 다운로드할 때도 그것을 실행하기 전까지는 프로그램 코드는 수동적 정보가 된다. 하지만 또 다른 형태의 객체가 PC 컴퓨터에 전송될 수 있는데, 그것이 바로 동적인 자가 실행 프로그램이다. 이러한 프로그램은 서버에 의해 시작되지만 클라이언트 컴퓨터에서 실행된다. 그 예로 서버가 보내는 정보를 클라이언트 컴퓨터의 화면에 표시하기 위해 서버가 제공하는 프로그램을 들 수 있다.
네트워크 상에서 동작하는 프로그램이 동적일수록 보안이나 이식성의 문제가 심각해진다. 자바 이전의 가상 공간은 현재에 존재하는 실체들의 절반에게만 열려 있었다. 자바는 이 문제에 관심을 가졌고, 이 과정에서 애플릿 이라는 새로운 형식의 프로그램을 정의하게 되었다.
JDK와 JRE
JRE(Java Runtime Environment)는 Java 애플리케이션을 실행하기 위한 Java Virtual Machine을 구현하는 환경입니다.
JDK(Java Development Kit)은 Java 기반의 애플리케이션을 개발하는데 필요한 번들을 말한다. JDK는 다양한 도구를 비롯해 JRE 포함하므로 더욱 넓은 디스크 공간이 필요합니다. JDK는 Java 애플리케이션과 애플릿을 작성하는데 필요한 JRE, API 클래스 집합, Java 컴파일러 Web Start 및 추가 파일을 제공합니다.
JVM, JRE, JDK는 플랫폼에 의존적이지만 덕분에 JDK를 통해 작성된 프로그램은 플랫폼 독립적으로 실행될 수가 있습니다.
자바 애플리케이션과 애플릿
자바로 애플리케이션과 애플릿이라는 두 가지 형태의 프로그램을 만들 수 있다. 애플리케이션은 컴퓨터의 운영체제하에서 실행되는 프로그램을 말한다. 자바로 만들어진 프로그램은 비주얼 베이직이나 C++과 같은 그 밖의 컴퓨터 언어로 개발된 프로그램과 비슷하다.
애플리케이션 개발에 쓰일 경우 자바는 다른 컴퓨터 언어와 별반 다르지 않다. 자바를 독특하게 만드는 것은 애플릿을 개발할 수 있는 자바의 기능이다. 애플릿은 인터넷 상에서 전송되고, 자바를 지원하는 웹브라우저에서 실행될 수 있도록 설계된 프로그램이다. 다른 많은 컴퓨터 언어로도 애플리케이션을 개발할 수 있지만 애플릿은 오직 자바로만 개발 할 수 있는 것이다. 자바가 애플릿을 통해 두 가지 곤란한 문제, 즉 보안과 이식성을 해결했기 때문이다. 인터넷과 관련하여 두 용어가 무엇을 의미하는지 알아보자.
애플릿
네트워크에 연결된 컴퓨터의 사용자는 정상적인 프로그램을 다운로드할 때마다 바이러스에 감염될 위험을 안고 있는 것이다. 자바 이전에는 많은 사용자들이 실행 가능한 프로그램을 자주 다운로드하지 않았으며, 다운로드한 경우라도 그것을 실행하기 전에 바이러스 검사를 했었다. 이렇게 신중을 기하더라도, 대부분의 사용자는 그들의 시스템이 바이러스에 감염되거나 악성 프로그램이 시스템에서 마구잡이로 실행되는 것을 우려했다.(악성 프로그램은 개인 컴퓨터의 파일을 조사해서 신용카드 번호, 은행 계좌 잔고 상태, 암호 등의 개인 정보를 빼돌릴 수도 있다)
자바는 사용자의 컴퓨터와 네트워크 애플리케이션 사이에 방화벽(firewall)을 제공하여 이 문제를 해결한다. 자바를 지원하는 웹 브라우저를 사용하면 바이러스 감염에 대한 두려움 없이 안전하게 자바 애플릿을 다운로드할 수 있다. 자바가 사용한 방법은 자바 프로그램이 컴퓨터의 다른 부분에는 접근하지 못하게 하고, 제한된 자바 실행 환경 내에서만 접근할 수 있도록 허용하는 것이다. 사실 클라이언트 컴퓨터에 아무런 해를 끼치지 않고 애플릿을 다운로드하는 기능은 자바의 가장 중요한 부분이다.
이식성
앞서 논한 바와 같이 인터넷에는 다양한 타입의 컴퓨터와 운영체제가 연결되어 있다. 다양한 플랫폼에 동적으로 다운로드되는 프로그램을 위해서는 이식성이 있는 실행 코드를 생성하는 방법이 필요하다. 보안 문제를 해결하는 메커니즘은 이식성 문제를 해결하는 데도 도움이 된다. 이 두 가지 문제에 대한 자바의 솔루션은 우아할 뿐 아니라 효과적이기도 하다.
다음 포스팅에서는 인터넷과 브라우저 환경이 발전하면서 애플릿이 겪은 위기와 자바 진영이 이를 이겨낸 이야기를 해볼까 합니다.
초창기 자바는 내장형을 한때 타겟으로 한적도 있었습니다.
Java OS 같은 것도 설계한적이 있었던 걸로 기억이 나네요...
그 후로 COM/DCOM/Corba/Java beans 등 컴포넌트 프로그래밍의 한주를 이루다, Enterprise Java 가 탄생되어서 서버 프로그래밍에 주로 쓰이게 되었습니다.
Java 외에 다른 언어들이 Java binary(class) 로 컴파일되어 VM 에서 돌아갑니다. 대표적인 언어는 Scala 가 있는데, 27년차 검증된 JVM 은 그만큼 신뢰가 간다는 뜻이겠지요. 자바는 죽어도 VM 은 살아남을 것 같네요.
자바가 성공한 이유는 Eclipse 때문이라고 이야기하는 사람들도 있습니다. IDE 없이 자바로 코딩하는 것은 상상하기 어렵네요.
개인적으로 자바를 오랫동안 공부하고 써왔지만, 타언어에 밀려 점점 멀어지네요. 8, 9 에 트렌드에 맞게 새로운 기능을 넣었지만 말입니다.
메모장에 코딩해본자는 왜 개발툴이 필요한지 알게 되지요.. 특히 검정색 화면에 흰색 글자만 있는 환경은 더더욱 그렇고요... 현재 VI로 코딩하는 것이 매우 비효율적이라고 생각합니다.