JVM, JRE, JDK 알아보기

자바를 구성하는 요소는 참 많은 것 같습니다. 그 중에서도 큰 구성요소인 JVM (Java Virtual Machine), JRE (Java Runtime Environment), JDK (Java Development Kit) 는 정말 헷갈립니다. JDK는 JAVA 개발도구인건 알겠는데, JVM은 뭐고 JRE는 또 뭘까요?

1.JVM (Java Virtual Machine)

JVM(Java Virtual Machine)은 해석해보면 자바 가상 머신입니다.

컴퓨터는 인간의 언어로 만들어진 소스코드(원시코드)를 이해할 수 없기 때문에 목적코드(여기에서는 컴퓨터가 이해할 수 있는 코드)를 만들어줘야 합니다.

자바에서는 이 목적코드를 바이트 코드라고 합니다.

이 바이트 코드를 실행하는 것이 JVM. 자바 가상 머신 입니다.

아니, 그렇다면 컴퓨터가 이해할 수 있는 언어라고 했으니까 자바 가상 머신을 통하지 않고 운영체제에서 바로 실행시키면 되는거 아닌가? 하는 의문을 가질 수 있습니다.

여기에는 운영체제에 대한 이해가 필요하지만, 간단히 말해서 운영체제마다 이해할 수 있는 언어의 형태가 다르기 때문입니다.

어떤 프로그램을 받기 전에 Windows 버전과 Mac 버전을 선택해서 받은 적이 있을 겁니다. 그 이유가 운영체제마다 이해할 수 있는 언어가 다르기 때문입니다. 그렇기 때문에 개발자들은 Window 버전과 Mac 버전 양쪽으로 개발해야 하는 번거로움이 있습니다.

하지만 자바는 어떤 운영체제라도 상관없이 동일한 동작을 실행시킬 수 있는데, 이를 가능하게 하는 것이 JVM(Java Virtual Machine) 입니다.

이 JVM이란 녀석이 프로그래머가 만든 코드를 각 운영체제가 알아들을 수 있는 코드로 변환시켜주기 때문입니다.

그렇기 때문에 JAVA를 처음 배울 때 자바는 플랫폼(OS)에 독립적인, 이식성이 높은 언어라고 합니다.

하지만 이 JVM 자체는 플랫폼(OS)에 의존적인데, 그 이유가 운영체제가 이해할 수 있는 언어로 변환하기 위해서는 해당 운영체제의 언어에 맞는 JVM이 필요하기 때문입니다.

JAVA가 플랫폼(OS)에 독립적인 언어라고 하면서도 JVM을 운영체제별로 따로 받는 이유입니다.

JVM 설명각 운영체제별로 JVM이 존재합니다

정리하자면 JVM은 플랫폼에 의존적이지만, 자바 프로그램을 운영체제에 상관없이 동작시킬 수 있게 하는, 중간에 위치한 가상 기계라고 볼 수 있습니다.

2.JRE (Java Runtime Environment)

그렇다면 JRE는 뭘까요?

JVM이 JAVA 프로그램을 운영체제에 상관없이 동작시킬 수 있게 하는 가상 기계라고 했지만...

이 JVM만 가지고 JAVA 프로그램을 실행, 동작시킬 수 없습니다. 프로그램을 실행시키기 위해서는 실행 환경이 구축되어 있어야하죠.

좀 더 자세히 말하자면,  소프트웨어를 실행시키기 위해서는 클래스 파일을 로드하거나 메모리 및 기타 시스템 리소스에 대한 서비스 같은 것들이 필요한데... 이런 서비스를 제공하는 것이 JRE(Java Runtime Environment)입니다.

실제로 마인크래프트 같은 자바 기반 프로그램을 다운받으려고 하거나 따로 JAVA를 받으려고 할 때 JVM만 따로 받는 경우는 없고, JRE로 JVM과 함께 받게 됩니다.

이 JRE는  JVM이 프로그램을 동작시킬 때 필요한 라이브러리나 여러 파일들이 포함되어 있습니다.

JRE

3.JDK (Java Development Kit)

이제 마지막으로 JDK네요.

JDK(Java Development Kit)는 문자 그대로 자바 개발 도구 입니다. 자바 개발을 위한 개발도구들(javac, 디버거 등...)이 포함되어 있죠.

우리가 JAVA 프로그램을 개발하기 위해서는 이 JDK를 받게 됩니다. 만약 이미 jdk를 설치하고 이클립스 같은 개발환경으로 개발해보신 분이 계시다면 아마 따로 jre나 jvm을 받지 않았을 겁니다.

이 JDK만 다운받아도 JRE 를 포함하고 있기 때문에, 저는 jdk 설치를 끝낸 후 jre를 설치하는... 설치 경로를 두 번 설정해주는 기억밖에 없네요...

JDK



  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기