본문 바로가기
Language/Java

[JAVA] JVM, JRE, JDK 완벽 해부 : 자바 개발 환경의 핵심 구조와 차이점

by Papa Martino V 2026. 1. 14.
728x90

JVM, JRE, JDK의 차이점

 

자바(Java)를 처음 접하거나 실무에서 개발을 하다 보면 가장 먼저 마주하게 되는 용어가 바로 JVM, JRE, JDK입니다. 이 세 가지는 자바 생태계를 지탱하는 거대한 축이지만, 입문자들에게는 그 경계가 모호하게 느껴질 때가 많습니다. 단순히 "설치해야 하는 프로그램"을 넘어, 각각이 자바 프로그램의 실행과 개발에서 어떤 독창적인 역할을 수행하는지 깊이 있게 파헤쳐 보겠습니다.


1. 자바의 심장: JVM (Java Virtual Machine)

JVM(자바 가상 머신)은 자바 프로그램이 어느 환경에서나 동일하게 작동할 수 있도록 만드는 '추상화 계층'의 핵심입니다. 자바의 가장 큰 철학인 "Write Once, Run Anywhere (WORA)"는 바로 이 JVM을 통해 실현됩니다.

JVM은 운영체제(OS)로부터 메모리를 할당받아 자바 바이트코드(.class 파일)를 실행합니다. 여기서 중요한 점은 자바 소스 코드는 OS에 종속되지 않지만, JVM 자체는 운영체제에 종속적이라는 사실입니다. 즉, 윈도우용 JVM과 리눅스용 JVM이 각각 존재하며, 이들이 중간에서 통역사 역할을 수행함으로써 개발자는 OS에 상관없이 코딩할 수 있게 됩니다.

핵심 기능으로는 가비지 컬렉션(Garbage Collection)을 통한 자동 메모리 관리, 런타임 데이터 영역 관리, 그리고 바이트코드를 해석하고 실행하는 인터프리터 및 JIT 컴파일러 등이 있습니다.


2. 실행을 위한 패키지: JRE (Java Runtime Environment)

JRE(자바 실행 환경)는 자바 프로그램을 실행하기 위해 필요한 최소한의 세트입니다. 만약 여러분이 개발자가 아니고, 단순히 누군가 만든 자바 프로그램을 PC에서 실행만 하고 싶다면 JRE만 있으면 충분합니다.

  • 구성: JVM + 핵심 클래스 라이브러리(Java API) + 기타 설정 파일
  • 특징: 컴파일러(javac)와 같은 개발 도구는 포함되어 있지 않습니다. 순수하게 실행에 초점을 맞춘 환경입니다.

3. 개발자를 위한 도구 상자: JDK (Java Development Kit)

JDK(자바 개발 키트)는 JRE를 포함하며, 여기에 자바 프로그램을 개발하고 컴파일하는 데 필요한 도구들이 추가된 형태입니다. 자바 개발자라면 반드시 설치해야 하는 필수 패키지입니다.

JDK에는 소스 코드를 바이트코드로 변환하는 javac, 프로그램을 실행하는 java, 문서화를 돕는 javadoc, 디버깅을 위한 jdb 등이 모두 포함되어 있습니다. 최신 자바 버전에서는 JRE를 별도로 배포하지 않고 JDK에 통합하여 관리하는 추세입니다.


4. JVM, JRE, JDK의 상관관계 및 차이점 비교

이 세 가지 개념의 관계를 가장 쉽게 이해하는 방법은 포함 관계를 확인하는 것입니다. JDK는 JRE를 품고 있고, JRE는 다시 JVM을 품고 있는 구조입니다.

JDK = JRE + 개발 도구(Compiler, Debugger, etc.)
JRE = JVM + 클래스 라이브러리(Library)

주요 특징 비교표

구분 JVM (Java Virtual Machine) JRE (Java Runtime Environment) JDK (Java Development Kit)
정의 바이트코드를 실행하는 가상 머신 자바 실행을 위한 라이브러리 세트 자바 개발 및 실행을 위한 종합 키트
주요 역할 코드 실행, 메모리 관리(GC) 런타임 환경 제공 코드 작성, 컴파일, 디버깅
포함 범위 독립적 엔진 JVM + 표준 라이브러리 JRE + 개발 도구(javac 등)
대상 사용자 시스템 내부 구동 일반 사용자 (단순 실행자) 자바 소프트웨어 개발자

5. 실무적 관점에서의 가치: 왜 구조를 알아야 하는가?

현대적인 클라우드 환경과 컨테이너 기술(Docker)이 보편화되면서 이들의 차이를 아는 것은 더욱 중요해졌습니다. 컨테이너 이미지를 생성할 때, 개발 단계에서는 모든 도구가 들어있는 JDK 이미지를 사용하지만, 실제 운영 서버(Production)에 배포할 때는 이미지 용량을 줄이고 보안을 강화하기 위해 JRE 기반 이미지를 사용하는 것이 베스트 프랙티스입니다.

또한, 자바 9 버전 이후 도입된 모듈 시스템(Jigsaw) 덕분에 이제는 jlink 도구를 사용하여 필요한 모듈만 포함된 사용자 정의 런타임을 생성할 수 있게 되었습니다. 이는 과거의 거대한 JRE 개념에서 벗어나 효율적인 자바 생태계를 구축하는 밑거름이 됩니다.


결론: 자바 생태계의 조화

JVM, JRE, JDK는 각기 다른 레이어에서 자바의 강력함을 지탱합니다. JVM은 하드웨어와 소프트웨어의 가교 역할을, JRE는 코드 실행의 터전을, JDK는 창조의 도구를 제공합니다. 이들의 유기적인 연결 구조를 이해하는 것이야말로 진정한 자바 전문가로 거듭나는 첫걸음입니다.


참고 문헌 및 출처

 

728x90