2023. 5. 25. 15:11ㆍHigh Level Programming Language
🌱 Java의 탄생과 역사: JDK 설치 전에 알아두면 좋은 이야기
Java로 프로그래밍을 시작하려면 가장 먼저 JDK(Java Development Kit)를 설치해야 합니다. JDK는 자바 애플리케이션을 개발하고 실행하는 데 필수적인 개발 도구이며, 최신 버전뿐만 아니라 이전 버전도 선택하여 사용할 수 있습니다.
하지만 Java는 단순한 언어가 아닙니다. 그 뿌리를 알고 나면 더 깊이 이해할 수 있습니다. Java는 현재는 웹 애플리케이션 개발에서 많이 사용되지만, 처음부터 웹을 위해 만들어진 언어는 아니었습니다. 지금부터 Java가 어떻게 탄생했는지를 역사적으로 한 번 짚어보겠습니다. 👇
🧪 Java 시작 이전의 역사
Java는 웹 이전의 임베디드 가전 디바이스를 위해 시작되었습니다. 당시에는 다양한 OS와 CPU에서 동작해야 하는 환경이 많았기 때문에, 이러한 환경에서도 독립적으로 실행되는 언어의 필요성이 대두되었죠.
🧠 1990년 12월 – 전문가들을 모으다
워크스테이션 시장을 이끌던 Sun Microsystems는 미래를 대비하기 위해 특별한 프로젝트를 시작합니다. 이 프로젝트의 이름은 바로 그린 프로젝트(Green Project).
☘️ 이 프로젝트에는 다음과 같은 핵심 인물들이 참여하게 됩니다.
- 패트릭 노턴(Patrick Naughton)
- 마이크 쉐리던(Mike Sheridan)
- 제임스 고슬링(James Gosling)
이들은 자바의 아버지들이라고 불릴 만큼 중요한 역할을 하게 됩니다.
🏗️ 1991년 – OS와 CPU에 독립적인 언어 개발 시작
그린 프로젝트 팀은 모여서 ‘무엇을 만들까?’를 고민하게 됩니다. 그리고 빠르게 성장 중이던 임베디드 가전제품 시장을 주목합니다.
이들은 임베디드 디바이스에서 사용될 수 있는, 즉 OS와 CPU에 종속되지 않는 언어를 만들기로 결심합니다. 그리하여 제임스 고슬링은 새로운 언어인 Oak를 개발하기 시작합니다.
🪵 Oak는 훗날 Java의 전신이 됩니다.
📱 1992년 – Star7에 언어를 이식하다
Oak의 가능성을 실현하기 위해 그린팀은 Star7이라는 디바이스를 만듭니다. 이 장치는 당시로서는 파격적인 양방향 휴대용 엔터테인먼트 디바이스였습니다.
하지만 너무 앞서간 탓인지 당시 케이블 회사들은 이 기술에 관심을 보이지 않았습니다. 지금은 흔한 터치 기반 디바이스지만, Star7은 20년 앞선 기술이었던 셈이죠. 😮
🧩 Star7에는 다음과 같은 요소들이 통합되어 있었습니다:
- Green OS
- Oak 프로그래밍 언어
- 툴킷 및 라이브러리
- 전용 하드웨어
🎥 Star7 데모 영상도 있습니다.
제임스 고슬링이 골방에서 찍은 Star7 유튜브 데모 영상입니다.
(주의: 고슬링의 얼굴이 너무 크게 나와서 조금 부담스러울 수 있습니다 😅)
그러나 Java의 뿌리를 이해하는 데 매우 도움이 되니 꼭 시청해 보시길 바랍니다!
https://www.youtube.com/watch?v=1CsTH9S79qI
📺 1993년 – Set-Top Box(STB)에 언어를 이식하다
그린팀은 곧 깨닫게 됩니다. 스마트 임베디드 디바이스 시장은 아직 시기상조였다는 것을요. 그래서 시장을 바꿔 Set-Top Box 운영체제 시장으로 방향을 전환합니다.
Set-Top Box는 양방향 텔레비전에 사용되는 장치로, 당시 유망한 분야였습니다. 하지만 아쉽게도 이 시장에서도 상업적인 성공을 거두지는 못합니다.
🌐 1994년 – 웹 브라우저에 언어를 이식하다
하지만 이들에게는 또 다른 기회가 다가옵니다.
그들은 기존에 만든 언어가 웹 환경에도 적합하다는 사실을 발견하게 됩니다.
- 작고
- 플랫폼 독립적이며
- 안정적인 코드
이런 특성은 바로 초기 웹 브라우저 환경에 적합한 조건이었기 때문입니다.
그래서 그린팀은 웹 기반의 세 번째 프로젝트를 시작하게 됩니다. 이때 패트릭 노턴(Patrick Naughton)은 주말 동안의 영감을 바탕으로 "WebRunner"라는 프로토타입 웹 브라우저를 개발합니다.
이 WebRunner가 나중에 HotJava 브라우저가 됩니다. 🌐
🧩 Java의 시작은 '웹'이 아니었다
Java는 단지 웹을 위해 만들어진 언어가 아닙니다. 오히려 임베디드 시스템 → STB → 웹 브라우저로 확장되어온 진화의 산물입니다. 이 역사를 알면 Java의 플랫폼 독립성(Write Once, Run Anywhere)이라는 철학이 왜 중요한지 더 잘 이해할 수 있습니다.
☕ Java 버전 설명
🌱 Java 1.0 ~ Java 7: 자바의 태동과 성숙기
✅ Java 1.0 (1996.01)
- 코드네임: Oak
- LTS: ❌
🆕 주요 추가 기능
- AWT (Abstract Window Toolkit): GUI를 만들 수 있는 첫 Java GUI API.
- Applet: 웹 브라우저에서 Java 애플릿 실행 가능 (하지만 보안 이슈로 후에 퇴출됨).
- JVM 기반 실행 구조: "Write Once, Run Anywhere" 개념의 시작.
🗑️ 삭제 없음
최초 버전이기 때문에 모든 것이 새로웠습니다.
✅ Java 1.1 (1997.02)
- LTS: ❌
🆕 주요 추가 기능
- 이벤트 위임 모델: GUI 이벤트 처리를 좀 더 구조화.
- RMI (Remote Method Invocation): 원격 객체 호출 가능.
- JDBC 1.0: Java로 데이터베이스 접근이 가능해짐.
🗑️ 변경 사항
- AWT 이벤트 모델 → 위임 모델로 개선
이전 모델보다 훨씬 명확하고 객체지향적으로 처리 가능.
✅ Java 1.2 (1998.12)
- 코드네임: Playground
- LTS: ❌
🆕 주요 추가 기능
- Swing: 더 정교하고 유연한 GUI 구성 가능.
- 컬렉션 프레임워크 (List, Set, Map): 자료구조와 알고리즘의 표준 제공.
- JIT 컴파일러: 성능 비약적 향상.
🗑️ 없음
대규모 기능 확장이었기에 기존 기능이 그대로 유지됨.
✅ Java 1.3 (2000.05)
- 코드네임: Kestrel
- LTS: ❌
🆕 주요 추가 기능
- HotSpot JVM 기본화: 더욱 빠르고 효율적인 JVM 실행 환경.
- Java Sound API: 오디오 처리 기능 강화.
🗑️ 없음
✅ Java 1.4 (2002.02)
- 코드네임: Merlin
- LTS: ❌
🆕 주요 추가 기능
- assert 키워드: 개발 중 조건 검증 가능 (
assert x > 0;
) - NIO (New I/O): 버퍼 기반 고성능 파일/네트워크 처리.
- Logging API: 자체 로깅 기능 도입 (java.util.logging)
🗑️ 없음
✅ Java 5 (2004.09)
- 코드네임: Tiger
- LTS: ❌
🆕 주요 추가 기능
- Generics: 타입 안전한 컬렉션 (
List<String>
). - Enum 타입: 타입 안정적 열거형 데이터 제공.
- Annotation (@Override 등): 메타데이터 사용 가능.
- For-each 반복문: 가독성과 코드 간결성 개선.
- Varargs: 가변 인자 함수 지원 (
void print(String... args)
)
🗑️ 없음
➡ 이 버전은 Java 문법 혁신의 핵심!
✅ Java 6 (2006.12)
- 코드네임: Mustang
- LTS: ❌
🆕 주요 추가 기능
- JAX-WS: SOAP 기반 웹서비스 지원.
- Scripting API (JSR-223): Java에서 JavaScript 등 스크립트 언어 실행 가능.
- JDBC 4.0: 자동 드라이버 로딩 등 기능 개선.
🗑️ 일부 RMI 구성 요소 deprecated
✅ Java 7 (2011.07)
- 코드네임: Dolphin
- LTS: ❌
🆕 주요 추가 기능
- try-with-resources:
try
블록에서 자원 자동 해제. - NIO.2 (Path, Files, WatchService 등): 파일 시스템 접근 대폭 향상.
- Switch에서 String 지원:
switch(str)
가능. - 다이아몬드 연산자
<>
: 타입 추론 간결화.
🗑️ 일부 레거시 AWT 구성요소 deprecated
🚀 Java 8~21: 현대 자바의 진화기
✅ Java 8 (2014.03)
- LTS: ❌
🆕 주요 추가 기능
- Lambda Expressions: 함수형 프로그래밍 도입.
- Stream API: 데이터 흐름형 처리 (
.filter().map().collect()
). - Optional: Null 안전 처리.
- java.time 패키지: 강력한 날짜/시간 처리.
🗑️
- PermGen 제거: Metaspace로 대체 (메모리 오류 줄이기).
- Applet 점진적 폐기 시작
✅ Java 9 (2017.09)
- LTS: ❌
🆕 주요 추가 기능
- 모듈 시스템 (Project Jigsaw): 모듈화된 Java 구성 가능 (
module-info.java
) - JShell: Java REPL 도구 제공.
- Stream API 확장:
takeWhile
,dropWhile
,ofNullable
등.
🗑️ 제거
- Applet deprecated
- JEE 관련 모듈 (CORBA 등) 제거 예정
✅ Java 10 (2018.03)
- LTS: ❌
🆕 주요 추가 기능
var
키워드 도입: 지역 변수 타입 추론 가능.- G1 GC 기본화: 성능 개선.
🗑️ 없음
✅ Java 11 (2018.09)
- LTS: ✅
🆕 주요 추가 기능
- HTTP Client API 정식화: 비동기 HTTP 요청 처리.
- String 메서드 개선:
isBlank()
,lines()
,strip()
🗑️ 제거
- JavaFX, Java EE 모듈 제거
- Applet, Java Web Start 완전 제거
- Nashorn JS Engine deprecated
✅ Java 12~16
버전 | 주요 기능 | 삭제 |
---|---|---|
Java 12 | Switch Expressions (프리뷰) | 없음 |
Java 13 | Text Blocks (프리뷰) | 없음 |
Java 14 | record (프리뷰), NPE 진단 |
CMS GC 제거 |
Java 15 | Sealed Classes (프리뷰), Text Block 정식 | Nashorn 완전 제거 |
Java 16 | record 정식, Pattern Matching 강화 |
SecurityManager deprecated 시작 |
✅ Java 17 (2021.09)
- LTS: ✅
🆕 주요 추가 기능
- Sealed Class 정식화: 상속 허용 클래스 제한 가능.
- Pattern Matching for
instanceof
: 간결한 타입 체크 + 캐스팅.
🗑️ 제거
- Applet 완전 제거
✅ Java 18~21 요약
버전 | 주요 기능 | 삭제 |
---|---|---|
Java 18 | UTF-8 기본 인코딩, Simple Web Server | 없음 |
Java 19 | Virtual Threads (프리뷰) | 없음 |
Java 20 | Record Patterns | 없음 |
Java 21 | Virtual Threads 정식화, Sequenced Collections | RMI Activation 시스템 제거 |
🔮 Java 22 이후
버전 | 기능 (예정/도입됨) | 삭제 예정 |
---|---|---|
Java 22 | String Templates, Class-File API | 일부 deprecated API 제거 |
Java 23~24 | Record pattern 개선, unnamed class 개선 등 | 지속적인 정리 예정 |
🎯 참고하세요
- Java 5, 8, 17, 21은 자바 언어 역사에서 큰 전환점입니다.
- Java 8은 함수형 패러다임 도입, Java 17~21은 현대적 문법과 고성능 GC/VThreads 기반.
- 코드네임은 Java 7까지 공식 사용되었으며, 이후부터는 생략되었습니다.
JDK 설치
우리는 JDK 17 버전을 설치하도록 하겠습니다.
📥 아래 URL에서 JDK 17 버전을 다운로드할 수 있습니다.
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
Java Archive Downloads - Java SE 17.0.12 and earlier
WARNING: Older versions of the 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 downloading the late
www.oracle.com
(다운로드하기 위해서는 오라클 계정을 생성해야 합니다)
개발 Host PC의 CPU 그리고 OS에 따라 해당 인스톨러를 선택해서 다운로드합니다.
정상적으로 설치가 완료되면,
아래 그림처럼 Program Files -> Java -> jdk-17 디렉토리가 생성되었음을 확인할 수 있습니다.
설치를 완료한 후, 시스템 환경 변수를 편집해야 합니다.
아래 그림처럼 윈도우 검색창에서 시스템 환경를 검색하면,
시스템 환경 변수 편집 어플리케이션을 확인할 수 있습니다.
시스템 환경변수 편집을 선택하면 다음과 같은 시스템 속성 대화상자가 팝업됩니다.
환경변수 버튼을 선택합니다.
JAVA_HOME 환경 변수를 시스템에 등록하기 위해 아래 그림처럼 새로만들기(W)... 버튼을 선택합니다.
변수 이름을 JAVA_HOME(대문자)로 설정합니다.
그리고 변수 값을 디렉토리 찾아보기(D)... 버튼을 선택해서 JDK17이 설치된 절대 경로로 설정하고 확인 버튼을 선택합니다.
JAVA_HOME 환경변수가 설정된 것을 확인하기 위해 시스템 변수 창에서,
시스템 변수 목록에서 JAVA_HOME 환경변수를 확인합니다.
CLASSPATH 환경변수를 JAVA_HOME 환경변수처럼 시스템에 등록합니다.
%JAVA_HOME%\lib
그리고 Path 환경변수에 java bin 디렉토리 추가합니다.
%JAVA_HOME%\bin
그리고 명령 프롬프트창에서 JDK 설치 유무를 다음과 같이 확인합니다.
☕ OpenJDK
OpenJDK 프로젝트는 2006년에 Sun Microsystems (현재는 Oracle의 소유)가 처음으로 시작했으며, 자바의 공식 참조 구현입니다. 이 프로젝트의 목표는 개발자 커뮤니티에 의해 유지되는 완전히 오픈 소스인 자바 SE 구현을 제공하는 것입니다.
OpenJDK는 이전에 Sun Microsystems가 개발하던 자바의 상업용 구현과는 대조적으로 오픈 소스입니다. 이로 인해 개발자들은 자바 언어와 관련된 코드를 볼 수 있을 뿐만 아니라 필요에 따라 수정하거나, 자신의 프로젝트에 맞게 조정할 수 있습니다.
그러나 Java SE와 OpenJDK 사이에는 여전히 몇 가지 중요한 차이점이 있습니다. 예를 들어, Java SE는 Oracle이 지원하고 유지 관리하는 반면 OpenJDK는 자바 커뮤니티가 유지 관리합니다. 또한, Java SE는 상업적인 사용에 대해 라이선스 요금을 부과하지만 OpenJDK는 무료입니다.
🐧 참고로 듀크(Duke)는 OpenJDK의 마스코트입니다.
'High Level Programming Language' 카테고리의 다른 글
JVM 메모리 구조 (0) | 2023.06.03 |
---|---|
Java Components (0) | 2023.05.29 |
Java Project 생성 (0) | 2023.05.25 |
Spring Tool Suite 4 설치 (0) | 2023.05.25 |
unqualified name (0) | 2023.05.01 |