많은 분들이 처음 Java를 공부할 때 JDK(Java Development Kit)와 JRE(Java Runtime Environment)의 차이를 헷갈려 합니다. 오늘은 Java 프로그램이 실행되는 과정과 함께 JDK와 JRE의 차이를 쉽게 정리해보겠습니다! 😊

출처: https://nbcamp.gitbook.io/java-handbook/part-01.-hello-world/java
Java는 단순히 코드 작성만으로 실행되는 것이 아닙니다. 다음과 같은 단계가 필요합니다.
사람이 작성하는 Java 코드(.java 파일)는 컴퓨터가 직접 이해할 수 없습니다.
public void hello() {
System.out.println("Hello, Java!");
}
작성된 Java 코드는 Java 컴파일러(javac)에 의해 변환됩니다. 이 과정에서 바이트코드(Bytecode, .class 파일)로 변환됩니다.
바이트코드는 CPU가 직접 실행할 수 있는 기계어가 아니라, JVM이 해석할 수 있는 중간 언어입니다.
컴파일된 Java 프로그램은 .class 파일 형태로 저장됩니다.
이 파일은 직접 실행할 수 없고, 반드시 JVM(Java Virtual Machine)을 통해 실행해야 합니다.
바이트코드는 JVM(Java Virtual Machine)에 의해 실행됩니다. JVM은 운영체제(Windows, Mac, Linux 등)에 맞게 바이트코드를 변환하여 실행하기 때문에, 다른 환경에서도 같은 Java 프로그램을 실행할 수 있게 해 줍니다. 🎉
이제 위 실행 과정을 이해했다면, JDK, JRE, JVM이 각각 어떤 역할을 하는지 정리해 보겠습니다.
| 개념 | 역할 |
|---|---|
| JDK (Java Development Kit) | Java 개발을 위한 모든 도구 포함 (JRE 포함) |
| JRE (Java Runtime Environment) | Java 프로그램 실행에 필요한 환경 제공 (JVM 포함) |
| JVM (Java Virtual Machine) | 바이트코드를 실행하는 가상 머신 |
JDK (Java Development Kit) ← Java 개발에 필요한 모든 것 포함
├── JRE (Java Runtime Environment) ← Java 실행 환경
│ ├── JVM (Java Virtual Machine) ← 바이트코드 실행
│ ├── Java 라이브러리 (rt.jar 등) ← 필수 API 제공 (java.lang, java.util 등)
│ ├── 클래스 로더 (Class Loader) ← .class 파일 로드
│
├── Javac (Java Compiler) ← .java → .class 변환
├── 기타 개발 도구 (디버거, Javadoc 생성기, JAR 도구 등)

JRE에서 Runtime은 "실행 시간"이라는 뜻입니다. 즉, JRE(Java Runtime Environment)는 Java 애플리케이션이 실행(run-time)될 때 필요한 환경을 제공하는 역할을 합니다.
https://nbcamp.gitbook.io/java-handbook/part-01.-hello-world/jvm
이거를 읽었는데, 너무 어려워서 일단 스킵하고, 다음에 다시 읽어보겠다.