2. Java Study

[JAVA] All about JAVA [ JAVA란 무엇이냐? ]

Dorothy. 2024. 7. 18. 05:33

JAVA

안녕하세요? 오늘은 자바 프로그램과 그 배경이 되는 세계관 설명을 드리겠습니다.

 

 일단, 자바 프로그래밍, 자바 웹 프로그래밍 그리고 스프링 부트 프로그래밍을 하기 위해서는 개발 환경이 필요합니다.

이것을 JDK(Java Development Kit)라고 하는데요, JDK는 최신 버전 뿐만 아니라, 이전 버전들을 선택할 수 있습니다.

 

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

Java는 현재 웹 어플리케이션 개발 언어이지만 처음부터 웹 서비스를 위해 만든 언어는 아닙니다.

 임베디드 가전[디바이스] 시장의 성장을 예상한 그린(Green)팀이 임베디드 가전제품에 들어갈 다양한 OS와 CPU 에서 동작하는 독립적인 언어를 만드는 과정에서 Java는 태어났습니다.

 

1) 1990년_ 12월 전문가를 모으다

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

1991년 OS와 CPU에 독립적인 언어를 만들기 시작합니다.

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

 

2) 1992년 _Star7에 언어를 이식하다

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

https://www.youtube.com/watch?v=1CsTH9S79qI 

 

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

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

 

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

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

 

2. Java(자바)의 역사

 

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

 

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

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

 

2) 1996년_ Java Development Kit 1.0 발표

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

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

 

3) 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년 그린 프로젝트의 BBQ 파티 (아저씨들 워크샵 분위기)
  • 주요 기능
  • 1. JavaBeans 1.0 컴포넌트 아키텍처 추가
  • 2. Java Archive (JAR) 파일 형식 추가
  • 3. Java Database Connectivity (JDBC) 추가

 

4)1998년_ Java Standard Edition 1.2 발표

Java Standard Edition 1.2 'Playground'
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로 나누어지게 됩니다.

 

5) 2000년_ Java Standard Edition 1.3 발표

Java Standard Edition 1.3 'kestrel'
(왼쪽)스티브잡스 / (오른쪽)스콧 맥닐리

 

코드 네임 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을 번들로 제공할 것이라고 발표합니다.

 

6) 2002년_ Java Standard Edition 1.4 발표

 

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 : 1.4.0
  •  

 

7) 2004년_ Java Standard Edition 5.0 발표

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 : 1.5.0

주요 기능

  • Generics
  • Autoboxing/Unboxing
  • Enumerations
  • Static imports

 

8) 2006년_ Java Standard Edition 6.0 발표

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"을 반환합니다.)

 

9) 2011년_ JDK 7 (Java SE 7, JDK 7, JRE 7) 발표 

  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 :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문 문자열 지원

 

10) 2014년_ JDK 8 Lambda 추가

2011년 JDK 1.7이 나온 이후로 3년이 업데이트에 3년이라는 시간이 걸렸습니다.

하지만 1.7에서 구현하지 못했던 많은 변화들이 1.8에 담기게 됩니다.

 

변화된 기능

  • Lambda Expression 추가
  • Streams 인터페이스 추가
  • Default Method 추가

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

 

11) 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 추가

 

12) 2018년_ Java Standard Edition 10 발표

2018년 오라클이 신규 버전의 릴리즈 주기를 앞당기면서 유상 패치에 대한 이슈가 불거집니다.

이미 대부분의 개발자들은 Java Standard Edition 8 버전에 만족하며 사용하고 있지만 시간이 지나면 결국 새로운 버전의 Java를 사용할 것입니다. 하지만, 그 때 Java 진영의 개발자들이 어디로 움질일지 아직은 아무도 모릅니다.

 

https://namu.wiki/w/Java/%EB%B2%84%EC%A0%84

 

 

3. Java SE 11 Archive Downloads


우리는 JDK 11 버전을 사용하도록 하겠습니다.

 

아래 URL에서 JDK 11 버전을 다운로드할 수 있습니다.

https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html

 

Java Archive Downloads - Java SE 11 | Oracle 대한민국

WARNING: These older versions of the JRE and JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production. For production use Oracle recommends downlo

www.oracle.com

(다운로드하기 위해서는 오라클 계정을 생성해야 합니다)

 

개발 Host PC의 CPU 그리고 OS에 따라 해당 인스톨러를 선택해서 다운로드합니다.

 

다운로드하기 위해서는 아래 그림과 같이 체크박스를 선택하고 다운로드를 진행합니다.

다운로드 완료를 확인합니다.

설치 파일을 실행시킵니다.

 

설치 마법사가 실행됩니다. Next 버튼을 선택해서 설치를 진행합니다.


정상적으로 설치가 완료되면,

아래 그림처럼 Program Files -> Java -> jdk-11.0.17 디렉토리가 생성되었음을 확인할 수 있습니다.

 

 

 

설치를 완료한 후, 시스템 환경 변수를 편집해야 합니다.

아래 그림처럼 윈도우 검색창에서 시스템 환경를 검색하면,

시스템 환경 변수 편집 어플리케이션을 확인할 수 있습니다.

 

 

시스템 환경변수 편집을 선택하면 다음과 같은 시스템 속성 대화상자가 팝업됩니다.

환경변수 버튼을 선택합니다.

 

 

JAVA_HOME 환경 변수를 시스템에 등록하기 위해 아래 그림처럼 새로만들기(W)... 버튼을 선택합니다.

 

변수 이름을 JAVA_HOME(대문자)로 설정합니다.

 

그리고 변수 값을 JDK11이 설치된 절대 경로로 설정하고 확인 버튼을 선택합니다.

 

 

JAVA_HOME 환경변수가 설정된 것을 확인하기 위해 시스템 변수 창에서,

JAVA_HOME 목록을 확인합니다.

 

CLASSPATH 환경변수 시스템에 등록

%JAVA_HOME%\lib

 

 

Path 환경변수에 java bin 디렉토리 추가

%JAVA_HOME%\bin

 

 

 

※OpenJDK

https://openjdk.org/

 

OpenJDK

Learn about the key active Projects in the Community including Amber (high-productivity language features), Loom (lightweight concurrency), Panama (foreign functions and foreign data), Valhalla (primitive types and specialized generics), and, of course, th

openjdk.org

 

 

OpenJDK (Open Java Development Kit)는 자바 플랫폼, 표준 에디션 (Java SE)의 Free 및 Open source 입니다. OpenJDK는 자바 컴파일러, 자바 런타임 환경 (JRE), 그리고 개발자들이 자바 어플리케이션을 작성하는 데 필요한 툴킷 등을 포함합니다.

 

 OpenJDK 프로젝트는 2006년에 Sun Microsystems (현재는 Oracle의 소유)가 처음으로 시작했으며, 자바의 공식 참조 구현입니다. 이 프로젝트의 목표는 개발자 커뮤니티에 의해 유지되는 완전히 오픈 소스인 자바 SE 구현을 제공하는 것입니다.
OpenJDK는 이전에 Sun Microsystems가 개발하던 자바의 상업용 구현과는 대조적으로 오픈 소스입니다. 이로 인해 개발자들은 자바 언어와 관련된 코드를 볼 수 있을 뿐만 아니라 필요에 따라 수정하거나, 자신의 프로젝트에 맞게 조정할 수 있습니다.
그러나 Java SE와 OpenJDK 사이에는 여전히 몇 가지 중요한 차이점이 있습니다. 예를 들어, Java SE는 Oracle이 지원하고 유지 관리하는 반면 OpenJDK는 자바 커뮤니티가 유지 관리합니다. 

 

또한, Java SE는 상업적인 사용에 대해 라이선스 요금을 부과하지만 OpenJDK는 무료입니다.

 

이상입니다.