잡다한 시리즈/개발

Apple M1 macOS Oracle Java 17 또는 OpenJDK 설치하기

GGOBOOGI 2021. 12. 14. 14:25
반응형

목차

  • JDK? JRE? JVM?
    • Java
    • JVM
    • JRE
    • JDK
  • JDK 종류
    • OracleJDK
    • OpenJDK
  • JDK 설치
    • OracleJDK 설치하기
    • OracleJDK Uninstall
    • AdoptOpenJDK 설치 가능한가?
    • Azul Zulu 설치하기
    • Azul Zulu Uninstall

 

 

며칠전인지 몇주전인지부터 맥북이 주인아 몬터레이 새로 나왔다!!!!! 깔아줘라!!!!!! 나는 준비 됐어 너만 준비되면 돼 준비됐니?!@?!@?!@! 를 끊임없이 외쳤다. 귀찮고.. 이래저래 충돌날꺼 생각하면 싫어서 안하려고 했는데 오랜만에 본격적으로 개발 환경 세팅하기 전에 올려놔야 개발중에 충돌하는 불상사를 막을 수 있지 않을까 싶어 그냥 올렸다.

몬터레이 예아.

 

이제 오랜만에 자바... 개발을 해보려고 했는데 맥북 사고 개발다운 개발을 하지 않은 터라 JDK조차 깔려있지 않았다. 이제 맥북을 본격적으로 사용해줄 것이니!!!!! Java 설치부터 시작해 보았다.

 

일단 윈도우 유저들도 그렇겠지만 범상치 않은 macOS를 쓰는 인간들은(+ 거기에 인텔칩이 아닌 인간들은) "mac m1 java install" 이런 문구를 구글링해보며 오만가지 Java 관련된 용어들을 만나게 된다. 예전에는 그냥 하라는 대로 하지 뭐.. 하고 설치 방법이 정리되어 있는 블로그 하나를 정해서 따라했다. 근데 그러다 보면 옛날 버전이라 하다가 망한 적도 있고, 그냥 뭔지 모르고 해서 나중에 또 구글링 해야 하는 불상사가 발생하는 경우가 많았다.

 

고로, 구글링 하면 나오는 여러가지 용어부터 뭐가뭔지부터 알아보자.

JDK? JRE? JVM?

일단 Java를 설치해야지 라는 생각이 든 사람들은 한번쯤 오라클 홈페이지에 들어가 보게 된다. 그러나 들어가서는 혼돈의 도가니탕! 개발에 쓰이는 환경 요구사항은 보통 Java 8(JDK 1.8)과 같이 Java와 JDK 버전이 함께 명시되어 있을 것이다.

 

여기서 Java와 JDK의 차이는 무엇일까?

Java

Java는 그 자체로 프로그래밍 언어를 말하면서, Java 언어로 기술된 프로그램 개발 및 실행을 할 수 있는 소프트웨어의 모임을 말한다.

 

일단 요구 환경을 보면 알 수 있듯이 Java 에도 버전이 있다. 사실 Java는 프로그래밍 언어를 말하는 것이기도 하면서, Java 언어로 기술된 프로그램 개발 및 실행을 할 수 있는 소프트웨어의 모임을 말하기도 한다. 전공생들 중 학교에서 Java 수업을 들었던 분들이라면 다들 아시듯이, Java는 HW나 OS에 종속되지 않고 별도의 JVM(Java Virtual Machine) 위에서 돌아간다. 따라서 개발을 할 때에도 별도의 HW나 OS에 따른 프로그램이 필요한 것이 아니라 JVM과 같은 실행 환경과 Java 표준 라이브러리 세트, 컴파일러 환경 등의 개발 환경을 마련해주기만 하면 어디서든 개발 및 실행이 가능하다. 이러한 Java 실행 환경과 개발 환경을 통으로 제공해주는 것이 소프트웨어의 모임으로써의 Java이다.

 

그럼 당연히! Java는 그 자체로 소프트웨어 모임이니까 지속적인 발전이 있을 것이고, 그에 따라 버전이 나뉘어짐이 명확하다. 그렇다면 JDK란 무엇일까?

 

이를 위해서는 위의 그림을 이해해야 한다. 

JVM

일단 먼저 JVM(Java Virtual Machine)은 앞에서도 언급했듯이 자바로 쓰여진 프로그램이 돌아가는 환경을 의미한다. 근데 환경만 있다고 프로그램이 돌아갈까? 아니다. JVM은 단순히 진짜 그 프로그램이 돌아가는 환경일 뿐이지, 프로그램에서 참조하는 여러 라이브러리나 파일들은 포함하고 있지 않다.

JRE

따라서, 프로그램이 적절히 돌아갈 수 있도록 JVM 및 프로그램 실행에 필요한 여러 라이브러리와 파일들을 한데 묶은 것을 JRE(Java Runtime Environment)라고 한다. 이 JRE에 포함된 여러가지 것들은 자바로 쓰인 프로그램, 즉 자바 응용프로그램이 정상적으로 돌아갈 수 있는 최소한의 요구사항들을 만족시키는 것이다. 정상적으로 "실행"되도록 하는 친구들일 뿐이지, JRE만 가지고는 "개발"할 수 없다.

JDK

자 이제 대충 감이 오시겠지. JRE는 자바 응용프로그램의 정상적인 실행을 가능토록 하는 아이였지만, 개발은 못한다고 했다. 고로 JDK(Java Development Kit)는 JRE와 더불어 개발을 할 때 필요한 컴파일러, 자바 도큐먼트 생성 등을 위한 도구들을 포함한다.

 

우리는 자바로 개발을 하고 싶은 것이므로, JRE가 아닌 JDK를 깔아야 정상적인 개발 및 실행 환경이 마련되는 것이다. 그렇다면 JDK는 어떻게 깔 수 있을까?

 

JDK 종류

일단 JDK를 설치하려고 열심히 구글링을 하다보면 Oracle JDK도 있고, OpenJDK도 있는 것을 많이 보았을 것이다. 둘은 대체 무슨 차이가 있는 것일까?

Oracle JDK

Oracle JDK는 쉽게 말해 상업용 JDK로, 오라클이라는 대규모 회사에서 직접 JDK를 만들고 배포하기 때문에 완성도가 높지만 폐쇄적이다. 또한 Oracle JDK를 이용하여 상업적인 프로젝트를 진행하기 위해서는 유료 라이센스를 가져야만 한다.

 

Java라는 언어 자체는 뭐가 됐던 무료이다. 하지만 문제는 Java라는 언어를 만든 썬 마이크로시스템즈를 오라클이 인수하면서 오라클만의 JDK와 JVM을 만들면서 시작됐다. 오라클 내부에서 폐쇄적으로 JDK랑 JVM을 만들면서 성능이 굉장히 좋았고 원래는 무료였다. 그래서 많은 기업들이 Java를 기반으로 시스템을 구축하였고, 여기에는 당연히 오라클 JDK를 사용했다.

 

그런데 두둥탁. Java가 웬만한 시스템들의 베이스로 깔리고, 평온하게 잘 지내고 있었는데 뜬금없이 오라클이 2019년 1월 이후부터 상업적으로 이용하려는 기업들을 대상으로 돈(!)을 내지 않으면 앞으로 자신들이 제공하는 JDK의 최신 패치 등을 사용할 수 없다고 못을 박았다. 아니 그럼 돈 안내고 그냥 쓰던거 계속 쓰면 안돼? 라고 하기엔 상대는 기업들이라 지속적으로 보안 및 오류 수정 패치가 반드시 필요한 사람들이었다. 결국엔 걍 돈 내고 쓰라는 소리지 뭐.

 

근데 웬만한 회사들이 진짜 다 Oracle JDK 무료로 잘 쓰고 있었는데.. 갑자기 응~ 이제 돈내고 사용하세요^^! 라고 하면 넵^^! 이러면서 고분고분하게 넘어갈 사람들이 얼마나 될까. 결국 여러 기업과 개발자들이 모여서 오픈소스로 JDK랑 JVM을 계속해서 만들어 나가게 되었다.

OpenJDK

그렇게 오픈소스로 구현된, 누구나 쓸 수 있고 누구나 무료로 상업적으로 활용할 수 있는 OpenJDK가 탄생하게 되었다. 그래도 Java를 개발한 썬 마이크로시스템즈에서 옛날에 OpenJDK로 소스코드를 공개해둔 것이 있었기 때문에, 사람들은 이것을 바탕으로 JDK를 업그레이드하고 새로운 기능을 만들어 나가면서 OpenJDK를 발전시켜 나아갔다.

 

초기에는 당연히 OpenJDK가 Oracle JDK보다 성능이 좋지 못했다. 오라클에서 자기네들끼리 폐쇄적으로 만들어내는 JVM, JDK였으니 본인들만의 최적화 방법이 있었을 터. 그걸 개발자들끼리 구현해 내려니 당연히 오라클이 하는 것 보다는 성능이 좋지 못했다.

 

그래도 주기적인 업데이트로 성능이 개선되고, 오픈소스인 만큼 여러 개발자들이 자신이 발견한 문제들을 보고하고 고쳐 나가면서 이젠 많은 기업들이 OpenJDK 기반으로 옮겼다.

 

JDK 설치

두 개의 버전을 한번씩 설치하고 삭제해봤다. SSD야 미안해

 

어떤걸 설치해야하나요? 하시면 상업적으로 이용할 생각이시면 당연히 OpenJDK를, 상업적 이용 절대 없고 대기업 빽으로 안정적인게 좋다 하시면 OracleJDK를 쓰시면 되지 않을까 싶다.

 

그리고 내 설치 환경은 맥북 M1, macOS Monterey 12.0.1 버전이다.

OracleJDK 설치하기

꽤 최근까지만 해도 OracleJDK에서는 M1칩에 대한 JDK를 제공하지 않았다.

 

하지만!!!!!!! 이번에(2021년 12월 초 기준) 들어가보니 Java17 버전부터 M1칩에 대한 JDK도 제공하고 있었다. Java17 설치를 같이 해 보자.

 

1. DMG 파일 다운로드 하기

 

Oracle Java 다운로드 페이지로 들어가보면, 아래의 캡쳐와 같이 Java17 SE Development Kit 다운로드 목록이 뜰 것이다. 아니 JDK 다운받아야 하는데 뭔 JavaSE 같은 소리하세요? 가 아니라 JavaSE가 Oracle Java JDK의 Standard Edition이라는 소리다. 그냥 걍 표준 프로그램 정도. SE말고도 기업 특화용 EE나 임베디드용 ME 등등이 있다. 벗 대부분의 범용 목적으로는 굳이 이런 특화된 버전이 필요없기 때문에 JavaSE가 표준이다.

 

macOS 탭으로 이동하면, Arm 64와 x64로 크게 나뉘어져 있다. 쉽게 말하면 Arm은 애플 실리콘 칩(M1) 칩이고, x64는 인텔칩이다. 또한 Compressed Archive는 tar로 압축된 것을 그대로 다운받아서 압축 푸는 형식으로 설치를 하는 것이고, DMG는 그냥 흔히 설치 마법사...라고 해야하나 macOS에서 프로그램 설치할때 쓰는 디스크 이미지 파일이다.

 

DMG가 그냥 빠르고 쉽게 환경변수 설정까지 보통 다 해주는 터라 나는 DMG를 선택했다. 오른쪽의 주소를 눌러서 DMG를 다운받고, 설치를 진행하자.

 

2. DMG로 설치 진행하기

다운받은 DMG 파일을 열면 위와 같이 어디서 많이 본 설치 마법사가 반겨준다. "계속" 버튼을 눌러서 설치를 진행하면 된다. 여긴 뭐... 내가 따로 설명할게 없다. 그냥 하면 되거든!

 

3. Java 설치 확인하기

 

모든것의 설치를 확인하는 방법은 터미널을 열어서 확인하는 것이다. 터미널을 열어서 "java -version" 명령어를 입력해보았을 때, 잘 설치되었다면 아래와 같이 자바 버전이 출력된다.

 

Oracle Java Uninstall 방법

https://docs.oracle.com/en/java/javase/17/install/installation-jdk-macos.html#GUID-F9183C70-2E96-40F4-9104-F3814A5A331F

 

JDK Installation Guide

The JDK supports both Intel-based (x64) and Apple Silicon (AArch64) Mac computers.

docs.oracle.com

오라클 공식 도큐먼트를 참고하여 위에서 설치한 Java 17을 uninstall 하였다.

 

// jdk 설치되어 있는 폴더로 이동
$ cd /Library/Java/JavaVirtualMachines.

// 폴더 내에 어떤 버전의 jdk 들이 있는지를 확인
$ ls

// 원하는 버전의 jdk 삭제
$ sudo rm -rf jdk-버전입력.jdk

이렇게 다 삭제하고 자바 버전을 확인해보면 아무것도 안 잡힐 것이다.

OpenJDK 설치하기

일단 OpenJDK에는 종류가 여러가지이다. "OpenJDK" 그 자체로 이름을 가진 오픈소스 JDK도 있지만, 오픈소스 JDK 공급자는 매우 많고 기업별로 자신들의 SW에 특화된 JDK를 내어놓기도 한다.

 

일단 JDK에는 컴파일러가 들어가기 때문에 HW에 따라서 필요로 하는 컴파일러도 다르다. 고로 자신의 HW와 OS에 맞는 JDK를 깔아야 한다. 나는 세상에 반항하는 M1칩을 가지고 있으며 생각보다 아직 M1칩을 제대로 지원하는 회사가 그렇게 많지는 않기 때문에(카카오톡도 로제타로 돌아가는중) 잘 살펴보았다.

가장 유명한 AdoptOpenJDK, 설치 가능한가?

일단 먼저 말하면 AdoptOpenJDK에서는 macOS M1 칩에 호환되는 JDK를 제공하지 않아서 다른 OpenJDK 공급자를 알아보아야 한다. 

 

오픈소스 JDK에서 가장 유명한 공급자인 OpenJDK에서 M1을 위한 JDK를 공급하는지 알아보았다. 자신이 원하는 타겟을 지원하는지를 알아보려면 아래의 링크로 들어가보면 된다.

 

https://adoptopenjdk.net/releases.html?variant=openjdk11&jvmVariant=hotspot 

 

Latest release | AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

 

여기서 한 가지 의문이 들 수 있다. "아니 OpenJDK에서 제공한다면서 AdoptOpenJDK는 또 뭐야?" OpenJDK는 보통 오픈소스 JDK 프로젝트를 지칭하는 것으로 소스코드 그 자체 혹은 소스코드가 저장된 레파지토리를 의미한다. 소스코드 그 자체로는 설치나 그런것이 불가능하겠지? 따라서 이 오픈소스 JDK 소스코드들을 빌드해서 설치 가능한 바이너리로 만들고, 지속적으로 커뮤니티를 통해 유지보수 해주는 곳을 AdoptOpenJDK라고 한다. 따라서 우리는 AdoptOpenJDK에서 설치 가능한 파일을 찾으면 된다.

위의 링크를 따라 들어가면 다음과 같은 화면이 나올 것이다. 각 섹션의 의미와 사용방법은 아래와 같다.

 

1. 지원하는 JDK 버전 선택

LTS 라고 이름이 붙은 것은 Long Term Support의 약자로, 다른 버전보다 더 오랜 기간동안 지속적인 업데이트가 이루어지는 버전을 의미한다. 표준 버전이라고 생각하면 될듯. 

 

2. JVM 종류 선택

JVM은 앞서 말했듯이 자바로 쓰여진 프로그램이 돌아가는 환경이다. 이 JVM의 종류, 다시말해 공급자 정도로 이해하면 될텐데 여기에는 HotSpot 또는 OpenJ9가 있으니 원하는 것을 선택하라는 것이다. 잘 모르겠어서 옆의 Help Me Choose 에 커서를 올려놓았더니, 친절하게 설명이 되어 있었다.

HotSpot은 OpenJDK 커뮤니티에서 만들어 나가는 것이고, 가장 많이 쓰는 JVM이다. OpenJ9은 자바 하면 다들 떠올릴 이클립스의 커뮤니티에서 만들어 가나는 것으로, 성능을 중점적으로 만들었고 IBM JDK에 쓰이는 것이라고 한다. OpenJ9도 HotSpot 처럼 모든 자바 프로젝트에 적합하다고 한다.

근데 뭐 많이 쓴다니까... HotSpot JVM을 일반적으로 선택하면 되지 않을까 싶다.

 

3. OS와 Architecture 선택

OS는 말 그대로 사용하는 OS의 종류이고, 같은 OS여도 기반이 되는 HW 종류에 따라 필요한 컴파일러가 다르니 Architectrue에서 본인 CPU 아키텍처를 선택하면 된다.

 

나 같은 경우는 M1칩이라 OS는 macOS, Arch는 칩 이름은 M1이어도 ARM 기반이라 ARM으로 보통 표기되는데 AdoptOpenJDK에서는 이와 호환되는 버전을 가장 최신 JDK 버전에서도 제공하지 않으므로, 설치할 수 없다.

 

아 물론 그냥 인텔칩 기준으로 나온 x64 깔아도 돌아가긴 돌아갈 것이다. 왜냐하면 맥북에 로제타가 있으니. 로제타는 인텔칩 버전으로 나온 프로그램이 M1칩에서 잘 돌아갈 수 있도록 해주는 에뮬레이터인데, 당연히 에뮬레이터를 끼고 실행하면 성능이 나빠지겠지? 그리고 그냥 인텔칩 기준으로 나온 것을 M1칩에서 돌리자니 찝찝해서 나는 웬만하면 M1칩 버전을 찾고싶기 때문에... 다른 JDK 공급자를 살펴보았다.

 

Azul OpenJDK 설치하기

M1 호환 JDK를 제공하는 공급자로 Azul이 있다. Azul 또한 대규모 JDK 공급자로, 세계의 많은 기업들이 그들의 제품을 사용하고 있다. Azul에서 제공하는 JDK의 이름은 Zulu JDK이다. 뭔가 귀여운 이름

 

그럼 이제 Azul에서 M1 용 ZuluJDK를 다운받아보자.

 

https://www.azul.com/downloads/#download-openjdk

 

Downloads

Download Azul Platform Prime Azul Platform Prime extends Core, adding unique Azul innovations to improve the runtime characteristics of Java workloads. Azul Platform Prime delivers added performance, scale, consistency, and efficiency to Java applications,

www.azul.com

위의 링크로 들어가면 아까 AdoptOpenJDK에서 했던 것과 같이 JDK 버전, OS, Architecture를 선택할 수 있는 필터가 나온다. 다행스럽게 가장 많이 쓰이는 Java 8 버전도 macOS Arm 을 지원한다! 그럼 이제 설치를 해보자.

 

1. DMG 파일 다운로드 하기

 

원하는 버전을 선택해보면 여러가지 타입으로 설치 파일을 제공한다. .dmg, .tar, .zip까지 다양하다. 하지만 나는 이래저래 다 귀찮으니 .dmg로 깔끔하게 설치해야지. 그렇다고 바로 .dmg를 눌러서 휘리릭 해버리기보다, How to install?을 클릭하여 ZuluJDK에서 공식적으로 설명하는 설치 방법은 어떤 것인지를 미리 숙지하자. 물론 애초에 .dmg가 있는 이상 준비해야할게 뭐 없음.

 

How to install을 누르면 위와 같은 팝업창이 뜨는데, 여기서 Preparing the Zulu installation platform 을 누르면 공식 doc의 전문을 볼 수 있다. 근데 어차피 저 팝업창에 떠 있는 것과 같은 것으 설명해서.. 굳이 볼 필요는 없다. 그래도 궁금할 수 있는 사람들을 위해 링크를 남기겠다.

 

How to install Azul Zulu JDK macOS - Azul Docs

 

Azul Platform Core

This section explains how to install Azul Zulu builds of OpenJDK on macOS. Install using a DMG installer Download a DMG installer for Azul Zulu from Azul Downloads. Double-click the file to start the installation and follow the wizard instructions. The def

docs.azul.com

그래서 뭐 어쨌든... 우리는 공식 설명서가 하라는 대로 냅다 .dmg를 다운받으면 된다. 

 

2. DMG로 설치 진행하기

 

.dmg가 있는 이상... 우리는 편하게 클릭만 하면 된다. 

 

ㄷㄱㄷㄱ 언박싱처럼 박스를 두번 클릭하면

 

설치 프로그램이 인사를 하기 시작하고 그냥 계속 눌러서 설치하면 된다. 참 쉽죠?

 

3. Java 설치 확인하기

 

그래도 마지막엔 설치가 잘 되었는지 확인은 해야지. 아까 했던 것 처럼 터미널을 열어서 "java -version"을 입력하여 결과를 확인해보자.

 

이렇게 OpenJDK 로 버전이 잡히면 완성! 아까 위에서 설치해봤던 Oracle JDK에서는 OpenJDK 이런게 아니라 Java로 이름붙였던걸 생각하면 확실히 OpenJDK를 잘 깔았음을 알 수 있다.

 

Azul Zulu JDK Uninstall 방법

예 뭐 사실 OracleJDK uninstall 방법과 똑같다. 그래도 혹시 필요로 할 미래의 나 자신과 누군가를 위해 공식 docs를 첨부하고, 그 방법대로 uninstall을 진행해 보았다.

 

How to uninstall Azul Zulu JDK - Azul docs

 

Azul Platform Core

This section explains how to uninstall Azul Zulu on macOS. If you use a DMG package to install Azul Zulu, it installs the product into the /Library/Java/JavaVirtualMachines directory. To see all Azul Zulu versions installed on your Mac, navigate to this di

docs.azul.com

공식 docs에 적힌 대로, 아래의 명령어들을 터미널에 차례로 입력하면 된다.

// jdk 파일 경로로 이동
$ cd /Library/Java/JavaVirtualMachines/

// 설치되어있는 jdk 버전 확인
$ ls


// uninstall을 원하는 버전명을 아래의 명령어에 입력하여 삭제
$ sudo rm -rf zulu-버전명.jdk

위의 명령어들을 그대로 입력하고, 마지막으로 java -version 명령어를 통해 시스템에 걸려있는 jdk가 없음을 확인했다!

 

더보기
반응형