본문 바로가기
Java

[JAVA] JDK, JRE, JVM 총정리

by 2nyong 2023. 4. 10.

- JDK (Java Development Kit)

자바 개발 키드(JDK)는 말 그대로 자바로 개발을 하는데 사용되는 키트다. 따라서 JDK에는 자바를 사용해 개발을 하는데 필요한 라이브러리들과 컴파일러(javac), 자바 프로그램 실행 환경(JRE)도 포함되어 있다.

간략화한 JDK 구조

일반적으로 JDK는 OpenJDK + 제조사의 부가 기능으로 구성되며, 대표적으로 Oracle JDK가 있다. 그러나 Oracle JDK 라이센스 상용화 이슈로 인해 무료 라이센스를 제공하는 또 다른 JDK 버전을 사용하기도 한다.

 

Java 버전별 차이

Java는 크게 LTS(Long-term Support) 버전과 non-LTS 버전으로 나뉜다. 장기 지원 버전(LTS)는 후속 버전이 출시되어도 일정 기간 동안 지원을 지속하지만, non-LTS 버전은 지원이 종료된다는 차이점을 갖는다.

 

대부분 안정적인 시스템 운용과 호환성을 위해 LTS 버전을 사용하도록 권장하고 있다.

 


 

- JRE (Java Runtime Environment)

자바 샐행 환경(JRE)는 자바 가상 머신(JVM)과 자바 프로그램을 실행시킬 때 필요한 라이브러리 API가 함께 묶여 있는 패키지이다. 이 외에도 JRE에서 사용하는 프로퍼티 세팅이나 리소스 파일(.jar)을 포함하고 있다.

 

정리하자면, 자바를 사용해 개발을 하기 위해서는 JDK가 필요하고, 개발한 Java 프로그램을 실행시키기 위해서는 JRE가 필요하다.

 


 

- JVM (Java Virtual Machine)

앞서 자바 가상 머신(JVM)의 용도와 필요성에 대해 간단히 정리하였다. 이번에는 Java의 호환성과 실행 과정에 관해 자세히 정리하겠다.

 

Java의 호환성

Java는 JVM에 의해 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속적이지 않다는 것에 대한 의미를 파악하기 위해 C언어와 비교하였다.

 

C언어는 One Source Multi Object Use Anywhere 이라는 목적을 가지고 있다. 즉, 하나의 소스 파일로 각 기계에 맞는 목적 파일로 만들어 어디서든 사용한다는 의미이다.

 

개발자가 코드를 작성하면, 기계(윈도우, 맥, 리눅스 등)에 따른 컴파일러에 의해 실행파일(.exe)이 생성된다. 이 과정에서 소스 코드가 기계어로 변환이 되는데, 이 기계어는 특정 OS나 CPU에 맞춰진 컴파일러에 의해 다르게 컴파일된다는 특징이 있다. 즉, 서로 다른 환경의 기기(다른 OS, 다른 CPU)는 각자의 컴파일러로 변환된 기계어를 이해할 수 없다는 의미이다.


 

Java는 Write Once Use Anywhere 이라는 목적을 가지고 있다. 즉, 소스 파일을 하나만 작성하면 어디서든 사용이 가능하다는 의미이다.

 

Java로 작성한 소스 파일(.java)는 직접 운영체제로 가서 실행하는 것이 아닌 JVM을 거쳐 운영체제와 상호작용을 통해 실행된다. 즉, JVM이 있으면 운영체제에 관계없이 운영체제로부터 독립적으로 프로그램을 실행할 수 있다는 의미이다.

 

이것이 가능한 이유는 자바 컴파일러(javac)를 통해 컴파일된 목적 파일은 반기계어인 바이트 코드(.class)인데, 이 목적 파일이 운영체제가 아닌 JVM에서 사용되기 때문이다. 

댓글