글 작성자: beaniejoy
  • Overview
  • iTerm과 zsh 설치 (처음으로 macOS 접하신 분들 한해서)
  • homebrew 설치
  • 기본적인 JDK 설치 및 링크 설정하기
  • JDK 버전 수동으로 변경하기
  • JDK 버전 간편하게 변경하기

 

📌 1. Overview

윈도우 운영체제에서 맥 운영체제로 이동하고 나서 처음에 가장 낯설었던 것은 jdk 설정하는 것이었습니다.
Java 개발자다 보니 jdk 버전 관리, JAVA_HOME 환경변수 등록 등 기본적인 Java 개발을 위한 jdk 설정이 필수입니다.

윈도우 운영체제에서는 간편하게 창으로 인터페이스를 제공해주기 때문에 클릭만으로 jdk 다운받고 설치하고 환경변수를 간편하게 설정할 수 있었습니다. 맥 운영체제에서는 이러한 jdk 설정을 어떻게 하는지 찾아보고 적용한 내용들을 기억할겸 글로 정리해보고자 합니다.

작성하는 내용에 대한 출처는 링크 걸어드리겠습니다. macOS JDK 설정하는 내용에 대한 블로그 글이 상당히 많았는데 제 개인적으로 가장 깔끔하고 잘 설명한 글이 아닌가 싶네요. 여러분도 참고하세요!
https://mkyong.com/java/how-to-install-java-on-mac-osx/

 

How to install Java JDK on macOS - Mkyong.com

This article shows how to install Java JDK on macOS, Homebrew package manager, manual installation, and switch between different JDK versions.

mkyong.com

 

📌 2. iTerm과 zsh 설치 (처음으로 macOS 접하신 분들 한해서)

jdk 설정을 위해 가장 먼저 선행되어야 하는 것들이 있는데요. zsh 기본 shell 설정이 필요합니다.
macOS 카탈리나 버전부터 default로 설정된 shell이 bash에서 zsh로 변경되었습니다. 하지만 처음에는 기본 터미널 혹은 iTerm2에서 zsh가 아닌 bash로 설정되어 있습니다. 이를 zsh로 변경해주어야 합니다.

또한 대부분 기본 터미널보다 iTerm2 설치 후에 oh-my-zsh 라이브러리를 다운받아 zsh를 사용하고 있습니다. 관련 내용은 친절하게 소개한 블로그글이 있어 링크로 대체하겠습니다. 해당 글 내용 따라서 zsh와 iTerm2를 가장 먼저 설치하시면 됩니다.
https://dev-yakuza.posstree.com/ko/environment/mac-iterm-zsh/

 

맥(Mac) 개발 환경 구축(1) - iTerm과 zsh

새로운 맥(Mac)에 개발 환경을 구축하려고 합니다. 맥(Mac)에 iTerm와 zsh를 설정하여 새로운 터미널 환경을 구축합니다.

dev-yakuza.posstree.com

 

📌 3. homebrew 설치

저는 jdk 버전을 homebrew를 통해 다운받았습니다. 여러 방식으로 jdk를 다운받을 수 있지만 homebrew를 통해 다운받는 게 가장 간편하고 여러 버전 관리 측면에서도 좋았습니다. homebrew 패키지도 다운받으면 됩니다.
https://brew.sh/index_ko

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

$ brew -v

 

📌 4. 기본적인 JDK 설치 및 링크 설정하기

$ brew search java

$ brew info java
  • brew search java: brew에서 관리하는 java 관련 모듈이 어떤 것들이 있는지 list up 해줍니다.
  • brew info java: openjdk 기준으로 가장 최신의 stable 버전이 무엇인지 보여줍니다. 설치 유무와 설치되어있다면 경로가 어딘지 보여줍니다.
$ brew install java

가장 최신의 OpenJDK를 설치해줍니다. 현재 기준으로는 17버전이 가장 최신의 stable 버전이네요.

$ ls -lsa /usr/local/Cellar/openjdk

0 drwxr-xr-x   3 beaniejoy  staff   96 10  1 12:38 .
0 drwxrwxr-x  28 beaniejoy  admin  896 10  1 12:38 ..
0 drwxr-xr-x  10 beaniejoy  staff  320 10  1 12:38 17

homebrew는 /usr/local/Cellar 디렉토리에 설치한 패키지들을 관리하고 있습니다. homebrew를 통해 install java를 하게 되면 해당 관리 디렉토리(/usr/local/Cellar)에 openjdk 디렉토리에서 관리하게 됩니다.

 

$ ls -lsa /usr/local/opt/openjdk
0 lrwxr-xr-x  1 beaniejoy  admin  20 10  1 12:38 /usr/local/opt/openjdk -> ../Cellar/openjdk/17

또한 /usr/local/opt/openjdk/usr/local/Cellar/openjdk를 link로 연결하게 됩니다. (윈도우로 치면 바로가기를 만든 것과 비슷)

하지만 homebrew java install만으로 해당 jdk를 실행할 수 없습니다.

jdk는 bin 디렉토리 내부에 여러 실행파일들을 실행시켜서 java compile, run 등 여러가지 작업을 수행하는데요. java 관련된 명령파일을 실제 jdk와 연결하게 되면 homebrew를 통해 설치한 jdk를 사용할 수 있게 됩니다.

$ sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

$ ls -lsa /Library/Java/JavaVirtualMachines/openjdk.jdk
0 lrwxr-xr-x  1 root  wheel  42  2  7  2021 /Library/Java/JavaVirtualMachines/openjdk.jdk -> /usr/local/opt/openjdk/libexec/openjdk.jdk
  • /Library/Java/JavaVirtualMachines/: macOS에서 /usr/bin/java 를 wrapping한 디렉토리입니다. 쉽게 말해서 여기에 실제 jdk와 연결하면 java 명령을 사용할 수 있게 됩니다.
  • homebrew에서는 여기까지 link를 걸지 않기 때문에 따로 symbolic link를 걸어야 합니다.

여기까지 완료됐으면 java를 사용할 수 있게 됩니다.

$ java -version

openjdk version "17" 2021-09-14
OpenJDK Runtime Environment Homebrew (build 17+0)
OpenJDK 64-Bit Server VM Homebrew (build 17+0, mixed mode, sharing)

 

📌 5. JDK 버전 수동으로 변경하기

지금까지 기본적으로 최신 OpenJDK를 설치하고 macOS에 적용하는 부분까지 되셨을 겁니다.

그런데 개발을 하다보면 JDK 버전을 중간중간 변경해야할 때가 종종 있습니다. 저 같은 경우 회사 개인 맥북에서 업무도 보고 개인 프로젝트도 해보곤 하는데요. 회사 프로젝트의 JDK 버전과 개인 프로젝트의 JDK 버전이 달라서 중간중간 JDK 버전을 변경해야 합니다.

우선 JDK 버전을 수동으로 변경하는 절차부터 알아보겠습니다.

$ brew insall java11

OpenJDK 11버전을 homebrew 통해 다운을 받고 17버전에서 11버전으로 변경해보려 합니다.

$ sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk

$ ls -lsa /Library/Java/JavaVirtualMachines/openjdk-11.jdk
0 lrwxr-xr-x  1 root  wheel  45  2  7  2021 /Library/Java/JavaVirtualMachines/openjdk-11.jdk -> /usr/local/opt/openjdk@11/libexec/openjdk.jdk

위에서 링크 걸어줬던 것 처럼 마찬가지로 11버전도 macOS /Library/Java/JavaVirtualMachines/openjdk-11.jdk에 링크를 걸어줍니다.

여기까지 기본 세팅은 완료됐습니다. 현재 OpenJDK 17버전과 11버전이 설치되었고 link 설정도 되어있는 상태입니다. 여기서 java 명령을 실행했을 때 11버전으로 실행되도록 하려면 bash 설정에 기존의 PATH에다 11버전 jdk 위치를 추가해야 합니다. (여기서는 zsh 설정이 되겠네요.)

$ vim ~/.zshrc

...
export PATH=/usr/local/opt/openjdk@11/bin:$PATH
...

:wq!

혹은 $ echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc

$ source ~/.zshrc

.zshrc 설정파일에 OpenJDK 11버전의 실행파일들이 들어있는 bin 폴더를 PATH에 연결합니다.

$ java -version

openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment (build 11.0.9+11)
OpenJDK 64-Bit Server VM (build 11.0.9+11, mixed mode)

OpenJDK 11버전으로 변경된 것을 확인할 수 있습니다.

 

📌 6. JDK 버전 간편하게 변경하기

사실 이 글을 쓰게 된 것은 바로 이번에 나오는 내용 때문입니다.

위의 방법으로 JDK를 변경하려면 .zshrc 파일을 열어서 수정을 하고 설정파일 다시 적용하고 해야하는데 매번 이러한 작업을 하는 것도 귀찮았습니다.
간편하게 변경하는 방법을 찾아보다가 접하게 되었고 관련 내용을 기억할겸 정리해보고자 합니다.

$ /usr/libexec/java_home -V

Matching Java Virtual Machines (3):
    17 (x86_64) "Homebrew" - "OpenJDK 17" /usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
    11.0.9 (x86_64) "UNDEFINED" - "OpenJDK 11.0.9" /usr/local/Cellar/openjdk@11/11.0.9/libexec/openjdk.jdk/Contents/Home
    1.8.0_282 (x86_64) "UNDEFINED" - "OpenJDK 8" /usr/local/Cellar/openjdk@8/1.8.0+282/libexec/openjdk.jdk/Contents/Home
/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

현재 macOS에 설치되어있는 JDK list를 보여줍니다. 어떤 버전들이 있고 실제 어떤 경로에서 관리되고 있는지 한 눈에 볼 수 있습니다.

$ /usr/libexec/java_home -v11
/usr/local/Cellar/openjdk@11/11.0.9/libexec/openjdk.jdk/Contents/Home

이렇게 특정 버전에 대한 실제 디렉토리를 확인할 수 있습니다. JDK 버전을 간편하게 변경할 때 이러한 특징들을 활용하게 됩니다.

 

jdk() {
      version=$1
      unset JAVA_HOME;
      export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
      java -version
}

제가 링크로 걸어드린 블로그글에서 소개하고 있는 방법입니다. ~/.zshrc 설정파일에 위 내용을 insert 합니다.

export PATH=$JAVA_HOME/bin:$PATH

그리고 JAVA_HOME 환경변수를 PATH에 등록합니다. 유의사항은 bin 디렉토리까지 지정해야 합니다.

$ source ~/.zshrc

변경된 설정 내용들을 적용합니다.

$ jdk 11
openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment (build 11.0.9+11)
OpenJDK 64-Bit Server VM (build 11.0.9+11, mixed mode)

$ jdk 1.8
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-bre_2021_01_20_16_06-b00)
OpenJDK 64-Bit Server VM (build 25.282-b00, mixed mode)

$ jdk 17
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment Homebrew (build 17+0)
OpenJDK 64-Bit Server VM Homebrew (build 17+0, mixed mode, sharing)

이렇게 옵션으로 버전정보만 넣어주면 OpenJDK 버전을 수시로 간편하게 변경할 수 있습니다.

저도 블로그 글 보고 제 맥북에 적용해봤는데 정말 간편하고 좋았습니다. 편한 개발하는데 조금이나마 도움이 되셨으면 좋겠네요.

 

📌 7. 출처

 

How to install Java JDK on macOS - Mkyong.com

This article shows how to install Java JDK on macOS, Homebrew package manager, manual installation, and switch between different JDK versions.

mkyong.com