아장아장 개발 일기

Java버전, JRE, JDK, 각기 다른 Build 기본 개념 본문

개발

Java버전, JRE, JDK, 각기 다른 Build 기본 개념

빨간머리 마녀 🍒 2022. 6. 22. 16:04

자바 환경세팅할때 항상, Java, JDK, JVM, JRE, SDK의 개념이 헷갈렸습니다.

이번에 새로운 프로젝트 소스를 만들 기회가 있어, 해당 개념을 먼저 정리하고 시작했는데요.

그때 참고한 블로그 글을 요약해서 소개해드리려고 합니다.

(19년도에 작성된 블로그글이라 업데이트가 필요한 부분이 있을 수 있습니다.)

먼저, Java 무슨 버전을 사용해야할까요?

  • 많은 레거시 프로젝트들이 여전히 Java 버전 8에 머무르고 있습니다.
  • 몇몇 레거시 프로젝트들은 버전 5, 6를 사용하는 경우도 있습니다.
  • 만약 가장 최신 IDE, 프레임워크, 빌드툴을 사용해 새로운 프로젝트를 개발한다면 Java 11 혹은 그 이상의 버전을 사용해도 좋습니다.

왜 많은 회사들이 자바 8버전에 머물러 있을까요?

  • 빌드툴(Maven, Gradle 등)과 몇가지 라이브러리들이 초기에 자바 버전 8보다 높은 버전에서 버그가 있었고 수정이 필요했습니다. 심지어 최근까지도 자바 버전 9 이상에서 특정 빌드 툴이 ‘reflective access’ 경고를 표시하기도 했습니다.
  • 자바 버전 8까지는 대부분 Oracle의 JDK 빌드를 사용했는데, 이는 라이센싱 문제를 해결해줬습니다. 오라클은 19년도에 라이센싱 정책을 변경했는데, 이로인해 “자바는 더 이상 무료가 아니다.”라는 인식을 가지게해 혼란이 야기되었는데요. 하지만 이는 사실이 아니었습니다. 아래의 ‘Java 배포’ 부분에서 설명이 이어집니다.

왜 몇몇 자바 버전은 1.x로 표기될까요?

자바 버전 9 이전에는 다른 네이밍 방침이 사용되었습니다. 자바 버전 8은 1.8, 자바 버전 5는 1.5로 불리기도 합니다.

c:\\Program Files\\Java\\jdk1.8.0_191\\bin>java -version
java version "1.8.0_191" (1)
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

자바 버전 9부터 네이밍 방침이 변경되어, 아래와 같이 보입니다.

c:\\Program Files\\Java\\jdk11\\bin>java -version
openjdk version "11" 2018-09-25 (1)
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

자바 버전간의 차이에는 무엇이 있을까요? 특정 버전의 자바를 배워야할까요?

파이선 2와 파이선 3 사이에는 큰 차이가 있습니다. 이와같이 다른 프로그래밍 언어처럼, 자바도 버전별로 따로 배워야하는지 궁금하실 수 있습니다.

자바는 이부분에 있어서 좀 특별한데요. 바로 낮은 버전으로 호환이 잘된다는 점이 특징입니다. Java 버전 5나 8로 만들어진 프로그램이 Java 8 ~ 13 JVM으로 실행이 가능하다는 의미입니다. 몇가지 exception이 발생할 수 있지만 크게 걱정할 정도는 아닙니다.

하지만 반대방향으로는 불가능합니다. 자바 버전 13으로 개발된 프로그램이 JVM 버전 8에서 실행되지는 않습니다.

JRE와 JDK는 어떻게 다른가요?

여태까지는 Java에 대해서만 얘기했는데요. 먼저 JRE(Java Runtime Environment)와 JDK(Java Development Kit)을 구분할 필요가 있습니다.

예전에는 자바 프로그램을 실행시키고만 싶으면 JRE를 다운로드 받았습니다. JRE는 JVM(Java Virtual Machine)과 java command line 툴을 포함합니다.

새로운 자바 프로그램을 개발하기 위해서는 JDK를 다운로드 받아야 했습니다. JDK는 JRE가 가진 모든 요소와 javac 컴파일러, javadoc(Java documentation generator), jdb(Java Debugger) 같은 몇가지 다른 기능도 포함합니다.

Java 버전 8까지는 Oracle에서 JRE와 JDK를 따로따로 다운로드할 수 있게 제공했는데요.(JDK에 항상 JRE가 별도의 폴더에 포함되어 있음에도 불구하고) 자바 버전 9부터는 이러한 구분이 사라졌고 이제는 항상 JDK만 다운받습니다. JDK의 디렉토리 구조도 변경되었는데요, 더이상 JRE폴더를 따로 두지 않습니다.

여전히 몇몇 배포사들은 별도의 JRE 다운로드를 제공하지만, 이젠 JDK만 제공하는게 트렌드인 것 같습니다. 그러므로 이젠 ‘Java’와 ‘JDK’를 서로 같은 의미로 사용합니다.

자바의 각기 다른 배포사에 대하여

자바(aka. JDK) 다운로드를 제공하는 다양한 웹사이트가 있는데요. 누가 무었을, 어떤 라이센싱으로 제공하는지는 좀 불분명합니다. 아래 섹션에서 이 부분에 대해 설명드리겠습니다.

The OpenJDK Project

자바 소스코드는 OpenJDKproject 사이트에만 존재하는데, 이 소스 코드는 배포가능한 빌드가 아닙니다. 이론상으로는 개인적으로 해당 소스코드로 빌드를 생성해서 예를들어 ‘MarcoJDK’라고 부르며 배포할 수도 있습니다. 하지만 이 배포는 증명이 안되어 합법적으로 Java SE(Standard Edition)에 호환되지 않습니다.

바로 이러한 이유때문에 다양한 벤더사들이 이러한 빌드를 만들고, 법적 자격을 받은 후 배포를 하는 것입니다.

벤더사들이 String 클래스에서 메서드를 임의로 삭제하는건 불가능하지만, 새로운 브랜딩이나 CLI같은 유용한 유틸리티를 추가할 수는 있습니다. 하지만 이 외에는 기존 자바 소스코드는 모든 배포사에 동일하게 적용됩니다.

OpenJDK Builds(by Oracle)과 OracleJDK Builds

소스코드로 자바를 빌드하는 벤더사중 하나는 Oracle이 있습니다. 오라클에는 두가지 종류의 자바 배포가 있는데, 처음엔 헷갈릴 수 있습니다.

  1. OpenJDK builds : 무료이며 브랜드화 되지 않은 빌드입니다. 버전 13, 14가 출시된 후에는 이전 버전에 대한 업데이트가 이뤄지지 않을 예정이라고 합니다.
  2. OracleJDK : 브랜드화된, 상업적 빌드이며 19년도에 라이센스 변경으로 시작합니다. 프로젝트 개발중에는 무료로 사용 가능하지만, 상업적으로 배포된 후에는 오라클에 비용을 지불해야합니다. 이를 통해 버전 업데이트, JVM 이상작동시 연락할 수 있는 유선번호 등 더 많은 지원을 받을 수 있습니다.

이전에는(자바 버전 8 이전) OpenJDK builds와 OracleJDK 간에 실제적인 소스코드 차이가 있었고, OracleJDK가 좀 더 괜찮았다고 보여졌습니다. 하지만 이젠 두가지 버전은 거의 같다고 볼 수 있으며 몇가지 작은 차이만 존재합니다.

AdoptOpenJDK

2017년에 Java User Group의 회원, 개발자, 벤더사들(Amazon, Microsoft, Pivotal, RedHat 등)이 모여 AdoptOpenJDK라는 커뮤니티를 시작했습니다.

이들은 무료의, 그리고 좀 더 견고한 OpenJDKk 빌드를 보다 긴 유효기간과 업데이트와 함께 제공합니다. 또한 HotSpot과 OpenJ9 JVM중 하나를 선택할 수도 있습니다.

블로그 글에서는 여러 벤더사중에서 이 AdoptOpenJDK를 매우 추천하네요.

Azul Zulu, Amazon Corretto, SAPMachine

OpenJDK Wikipedia에서 OpenJDK 빌드의 완전한 목록을 확인하실 수 있는데요. 그 중에는 Azul Zulu, Amazon Corretto와 SapMachine이 있습니다. 간략히 말하자면, 각각의 빌드는 다른 지원 옵션과 관리 보증을 제공합니다.

 

여기까지 블로그글을 요약, 정리해보았습니다. 각 버전별 추가된 기능에 대해서도 블로그글에는 정리가 되어있는데 저는 따로 정리하지 않았습니다.

블로그 글을 통해 헷갈리던 개념들이 많이 정리가 되었는데, 다른 분들도 제 요약글과 함께 해당 블로그 글을 직접 확인해보시는 것도 좋을 것 같습니다.

읽어주셔서 감사합니다.

Comments