혼란스러운 Java 버전의 진실

2018년 11월 14일

java_history

와탭랩스(https://whatap.io)는 IT 서비스의 성능을 분석하기 때문에 고객사의 개발 언어와 버전에 민감합니다. 특히 Java는 엔터프라이즈 비즈니스에서 가장 많이 사용되고 버전에 따라 분석할 수 있는 데이터의 범위가 달라지기 때문에 개발 및 영업 회의에서 자주 언급되는 언어입니다. 그런데 Java는 버전도 다양하지만 개발자나 비즈니스 담당자가 부르는 버전의 명칭이 다르기까지 합니다. 이유는 Java의 제품 버전과 개발자 버전의 규칙이 다르기 때문인데, 그 이유에 대해서는 아는 사람이 많지 않습니다.

그래서 Java의 버전 규칙이 어떻게 만들어졌는지 그리고 왜 개발자 버전과 제품 버전이 다른 것인지, 그리고 Java의 버전 별 주요 기능과 버전이 나온 당시의 IT 상황까지 이야기하겠습니다.

Java(자바) 시작 이전의 역사

Java는 현재 웹의 언어이지만 처음부터 웹 서비스를 위해 만든 언어는 아닙니다. 가전 시장의 성장을 예상한 그린(Green)팀이 가전제품에 들어갈 다양한 프로세스에서 동작하는 프로세스 독립적인 언어를 만드는 과정에서 Java는 태어났습니다.

1990년 12월 전문가를 모으다

워크스테이션 컴퓨터 시장을 이끌던 Sun Microsystems는 미래의 시장 주도권을 차지하기 위해 전문가들로 구성된 그린 프로젝트(Green Project)를 만듭니다. 여기에는 패트릭 노턴(Patrick Naughton), 마이크 쉐리던(Mike Sheridan), 제임스 고슬링(James Gosling)이 포함되었습니다.

1991년 프로세스에 독립적인 언어를 만들기 시작합니다.

그린 프로젝트에 참여한 이들은 일단 모여서 무엇을 할까 고민하다가 계속 시장이 커지고 있는 가전제품에 사용될 프로세스에 독립적인 언어의 필요성을 인지합니다. 그래서 스마트한 가전제품을 전달 플랫폼으로 선정하고 제임스 고슬링은 Oak라는 새로운 언어를 개발하기 시작합니다.

1992년 Star7에 언어를 이식하다

그린팀에서는 프로세스 독립적인 언어의 잠재력을 보여줄 수 있는 양방향 휴대용 엔터테인먼트 장치인 Star7을 제작합니다. 당시 케이블 회사는 이런 선도적인 기술에는 전혀 관심이 없었는데, 20년이 지나서야 터치 기반의 디바이스가 인기를 얻은 것을 생각하면 Star7은 너무 빠른 기술이었습니다. Star7에는 Green OS, Oak 프로그래밍 언어, Tool Kit, 라이브러리 및 하드웨어가 통합되어 있었습니다. Java의 전신인 Oak는 제임스 고슬링이 Star7용으로 작성한 프로세스 독립적인 언어였습니다. 아래 Star7 유튜브 데모 동영상 링크를 소개하겠습니다. 골방에서 찍은 제임스 고슬링의 Star7 데모 영상입니다. 제임스 고슬링의 얼굴이 너무 커서 부담스럽지만 꼭 보시길 권합니다.

1993년 Set-top Box에 언어를 이식하다

그린팀은 스마트 가전제품 시장이 생각보다 과장되었다는 판단을 하게 됩니다. 그리고 그린팀은 양방향 텔레비전에 들어가는 Set-Top Box(STB) 운영체제에 제안을 받게 되고, 스마트 가전제품 시장에서 Set-Top Box 운영체제 시장으로 신속하게 전환하지만 시장 진입에 실패합니다. Star7 어쩔...

1994년 인터넷의 웹 브라우저에 언어를 이식하다

그린팀은 Set-Top Box 소프트웨어에 사용하는 언어의 특징인 작고 플랫폼 독립적이면서 안정적인 코드가 초기 웹의 요구사항에서도 필요하다는 것을 알게 됩니다. 그린팀은 웹 기반의 세번째 프로젝트를 진행하게 되는데, 패트릭 노턴(Patric Naugton)은 주말에 얻은 영감을 바탕으로 "WebRunner"라는 프로토타입 브라우저를 작성합니다.

Java(자바)의 역사

java_history_hotjava

Java의 제품명은 Java Standard Edition을 기준으로 소개하도록 합니다. 오라클에서는 발매되었을 당시의 제품명 변경해서 사용하고 있는데, 혼란을 줄이기 위해 오라클이 현재 사용하고 있는 이름을 기준으로 설명드리겠습니다.

1995년 Java 1.0a2 - SunWorld Conference에서 발표

상표권 문제로 Oak는 Java로 이름이 변경됩니다. Java 1.0a2는 HotJava 브라우저와 함께 SunWorld 컨퍼런스에서 발표됩니다. SunWorld 회의에서는 Netscape 브라우저에 Java 지원이 포함될 것이라고 발표합니다.

1996년 Java Development Kit 1.0 발표

Java의 첫 번째 버전이 발표됩니다. 최초의 안정화 버전은 JDK 1.0.2이며 이것을 Java 1이라 부릅니다.

1996년에 첫 번째 JavaOne 행사에 6,000명이 넘는 개발자가 참가합니다. 나온 지 1년도 안된 언어를 중심으로 완전히 새로운 시장이 열리게 됩니다. 이 행사에는 Java의 제품 및 서비스를 표시하는 160개가 넘는 비즈니스가 참여했습니다.

1997년 Java Standard Edition 1.1 발표

Java Standard Edition 명칭은 발표 당시에는 사용되지 않았습니다. Java Development Kit 1.1으로 발표되었습니다. Java Development Kit 1.1(JDK 1.1)은 3주 동안 220,000번 이상 다운로드됩니다. Java는 약 40만명의 개발자가 사용하는 세계에서 두 번째로 많이 사용하는 언어로 성장합니다. 1997년 JavaOne 행사에는 10,000명이 넘는 개발자가 참여하여 Java의 보안과 호환성 그리고 미래의 장치에 대한 이야기를 나눕니다.

1997_green_project 1997년 그린 프로젝트의 BBQ 파티 (아저씨들 워크샵 분위기)
    주요 기능
  • JavaBeans 1.0 컴포넌트 아키텍처 추가
  • Java Archive (JAR) 파일 형식 추가
  • Java Database Connectivity (JDBC) 추가
1998년 Java Standard Edition 1.2 발표
java_SE_1.2_playground Java Standard Edition 1.2 'Playground'
java_standard_edition Java 2 SDK, Standard Edition 다운로드 페이지

코드 네임 Playground인 Java Standard Edition의 발표 당시 이름은 Java 2 Standard Edition 1.2입니다. 제품의 변화가 너무 크다는 이유로 Java 2로 다시 브랜딩되었습니다. Java 2 Standard Edition Software Development Kit의 약자는 Java2SDK로 불려야 되겠지만 Java 커뮤니티에서는 여전히 JDK 1.2로 부르게 됩니다. JDK 1.2부터 Java의 제품은 Standard / Enterprise / Micro로 나누어지게 됩니다.

2000년 Java Standard Edition 1.3 발표
java_SE_1.3_kestrel Java Standard Edition 1.3 'kestrel'
java20 (왼쪽)스티브잡스 / (오른쪽)스콧 맥닐리

코드 네임 Kestrel인 Java Standard Edition 1.3의 원래 제품명은 Java 2 Standard Edition 1.3입니다.

JavaOne 개발자 회의에서 애플의 공동 설립자인 스티브 잡스(Steve Jobs)와 Sun의 회장 겸 CEO인 스콧 맥닐리(Scott McNealy)는 표준 Mac OX 운영체제와 함께 Java 2 Standard Edition을 번들로 제공할 것이라고 발표합니다.

2002년 Java Standard Edition 1.4 발표
java_SE_1.4_merlin Java Standard Edition 1.4 'Merlin'

코드 네임 Merlin인 Java Standard Edition (J2SE) 1.4가 발표됩니다. 발표 당시 공식 명칭은 Java 2 Platform, Standard Edition 1.4입니다. Java SE 1.4는 현대에도 종종 사용하는 곳을 볼 수 있습니다. 국내 공공기관에 설치되어 있는 많은 Java 플랫폼 중에는 아직도 Java Standard Edition 1.4 기반인 경우가 있습니다. Java 2 Standard Edition 1.4부터 JCP(Java Community Process)에 의해 오픈소스로 관리됩니다.

    제품명은 아래와 같습니다.
  • Java 2 Standard Edition 1.4 (J2SE 1.4)
  • J2SE Development Kit 1.4 (JDK 1.4)
  • J2SE Runtime Environment 1.4 (JRE 1.4)
    명령줄 인터페이스를 사용해서 버전을 문의하면 아래와 같이 나옵니다.
  • java -version (java version "1.4.0"을 반환합니다.)
2004년 Java Standard Edition 5.0 발표
java_SE_5.0_tiger Java Standard Edition 5.0 'Tiger'

코드 네임 Tiger가 릴리즈됩니다. “Java 2”가 “Java”로 변경되었습니다. 그리고 1.5가 아닌 5.0으로 버전이 발표되어 현재의 이름과 동일한 규칙인 Java Platform, Standard Edition 5.0으로 발표됩니다.

JavaOne 개발자 회의에서 큰 논쟁은 Java가 오픈 소스인지의 여부였습니다. Sun은 공식적으로 Java 기반 프로젝트가 Java 사양과 호환되는 것으로 인증받을 것을 요구하는데, 오픈소스 지지자들은 Java가 좀 더 자유로운 형식으로 제공되길 원했습니다. 제임스 고슬링(James Gosling)은 Java 기술의 오픈 소스 구현을 여러 개 허용하면 유닉스와의 비 호환성을 초래할 수 있다며 반대했습니다.

와탭의 모니터링핵심 기능인 Active Stack은 Java SE 5 버전부터 지원하고 있습니다.

    제품명은 아래와 같습니다.
  • Java™ Platform Standard Edition 5 (Java™ SE 5)
  • Java™ SE Development Kit 5 (JDK™ 5)
  • Java™ SE Runtime Environment 5 (JRE™ 5)
    명령줄 인터페이스를 사용해서 버전을 문의하면 아래와 같이 나옵니다.
  • java -version (java version "1.5.0"을 반환합니다.)
    주요 기능
  • Generics
  • Autoboxing/Unboxing
  • Enumerations
  • Static imports
2006년 Java Standard Edition 6.0 발표
java_SE_6_mustang Java Standard Edition 6.0 'Mustang'

코드 네임 Mustang이 릴리즈됩니다. 제품명은 Java Platform, Standard Edition 6 (Java SE 6)으로 발표되었습니다.

2007년 Sun은 GPL에 따라 Java 클래스 라이브러리의 전체 소스 코드를 릴리즈합니다. (Sun의 라이센스가 부여된 구성 요소는 제외되었다.) 2007년 아이폰이 나오는데, 이는 Oak가 삽입된 Star7 데모로부터 15년만의 일이었습니다.

2008년 Sun은 2년마다 발표하던 새로운 버전의 Java를 발표하지 않습니다. 2009년 JavaOne 개발자 회의의 오프닝 세션에서 오라클의 Sun 인수 발표가 나오게 됩니다. 2010년이 되어서야 JCP는 Java 7과 Java 8 로드맵을 승인합니다.

    제품명은 아래와 같습니다.
  • Java™ Platform Standard Edition 6 (Java™ SE 6)
  • Java™ SE Development Kit 6 (JDK™ 6)
  • Java™ SE Runtime Environment 6 (JRE™ 6)
    명령줄 인터페이스를 사용해서 버전을 문의하면 아래와 같이 나옵니다.
  • java -version (java version "1.6.0"을 반환합니다.)
2011년 JDK 7 (Java SE 7, JDK 7, JRE 7) 발표
java_jdk_7_dolphin JDK 7 (Java SE 7, JDK 7, JRE 7) 'Dolphin'

JDK 1.0에서 JDK 6까지 2년마다 업데이트가 되었지만 JDK 7은 5년만에 업데이트 되었습니다. JDK 7의코드 네임은 Dolphin입니다.

    제품명은 아래와 같습니다.
  • Java™ Platform Standard Edition 7 (Java™ SE 7)
  • Java™ SE Development Kit 7 (JDK™ 7)
  • Java™ SE Runtime Environment 7 (JRE™ 7)
    명령줄 인터페이스를 사용해서 버전을 문의하면 아래와 같이 나옵니다.
  • java -version (java version "1.7.0"을 반환합니다.)

JDK 7이 나오기까지 Sun 사는 오라클에 인수되는 등 Java는 여러가지 부침을 겪었습니다. 업데이트가 너무 늦어지자 오라클은 일부 명세를 모아서 업데이트를 하기로 결정하게 됩니다. 결국 JDK 1.7에는 많이들 기대했던 Lambda와 Jigsaw와 같은 기능이 들어가지 못합니다.

오라클 Java그룹 부사장인 “조지스 사브”는 JDK 6 이후 7이 나오는 기간이 너무 길었던 것이 Java의 역사에서 가장 실망스러웠던 일이었다고 밝히기도 하였습니다.

JDK 6 이후에 무척 어려운 기간이 있었습니다. Java 7과 그 이후로 넘어갈 때까지 상당히 오랜 시간이 걸렸습니다. 당시 경제가 어려웠던 탓도 있지만 JDK 코드 베이스를 가져와 OpenJDK를 구성하는 데 많은 시간과 노력이 투입되었습니다. 다음 주요 릴리즈가 나올 때까지 너무 오랜 시간이 걸렸다는 측면에서 실망스러운 일이었지만, 결국 그것도 지금의 OpenJDK 커뮤니티가 형성되고 Java 7과 8이 나오게 된 과정의 일부였습니다. - Java 20주년 "Java의 성공과 실패, 그리고 미래" : 오라클 Java 그룹 부사장 조지스 사브 인터뷰 발췌 -

    기능 추가
  • 다이아몬드 연산자(<l;>) 사용
  • Generics 사용성 개선
  • 리소스 자동 해제
  • Garbage Collector 기능 개선
  • Switch문 문자열 지원
2014년 JDK 8 Lambda 추가

2011년 JDK 1.7이 나온 이후로 3년이 업데이트에 3년이 걸렸습니다. 하지만 1.7에서 구현하지 못했던 많은 변화들이 1.8에 담기게 됩니다.

    변화된 기능
  • Lambda Expression 추가
  • Streams 인터페이스 추가
  • Default Method 추가

현재 Java FX는 사라진 리치 인터넷 기술이 되었습니다.

2017년 Java Standard Edition 9 발표

JavaOne에서 오라클 JDK의 릴리즈 주기를 6개월 단위로 하겠다고 선언합니다. 9 버전 과 10 버전은 non-LTS 로 릴리즈되었기 때문에 6개월 무상 업데이트 후 패치가 진행되었습니다.

    변화된 기능
  • Java Platform Module System(Jigsaw) 추가
  • Java 9 JShell 추가
  • HTML5 Javadoc 추가
  • 익명 클래스에 대한 Diamond Operator 허용
  • 프로세스 API 추가
2018년 Java Standard Edition 10 발표

2018년 오라클이 신규 버전의 릴리즈 주기를 앞당기면서 유상 패치에 대한 이슈가 불거집니다. 이미 대부분의 개발자들은 Java Standard Edition 8 버전에 만족하며 사용하고 있지만 시간이 지나면 결국 새로운 버전의 Java를 사용할 것입니다. 그 때 Java 진영의 개발자들이 어디로 움질일지 아직은 아무도 모릅니다.

마치며

Java는 정말 오랜 시간 발전되어온 범용적인 언어입니다. 그 오랜 시간동안 Java는 스스로를 발전시키며 현재까지 올 수 있었습니다. 그 과정안에는 엄청난 고민들이 숨어 있을 것이고, 하물며 버전을 정하는 단순한 일에서도 어려운 결정들이 있었을 것이라 봅니다. 우리도 언젠가 오랜 시간 발전시켜야 하는 서비스나 오픈소스를 만들게 될 때가 있을 것입니다. 그 때가 되면 Java의 역사를 거울 삼아 더 깔끔하고 멋진 비지니스를 만들어 갔으면 좋겠습니다.

Java 애플리케이션 성능을 최대로 사용하고 싶다면?

와탭 무료로 시작하기
이전 글

다음 글

최신글