Java는 오늘날 개발 환경에서 사용되는 가장 인기 있는 프로그래밍 언어 중 하나입니다. 주로 백엔드 개발 프로젝트, 게임 개발, 데스크톱, 모바일 컴퓨팅에 사용됩니다. 이어지는 내용을 통해 JVM(Java virtual machine), JRE(Java Runtime Environment), JDK(Java Development Kit)가 각각 Java 개발 과정에서 어떤 역할을 하는지 알아보세요. 또한 이들의 상호 관계와 차이점도 함께 확인할 수 있습니다.
JVM(Java virtual machine)은 Java 바이트코드를 로드하고 검증하며 실행합니다. Java 프로그램을 실행하기 때문에 Java 프로그래밍 언어의 인터프리터이자 핵심으로 불립니다.
JVM은 바이트코드를 머신별 코드로 변환하는 역할을 하며 JDK와 JRE 모두에서 필요합니다. 또한 플랫폼에 따라 다르며 메모리 관리 및 보안을 포함한 많은 기능을 수행합니다. 또한 JVM은 다른 프로그래밍 언어로 작성된 프로그램도 실행할 수 있는데, 이들 프로그램이 Java 바이트코드로 변환된 경우에 한합니다.
JNI(Java Native Interface)는 JVM과 관련하여 자주 언급됩니다. JNI는 JVM에서 실행되는 Java 코드가 하드웨어 및 특정 운영 체제 플랫폼과 연관된 애플리케이션과 통신할 수 있도록(즉, 호출하거나 호출될 수 있도록) 해 주는 프로그래밍 프레임워크입니다. 이러한 애플리케이션을 네이티브 애플리케이션이라고 하며 다른 언어로 작성되는 경우가 많습니다. 네이티브 메서드는 다른 언어로 작성된 네이티브 코드를 Java 애플리케이션으로 이동하는 데 사용됩니다.
JVM은 다음과 같은 세 가지 주요 구성 요소 또는 하위 시스템으로 구성됩니다.
JRE(Java Runtime Environment)는 시스템에서 Java 프로그램이나 애플리케이션을 실행하는 데 필요한 소프트웨어 도구 모음입니다.
JRE는 Java 오브젝트의 동적 메모리 할당을 위해 힙 공간을 사용합니다. JRE는 JDB(Java Debugging)에서도 사용됩니다.
프로그래머가 Java 명령을 사용하여 Java 프로그램을 실행하려면 JRE를 설치해야 합니다. 설치만 하는 경우(코드를 개발하거나 컴파일하지 않는 경우) JRE만 필요합니다.
Java Virtual Machine 외에도 JRE는 Java 애플리케이션을 최대한 활용할 수 있는 다양한 기타 지원 소프트웨어 도구 및 기능으로 구성되어 있습니다.
JDK(Java Development Kit)는 JRE의 상위 집합인 소프트웨어 개발 키트입니다. Java 애플리케이션 및 Java 애플릿 개발을 가능하게 하는 기본 구성 요소입니다. 플랫폼에 따라 다르므로 각 운영 체제(예: Mac, Unix, Windows)마다 별도의 설치 프로그램이 필요합니다.
JDK에는 Java 플랫폼을 사용하여 개발된 프로그램을 컴파일하고 디버그하며 실행하는 데 필요한 모든 도구가 포함되어 있습니다. (Java 프로그램은 명령줄을 사용하여 실행할 수도 있습니다.)
JDK에는 Java 프로그램을 실행하는 데 필요한 모든 Java 도구, 실행 파일, 바이너리가 포함되어 있습니다. 여기에는 JRE, 컴파일러, 디버거, 아카이버, 그리고 Java 개발에 사용되는 기타 도구가 포함됩니다.
Java는 Java SE(Java Standard Edition) 또는 Core Java와 동일한 의미로 사용됩니다. 세 가지 표현 모두 유형과 객체를 정의하는 기능을 포함하는 Java 기본 사양을 가리킵니다. 반면에 Java EE는 API를 제공하며 일반적으로 대규모 애플리케이션을 실행하는 데 사용됩니다. 이 블로그는 Java SE를 중심 내용으로 다룹니다.
먼저 Java의 세 가지 핵심 구성 요소가 어떻게 함께 작동하는지 살펴본 다음 차이점을 살펴보겠습니다. 다음 다이어그램에서는 JVM, JRE, JDK가 Java 환경에서 서로 어떻게 구성되고 연관되는지 보여줍니다.
야구공을 단면으로 상상해 보면, 공은 쿠션이 있는 둥근 코어, 양모와 면으로 된 중간층, 소가죽으로 된 외피의 세 가지 주요 구성 요소로 이루어져 있습니다. 이 세 가지 층 중 하나라도 없는 공은 의도한 기능을 제대로 수행하지 못합니다. 야구공의 세 가지 기본 요소와 마찬가지로 JVM, JRE, JDK에는 모두 특정 기능이 있습니다. 이 세 가지 모두 없이는 Java는 제대로 작동하지 않습니다.
다음 동영상에서 Jamil Spain이 JRE와 JDK의 관계를 자세히 설명합니다.
이제 차이점을 살펴보겠습니다.
JVM, JRE 또는 JDK를 향상시키는 데 사용할 수 있는 많은 보완 기술이 있습니다. 가장 자주 사용되는 기술은 다음과 같습니다.
JVM(Java virtual machine)은 가상 머신(VM)을 만드는 데 사용됩니다. VM은 여러 애플리케이션이 서로 영향을 주지 않고 동일한 기본 물리적 하드웨어에서 실행할 수 있도록 하는 서버입니다. 이를 통해 리소스를 더 잘 사용할 수 있으며 기존 인프라보다 훨씬 쉽고 비용 효율적으로 확장할 수 있습니다. 또한 VM은 독립적이기 때문에 쉽게 폐기할 수 있습니다. 애플리케이션이 더 이상 필요하지 않으면 VM을 종료하기만 하면 됩니다.
컨테이너는 이러한 추상화를 한 단계 더 발전시켜 OS 커널을 가상화합니다. OS가 없기 때문에 컨테이너는 VM보다 훨씬 더 가볍고 빠르며 유연합니다.
많은 조직에서 Java는 여전히 애플리케이션 개발의 핵심 요소로, 이식 가능하고 확장 가능한 솔루션을 만들 때 안정적인 기반을 제공합니다. 또한 클라우드로 전환하는 과정에서 애플리케이션을 현대화하는 데 중요한 역할을 할 수 있습니다.
OpenJDK와 IBM Runtimes for Business를 살펴보고 한 단계 더 나아가세요. 이들은 Java 애플리케이션의 구현, 모니터링, 관리에 필요한 안정적이고 비용 효율적인 상업적 지원을 제공합니다.