JRE
Java 프로그램을 실행하기 위해 필요한 최소 환경으로, JVM과 표준 라이브러리를 묶은 패키지입니다.
포함 관계
┌──────────────────── JDK ────────────────────┐
│ javac, jdb, jar, jlink 등 개발 도구 │
│ │
│ ┌──────────── JRE ────────────┐ │
│ │ │ │
│ │ ┌─────── JVM ───────┐ │ │
│ │ │ Class Loader │ │ │
│ │ │ Runtime Data Area │ │ │
│ │ │ Execution Engine │ │ │
│ │ └────────────────────┘ │ │
│ │ │ │
│ │ Java 표준 라이브러리 (rt.jar) │ │
│ │ java.lang, java.util, │ │
│ │ java.io, java.net 등 │ │
│ │ │ │
│ │ 기타: 보안, 국제화, 배포 설정 │ │
│ └──────────────────────────────┘ │
└──────────────────────────────────────────────┘
JRE 구성 요소
| 구성 요소 | 역할 |
|---|---|
| JVM | 바이트코드 로딩·실행·메모리 관리·GC |
| 표준 클래스 라이브러리 | String, List, Map, Stream, I/O 등 핵심 API |
| 보안 모듈 | 인증서, 암호화, 보안 정책 관리 |
| 국제화(i18n) | 다국어 문자셋, 로케일 지원 |
| 배포 기술 | Java Web Start, Applet 플러그인 (현재 제거됨) |
JRE vs JDK vs JVM 비교
| 항목 | JVM | JRE | JDK |
|---|---|---|---|
| 바이트코드 실행 | O | O | O |
| 표준 라이브러리 | X | O | O |
| 컴파일러(javac) | X | X | O |
| 디버거(jdb) | X | X | O |
| 모니터링(jconsole) | X | X | O |
| 대상 사용자 | - | 실행만 하는 사용자 | 개발자 |
실행 흐름에서 JRE의 역할
개발자 PC (JDK) 사용자 PC (JRE만 있으면 됨)
───────────── ──────────────────────
Hello.java
│ javac
▼
Hello.class ──── 배포 ────→ Hello.class
│ java 명령어
▼
┌─ JRE ──────────────┐
│ JVM이 바이트코드 실행 │
│ 표준 라이브러리 참조 │
└────────────────────┘
│
▼
프로그램 실행 완료
사용자가 Java 프로그램을 실행만 한다면 JRE만 설치하면 되고, 개발까지 한다면 JDK가 필요합니다.
Java 9 이후 변화
Java 9부터 모듈 시스템(JPMS) 이 도입되면서 JRE의 위상이 달라졌습니다.
| 변화 | 설명 |
|---|---|
| 독립 JRE 배포 중단 | Java 11부터 Oracle은 JRE를 별도로 배포하지 않음 |
| jlink 등장 | 필요한 모듈만 골라 커스텀 런타임 이미지를 생성 |
| 경량 배포 가능 | 앱이 사용하는 모듈만 포함 → 이미지 크기 대폭 감소 |
# jlink로 커스텀 런타임 생성 예시
jlink --module-path $JAVA_HOME/jmods \
--add-modules java.base,java.sql \
--output my-runtime
# 결과: java.base + java.sql만 포함된 경량 런타임
# 전체 JRE ~200MB → 커스텀 런타임 ~30MB
핵심 정리
JRE는 JVM + 표준 라이브러리를 합친 실행 전용 패키지입니다. Java 11 이후로는 독립 JRE 배포가 중단되고 jlink를 통한 커스텀 런타임이 대안이 되었으므로, 현재는 JDK를 설치하고 필요 시 jlink로 경량 런타임을 만드는 방식이 표준입니다.