DEVELOPMENT

Java의 핵심 구조, JDK / JRE / JVM 완전 정복! 개념부터 구성 원리까지

간지뽕빨리턴님 2025. 4. 27. 08:06
반응형

JDK, JRE, JVM은 자바 플랫폼의 근간을 이루는 요소로, 각 요소의 정확한 이해는 자바 개발을 위한 첫걸음입니다.

자바의 JDK,JRE,JVM은 이 글 하나로 정리 끝!

Java는 1995년 Sun Microsystems에서 처음 공개된 이후, 현재까지도 다양한 산업 분야에서 널리 사용되고 있는 객체지향 프로그래밍 언어입니다. 플랫폼 독립성, 보안성, 안정성을 강점으로 하는 Java는 서버 개발, 웹 애플리케이션, 모바일 앱, 금융 시스템 등에서 핵심 기술로 자리잡아 왔습니다.

 

그러나 Java를 처음 접하는 개발자들이 가장 혼란스러워하는 개념이 바로 JDK, JRE, 그리고 JVM입니다. 비슷하게 생긴 이름 탓에 그 차이점이 모호하게 느껴지기도 하고, 어디서부터 설치해야 할지도 어렵게 다가올 수 있습니다.

 

이번 글에서는 Java 공식 문서와 Java SE 플랫폼 스펙(OpenJDK Reference)을 참고하여, JDK/JRE/JVM의 정확한 정의와 구성 원리, 이들 간의 포함 관계, 각 구성 요소가 시스템에서 어떤 역할을 수행하는지까지 체계적으로 설명합니다.

목차

    Java JDK,JRE,JVM

    JVM (Java Virtual Machine) 바이트코드의 실행기

    JVM은 Java 애플리케이션이 작성된 바이트코드(.class)를 실행하기 위한 가상 실행 엔진입니다. 운영체제 위에서 추상적으로 동작하는 이 가상 머신은 플랫폼 독립적인 실행을 가능하게 하며, Java가 "한 번 작성하면 어디서나 실행된다(Write Once, Run Anywhere)"는 철학을 실현할 수 있는 핵심 기술입니다.

    주요기능

    - 클래스 로딩 : .class 파일을 메모리로 로드

    - 바이트코드 검증 : JVM이 실행할 코드의 안정성과 무결성을 검사

    - 런타임 실행 : Java 바이트코드를 네이티브 명령으로 해석하거나 JIT(Just-In-Time) 컴파일러를 통해 바로 실행

    - 메모리 관리 : Heap, Stack, Method Area, GC(가비지 컬렉션) 수행

    - 스레드 처리 및 동기화: 멀티스레드 지원 및 모니터 락 기반의 동기화

    특징

    JVM은 운영체제에 종속적입니다. 즉, Windows용 JVM, Linux용 JVM, Mac용 JVM은 각각 다르게 구현되어 있지만, 바이트코드는 동일하게 동작합니다. Java뿐만 아니라 Kotlin, Scala, Groovy 등도 JVM 위에서 실행 가능합니다.

    JRE (Java Runtime Environment) - 실행 환경

    JRE는 Java 애플리케이션을 실행하기 위한 런타임 환경입니다. JVM을 포함하며, Java 프로그램이 필요로 하는 표준 클래스 라이브러리(Java Class Library, JCL)와 지원 파일들을 포함합니다. 즉, 개발은 하지 않고 실행만 하고 싶은 사용자에게 적합한 구성입니다.

    구성 요소

    JVM (실행 엔진)

    핵심 라이브러리 (java.base, java.util, java.io 등)

    리소스 파일 및 프로퍼티 설정 파일

    특징

    사용자는 직접 소스 코드를 작성하거나 컴파일하지 않으며, 이미 컴파일된 .class 파일이나 .jar 파일을 실행합니다.
    일반 사용자들이 Java 기반 응용 프로그램을 사용할 때 필요한 최소 환경입니다.

    - JRE는 Oracle에서 더 이상 별도 다운로드를 제공하지 않으며, JDK에 통합되는 방식으로 배포되고 있습니다.

    JDK (Java Development Kit) - 개발 도구 세트

    JDK는 Java 애플리케이션을 개발할 수 있도록 필요한 모든 도구들을 포함한 개발자용 패키지입니다. JRE를 포함하고 있으며, 소스 코드 작성 후 컴파일, 디버깅, 테스트를 위한 다양한 유틸리티가 제공됩니다.

    구성 요소

    JRE (JVM + 클래스 라이브러리 포함)

    javac (Java Compiler) : .java → .class 변환

    java (Launcher) : 바이트코드 실행

    javadoc : Java 문서 생성 도구

    jdb : 디버거

    jar : 압축 및 패키징 도구

    jshell : REPL 기반 인터랙티브 Java 실행 도구

    javap : 바이트코드 분석 도구

    특징

    Java 개발자는 반드시 JDK를 설치해야 합니다. Oracle JDK 외 OpenJDK, Amazon Corretto, Azul Zulu, Eclipse Temurin 등 다양한 배포판이 존재합니다. Java SE 표준 명세는 모두 OpenJDK를 기반으로 합니다.

    JDK, JRE, JVM의 포함 관계

    JDK

    - JRE

    -- JVM

    -- 클래스라이브러리

    - 개발도구(컴파일러, 디버거 javadoc 등)

    개발자는 JDK, 클라이언트와 사용자의 경우 JRE

    Java 실행 과정 요약

    개발자는 .java 파일을 작성하고 javac로 컴파일하여 .class 바이트코드 생성

    바이트코드는 JVM이 이해할 수 있는 명령어로 구성됨

    JVM이 바이트코드를 로드하고 실행하며, 필요한 클래스는 클래스 로더를 통해 로드됨

    실행 중 필요한 메모리는 JVM 내부의 영역 (Heap, Stack 등)을 통해 관리됨

    GC(Garbage Collector)가 자동으로 불필요한 메모리를 정리함

    마무리

    Java의 플랫폼 독립성과 안정성, 그리고 광범위한 사용 사례는 그 기반이 되는 JDK / JRE / JVM의 구조와 원리를 이해할 때 더욱 명확해집니다. 단순히 설치만으로 끝나는 것이 아니라, 어떤 구성 요소가 어떤 역할을 수행하는지를 명확하게 이해하고 있다면, 에러를 디버깅할 때, 라이브러리를 사용할 때, 그리고 JVM 튜닝을 할 때도 보다 깊이 있는 접근이 가능해집니다.