2023-09-15 작성

자바 헷갈리는 용어 정리(Java SE, JDK, JRE, JVM)

Java SE

자바는 크게 3가지의 에디션이 있다.

  • Java SE (Java Standard Edition, J2SE) : 표준 에디션
  • Java EE (Java Enterprise Edition, J2EE) : 기업용 에디션 (=Jakarta EE)
  • Java ME (Java Micro Edition, J2ME) : 임베디드용 에디션

위 에디션 중에서 사람들이 많이 사용하는 것은 Java SE이다. Java SE는 한마디로 자바의 표준안이자 명세서(spec)를 말하는데, 이 명세서에 따라서 Java가 만들어지게 된다. 예를 들어 Java SE 20은 버전 20에 대한 명세서를 말한다.

Java SE는 JCP(Java Community Process)라는 조직을 통해서 만들어지는데, JCP 홈페이지에서 JSR 배포 목록을 확인할 수 있다. 이때 JSR(Java Specification Request)은 JCP 조직을 통해 Java 플랫폼의 최종 사양을 말한다. 

JDK (Java Development Kit)

Java SE 명세서에 따라 만들어진 구체적인 소프트웨어가 바로 JDK이다. Java 개발자라면 반드시 JDK를 설치해야 하는데, 이유는 개발자를 위한 자바 버전이기 때문이다. 자바 언어를 컴파일하고 개발할 수 있도록 각종 도구와 JRE가 포함되어 있어서 설치가 필수적이다.

자바 명세서인 Java SE 버전에 따라, Java SE 버전을 지원에 맞춘 개발 툴이 JDK인 셈이다.

JRE (Java Runtime Environment)

자바가 실제로 동작하는 데 필요한 JVM(자바 가상머신), 라이브러리, 각종 파일들이 포함되어 있다. 자바로 만들어진 프로그램을 구동하려고 한다면 JRE를 설치한다. 일반인을 위한 자바 버전이라고 할 수 있다.

Java 8까지는 Oracle JDK를 설치하면 항상 JRE의 추가 설치가 진행되고, 별도의 폴더에 포함되어 있었다. Java 9부터는 이러한 구분이 기본적으로 사라졌으며 항상 JDK를 다운로드하게 된다. JDK의 디렉토리 구조도 변경되어 더 이상 명시적인 JRE 폴더가 없다.

JVM (Java Virtual Machine)

자바 가상머신으로, 자바가 실제로 구동하는 환경이다. 자바로 만든 애플리케이션은 JVM이라는 가상화된 환경에서 구동되고, OS에 따라서 달라질 수 있는 호환성의 문제는 운영체제 버전에 따라서 만들어진 JVM이 알아서 해결한다.
즉, 자바의 주된 목표인 '하나의 자바 프로그램을 만들면 어떤 환경에서도 실행 가능'하도록 해주는 것이 바로 JVM 역할이다.

개발 순서

  1. JAVA 언어로 개발을 한다. 자바 개발, 컴파일, 디버깅을 하려면 JDK가 필요하다.
  2. 개발을 하면서 자바에서 기본으로 제공하는 JRE 라이브러리를 사용한다.
  3. 여러 가지 환경 파일도 JRE가 가지고 있지만 개발자가 직접 다룰 일은 거의 없다.
  4. 애플리케이션 실행 시 JVM에서 .class파일을 읽어서 바이너리코드를 검증하고 OS 환경에 적합하게 실행해 준다.

※ 어쨌든 JDK 안에 모두 다 포함되어 있다.
      "JDK > JRE > JVM"

※ 자바로 개발하려면 JDK가 필수이지만, 자바로 만들어진 프로그램을 실행하고자 한다면 JRE만 있으면 된다.(JVM 포함)
※ 같은 코드를 짜면 OS별로 최적화되어 있는 JVM이 알아서 환경에 맞게 실행해 준다.

References