본문 바로가기
💻 개발/Java

자바 기본과 객체 지향 (2) - JDK, JRE, JVM

by 컴쏘 2024. 10. 31.

Java를 사용하다 보면 자주 접하게 되는 용어들이 있다. 이 용어들은 비슷하게 느껴지기도 해서, 이번 기회에 알아보고자 한다.

 

JDK, JRE, JVM ❘ 출처 : https://inpa.tistory.com/entry/JAVA-☕-JDK-JRE-JVM-개념-구성-원리-💯-완벽-총정리

 

위에 그림에서 볼 수 있듯이, JDK는 JRE와 JVM을 모두 포함하고 있다. 

 

그럼 JDK가 무엇일까? 

 

JDK (Java Development Kit) 

JDK는 자바 개발 키트의 약자로 개발자들이 자바로 개발하는 데 사용되는 SDK 키트이다. 

 

그래서 JDK 안에는 자바 개발 시 필요한 라이브러리 들과 javac, javadoc 등의 개발 도구들이 포함되어 있다. 또한, 자바 프로그램을 실행하기 위한 JRE도 포함하고 있다. 

 

SDK ?
SDK(Software Development Kit)는 소프트웨어 개발 키트로 하드웨어 플랫폼, 운영체제 또는 프로그래밍 언어 제작사가 제공하는 툴이다. 키트의 요소는 제작사마다 다르다.

 

JDK 버전과 종류

자바의 버전을 표현할 때는 보통 JDK 또는 Java SE 버전으로 나타낸다. 

 

JDK를 다운로드하려고 볼 때 Java SE와 Java EE를 자주 보곤 했는데, 이 둘의 차이를 알아보자.

 

  • Java SE(Java Standard Edition) : 가장 기본이 되는 표준 에디션의 자바 플랫폼으로 자바 언어의 핵심 기능을 제공
    • 가장 기본적인 클래스 패키지로 구성되어 있다. 
    • PC에 설치해서 사용할 수 있는 모든 프로그램 개발에 관련된 것 (웹 개발, 안드로이드 개발 ...)
  • Java EE(Java Enterprise Edition) : 대규모 기업용 에디션으로 SE 확장판(대형 네트워크 환경 프로그램 개발시) 
    • 기업 환경을 위한 대규모 솔루션 개발, 모바일 폰, 셋탑 박스 ... 등 

 

이번에는 JDK의 종류에 대해서 알아보자. JDK는 라이센스 때문에 여러 가지가 존재한다. 

 

Java 소스 코드 자체는 오픈 소스 이지만, Oracle에서 제공하는 설치 버전의 JDK에는 NFTC 라이센스가 적용되어 회사에서는 사용할 수 없게 된다. 따라서 무료 라이센스를 제공하는 또다른 JDK 버전을 여러 회사에서 출시했고 지금의 JDK 환경이 되었다. 

 

그 중 자주 마주 했던 3가지 JDK 종류에 대해 알아보겠다. 

 

  • Oracle JDK : Oracle에서 제공하는 JDK로 구독을 통해 유료 라이센스를 구매할 수 있다. 
  • Open JDK : 유명한 무료 JDK이다. 
  • Amazon Corretto : AWS에서 제공하는 JDK로 AWS에서 쉽게 사용 가능하며, AWS 환경이 아니더라도 사용할 수 있다. 

 

그렇다면, 이번에는 JRE에 대해 알아보자. 

 

JRE (Java Runtime Environment)

 JRE는 자바 실행 환경의 약자로, JVM과 자바 프로그램을 실행시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지이다. 이외에도 properties 세팅이나 리소스 파일 (jar 파일)을 가지고 있다. 

 

그림에서 봤던 것처럼, JDK 내부에 JRE가 포함되어 있기 때문에, JDK를 설치하면 JRE가 함께 설치된다. (JDK 11 버전부터는 JRE가 따로 제공되지 않는다.) 

 

JVM은 무엇일까?

 

JVM (Java Virtual Machine)

JVM은 자바 가상머신의 약자로, 자바 바이트 코드 파일(.class)을 읽어 실행할 수 있는 Virtual Machine이다. 

 

자바로 작성된 모든 프로그램은 JVM에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 JVM이 설치되어 있어야 한다. (이는 JVM이 있다면 자바 프로그램을 모든 플랫폼에서 제약 없이 동작시킬 수 있다는 것이다.)

 

JVM 더 알아보기
Java의 소스파일은 운영체제에서 실행되는 것이 아닌, JVM을 거쳐서 운영체제와 상호작용을 하게 된다.
따라서, 운영체제로부터 독립적으로 프로그램을 실행할 수 있다.

왜 그럴 수 있을까?
JVM이 컴파일된 코드와 HW/OS 중간에서 HW/OS 환경에 맞게 Byte Code로 변환해주기 때문이다.

동작 과정은 다음과 같다.

1. Java Compiler가 Java로 작성된 소스 코드 .java 파일을 .class 파일인 Byte Code로 컴파일한다. (여기서의 Byte Code는 엄밀히 말하면 JVM이 이해할 수 있는 코드이다.)
2. JVM이 Byte Code를 기계어로 변환한다.
3. JVM에 의해 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 제공한다.

이때, 주의해야 할 점은 JVM은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 한다.

JVM에는 단점이 없을까?
Java 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로(2번의 컴파일), 실행 속도가 느리다.
이를 보완하기 위해 JIT 컴파일러를 사용해 필요한 부분만을 기계어로 바꾸어 줌으로써 성능 향상을 주었지만 그럼에도 C보다 느리다는 점이 있다.

 

마찬가지로 그림에서 봤던 것처럼, JVM은 JRE에 포함되어 있다. 그래서 현재 사용하는 컴퓨터의 운영체제에 맞는 JRE가 설치되어 있다면, JVM이 설치되어 있다.

 

요약

간단히 정리해보자면 다음과 같다. 

 

JDK는 자바 개발 키트로 자바로 개발하는데 사용되는 SDK 키트이다. 

JDK 내부에는 JRE가 포함되어 있다. 

 

JRE는 자바 실행환경으로 자바 프로그램을 실행시킬 때 필요한 라이브러리 API와 JVM 등이 포함되어 있다. 

 

JVM은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해 반드시 필요한 프로그램이다. 

 

[다음의 글을 참고하였습니다.](https://inpa.tistory.com/entry/JAVA-☕-JDK-JRE-JVM-개념-구성-원리-💯-완벽-총정리)