JRE JDK 개념

여우는 야옹야옹·2024년 11월 19일
0

궁금한점

목록 보기
2/2

코딩을 하다보면 자바를 다운로드를 받으면서 종종 실수를 하곤 하는데 바로 jdk가 아닌 jre를 다운로드 받는 실수인데, jre를 받아도 간단한 코딩 정도는 가능하지만 계속 코딩을 하다보면 에러가 발생할 수 있다.

그건 바로 jre가 아닌 jdk를 받아서 프로젝트에 jre를 사용하겠다고 설정해놔서 생기는 에러인데, 그렇다면 둘의 차이가 무엇이 다른 걸까?
(참고로 인텔리제이의 경우는 미리 jdk를 다운로드 받지 않아도 프로젝트를 생성하고 사용하면서 필요한 jdk를 자동으로 다운로드 해주므로 이와 같은 에러를 마주할 일이 없다.)

JDK(Java Development Kit)란?

번역하면 자바 개발 키트이다. 간단하게 설명하면 자바를 개발하는데 필요한 기능들이 들어간 것이다.여기에는 물론 자바를 실행하는데 필요한 jre도 포함되어 있어서 jdk를 다운로드 받으면 jre 또한 포함되어 있다.자바 프로그램 개발을 위해서는 바로 이 jdk를 다운로드 받아 자바 기능을 사용하고 컴파일 해야하는 것이다.

JDK 종류

자바는 워낙에 유명한 프로그래밍 언어이기 때문에 JDK도 여러가지 종류로 나뉜다. (리눅스 처럼 Ubuntu, CentOS, RedHat 계열이 있는 것과 같다)
이처럼 여러가지 JDK가 있는 큰 이유는 라이센스 때문이다.

Java 소스코드 자체는 오픈소스이다.
그래서 오픈소스인 Java 소스코드를 빌드하여 사용하는 것에는 거의 제약이 없지만 Oracle에서 제공하는 설치버전의 JDK에는 위의 NFTC 라이센스가 적용되어 회사에서는 사용할 수 없게 된다. (따로 돈내고 사용해야 된다)
그래서 무료 라이센스를 제공하는 또다른 JDK 버전을 여러 회사에서 출시했고 지금의 JDK 환경이 갖춰진 것이다.

Oracle JDK : Oracle에서 제공하는 JDK. 구독을 통해 유료 라이센스를 구매할 수 있다. 
Open JDK : 유명한 무료 JDK. 하지만 OpenJDK를 직접 사용하는것 보다는, OpenJDK 기반으로 빌드된 JDK 사용을 추천한다.
Azul Zulu : 인지도가 높은 JDK 중 하나이며, Mac 등에서 사용할 수 있는 바이너리를 제공하는 것이 특징이다.
Amazon Corretto : AWS에서 제공하는 JDK. AWS에서 쉽게 사용 가능하며, AWS 환경이 아니더라도 사용할 수 있다.
Temurin (AdoptOpenJDK) : Eclipse에서 제공하는 JDK. Eclipse를 사용한다면 Temurin 설치를 추천한다.

JDK 디렉토리 구성요소


bin : 자바 개발, 실행에 필요한 도구와 유틸리티 명령
include : 네이티브 코드 프로그래밍에 필요하는 C언어 헤더 파일
lib : 실행 시간에 필요한 라이브러리 클래스들

bin디렉토리에 있는 개발 프로그램


javac : 자바 컴파일러로 자바 소스를 바이트 코드로 컴파일
java : 자바 인터프리터. 컴파일러가 생성한 바이트 코드를 해석하고 실행
javadoc : 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(.jar) 생성, 관리하는 압축 프로그램 (zip 같은거라 생각하면 된다)
jmod : 자바의 모듈 파일(.jmd)을 만들거나 모듈 파일의 내용 출력
jlink : 응용프로그램에 맞춘 맞춤형 JRE 생성
jdb : 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거
javap : 역어셈블러. 컴파일된 클래스 파일을 원래의 소스로 변환

JRE(Java Runtime Environment)란?

JRE란 번역하면 자바 실행환경으로 자바 프로그램을 실행하는데 필요한 것이다.
JRE는 자바 실행환경(Java Runtime Environment)의 약자로서, JVM과 자바 프로그램을 실행(동작)시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지 이다. 이외에도 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일(jar 파일)을 가지고 있다.
JRE는 기본적으로 JDK에 포함되어 있기 때문에 JDK를 설치하면 함께 설치된다.

즉, 자바 프로그램을 실행시키는데는 문제가 없지만 자바 프로그램을 코딩할 때 jdk가 아니라 jre를 사용하면 문제점이 생길 수 있다. 예를 들어 컴파일이 정상적으로 되지 않을 수도 있다.

왜 JVM이 필요한가?

Java 는 OS에 종속적이지 않다는 특징을 가지고있다.
OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요한데 그게 바로 JVM(Java를 실행할 수 있게 하는 가상 컴퓨터)이다.
JAVA 언어로 작성한 소스파일은 직접 운영체제로 가서 실행하는 것이 아닌, JVM을 거쳐서 운영체제와 상호작용을 하게 된다.
이말은 JVM만 있으면 운영체제가 리눅스든, 맥이든 관계없이 운영체제로부터 독립적으로 프로그램을 제약없이 실행할 수 있다는 의미이다.

이것이 가능한 이유는 컴파일된 코드와 하드웨어/OS 사이 중간에서, 해당 하드웨어/OS 환경에 알맞게 JVM이 Byte Code로 변환해주기 때문이다.
이전까지는 다양한 OS 환경에 맞춰진 컴파일러가 이해할 수 있도록 직접 코드 변경이 필요했지만 자바는 그럴 필요가 없어졌다.

위의 그림처럼 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있다. 따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있다.

자바 프로그램 실행과정

직접 실행을 해보자

위 그림에서 Compiler는 javac.exe에 해당되고 JVM은 java.exe에 해당된다.
위 그림을 순서대로 서술하면 다음과 같다.

  1. 소스코드(MyPrograme.java)를 작성한다.
  2. 컴파일러(Compiler)는 자바 소스코드를 이용하여 클래스 파일(MyProgram.class)을 생성한다. 컴파일 된 클래스 파일은 JVM(Java Virtual Machine)이 인식할 수 있는 바이트 코드 파일이다.
  3. JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 변환하고 프로그램을 수행한다.
  4. MyProgram 수행 결과가 컴퓨터에 반영된다.

이제 실제로 정말로 저렇게 컴파일이 진행되는지 실습해보자.
다음과 같이 자바 코드 파일을 작성하고  MyProgram.java 라는 자바 확장자 파일로 저장한다

public class MyProgram {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

이제 이 코드(파일)가 정상적으로 동작하는지 확인하기 위해 프로그램을 실행시켜보자.


그러면 현재 위치에 MyProgram.class 파일이 생성된 걸 확인할 수 있다.

"Hello World"가 출력되면서 파일이 실행된걸 확인할 수 있다.

✍한줄평
간단히 정리해보면 Java로 프로그램을 실행시키는데 필요한 것이 바로 JRE이고 자바 프로그램을 개발하는데 필요한 것이 JDK이다. jdk를 다운로드 받으면 jre도 포함되어 있어 개발한 자바 프로그램을 실행시키는 것까지 가능하다.

오라클 공식문서
https://pamyferret.tistory.com/45
JDK / JRE / JVM

profile
성장중인 개발자 (머리속의 생각을 글로 옮기는 연습을 하고 있습니다.)

0개의 댓글