
문제
22년 11월 말에 정식 출시된 Spring Boot 3 (Spring framework 6)은 Java 17 이상에서만 실행 가능하다. 자바 버전이 17 밑이라면 아예 사용조차 할 수 없다니, 제일 보편적으로 쓰이는 자바 버전이 8, 11인 것을 생각하면 꽤 파격적인 내용인 것 같다 🤔

하나의 자바 버전만 사용한다면 아무 문제 없겠지만, 만약 다른 자바 버전을 사용하는 여러 프로젝트를 동시에 진행 중이라면 꽤 골치 아파진다.
보통 우리는 편의를 위해 환경 변수를 이용해 자바 설치 경로를 할당한다. 매번 자바가 설치된 경로로 이동하기엔 번거로우니, 내 컴퓨터의 어느 경로에서 실행하더라도 커맨드 라인이 자바가 설치된 경로를 알아서 찾도록 설정해주는 방식이다. 이 과정에서 컴퓨터에 자바가 버전 별로 여러 개 설치되어 있더라도 환경 변수에는 특정 버전의 자바가 설치된 경로가 지정되어 있으므로 원하는 버전의 자바가 튀어나오지 않는 것이다.

위와 같이 IntelliJ IDE 자체에서 Java 17을 사용하도록 프로젝트 세팅을 해둔 경우도 마찬가지다. IntelliJ에서 제공하는 Gradle 플러그인을 이용한다면 IDE의 세팅을 따르므로, gradle clean / build 등이 잘 동작하지만 터미널에서 직접 gradle에 접근할 수는 없다. 터미널에서 직접 gradle build를 할 경우 IDE가 아닌 내 로컬 설정을 따르기 때문이다.


플러그인을 이용하는 방법도 나쁘진 않지만, 터미널을 애용하는 입장에서 번거로운 것은 사실이다. 솔직히 많이 불편했다 🔫 그렇다고 매번 자바를 설치하고 삭제하는 건 더더욱 비효율적이다.
해결
위에서 언급한 환경 변수를 이용해, 명령어 하나로 간편하게 active한 자바 버전을 바꿔보자 💁♀️
일단 기존에 세팅되어 있던 환경 변수 설정을 열어보자. 사람마다 세팅한 방법이 다를거라, 이번 포스팅에선 구글에서 '맥북 Java 환경변수' 를 검색해서 제일 먼저 나오는 블로그를 참고하겠다. (저는 zsh 쉘을 이용하기 때문에, vi ~/.zshrc로 설정 파일을 열어줬습니다)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=${PATH}:/Library/Java/VirtualMachines/jdk1.8.0_231.jdk/Contents/Home
JAVA_HOME 환경변수에 JDK 경로를 직접 할당해준 후, PATH 환경 변수에 해당 경로를 추가해 자바를 사용할 때 탐색할 바이너리 파일 경로에 JAVA_HOME이 포함되게 만드는 방식이다. 자바 버전을 동적으로 할당하기 전, 가독성을 위해 조금 명령어를 바꿔보자.
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
export PATH=${PATH}:$JAVA_HOME
(저는 자바 11을 디폴트로 사용할거라 11을 써줬습니다. 각자 버전에 맞춰 써주시면 됩니다)
'$(/usr/libexec/java_home -v 11' 을 이용해 시스템에 설치된 Java 11의 경로를 탐색하여 JAVA_HOME에 할당한 후, OS 환경 변수인 PATH에 새로 만든 환경변수 JAVA_HOME를 추가하도록 만들었다. 동시에 PATH의 업데이트도 환경변수를 이용하게 만들어, 직접 경로를 수동으로 써주는 것보다 훨씬 짧아졌다 😎
이제 자바 버전을 돌려쓸 수 있도록 설정을 추가해보자. 우리는 프로젝트별로 Java 11 (또는 8 등)와 Java 17이 동적으로 할당되기를 원하니까, 일단 저 고정되어 있는 JDK 경로를 바꿔주는 명령어가 필요하다. 리눅스의 alias 기능을 이용해보자.
alias setJava11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)'
alias setJava17='export JAVA_HOME=$(/usr/libexec/java_home -v 17)'
alias는 사용자가 명령어를 다른 이름으로 바꿔서 쓸 수 있게 해주는 쉘 내부 명령어다. 보통 작업 중 필요한 명령어를 일일이 손으로 쳐주기 불편하니, 별칭을 이용해 긴 명령어를 간단하게 입력하는 용도로 사용한다. 우리는 이 기능을 이용해 매번 자바 버전을 바꿔주는 귀찮은 작업을 간단하게 만드는거다. 일종의 단축키처럼 저장해두고 쓴다고 생각하면 이해가 쉽겠다. alias를 이용하지 않을 경우에도 JAVA_HOME이 디폴트로 작동하길 원하니까, JAVA_HOME과 alias를 모두 설정해주었다.
지금까지 작성한 설정 파일을 정리하면 아래와 같다.
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
export PATH=${PATH}:$JAVA_HOME
alias setJava11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)'
alias setJava17='export JAVA_HOME=$(/usr/libexec/java_home -v 17)'
1. 자바 설치 경로를 탐색하는 환경 변수 생성
2. OS 환경변수 PATH에 JAVA_HOME 경로를 추가
3. Java 11 버전을 사용하도록 만드는 alias, setJava11 생성
4. Java 17 버전을 사용하도록 만드는 alias, setJava17 생성
이제 :wq를 눌러 저장하고 나온 후, source ~/.zshrc를 이용해 추가한 설정을 적용해서 생성한 alias를 직접 이용해보자.

처음 버전을 확인했을 땐 디폴트인 11이 출력되고, 이후 setJava17 alias를 이용하면 17 버전으로 바뀌어 출력된다. 다시 11버전으로 돌아가고 싶다면 setJava11 alias를 사용해주면 된다.

아까는 실패했던 gradle clean을 성공했다. 야호!
마무리
오늘은 자바 환경 변수 설정을 보기 좋게 정리하고, 리눅스의 alias 기능을 이용해 손쉽게 Java 버전을 바꿀 수 있게 설정을 추가했다. 별거 아닌 것 같지만, 실제 이용해보면 생산성이 꽤 좋아진다. 괜히 자바 버전을 통일하겠답시고 이것저것 건드릴 필요가 없어지니 마음이 편안해진다 ^__^ 👍 만약 내가 자바 버전을 여러 개 돌려써야한다면, 해당 설정을 추가하는 것을 추천한다.
❗️ 혹시 문제가 있다면, 또는 더 좋은 방법이 있다면 댓글로 알려주세요! 🙌
'Develop > Java' 카테고리의 다른 글
[Java/Spring] DIP 활용해서 Testability 높이기 (0) | 2024.07.14 |
---|---|
[Java] equals()와 hashCode()를 털어보자 (feat. 동일성 vs 동등성) (1) | 2023.12.23 |
[Java] 참조 타입에 ==을 쓰면 안되는 이유 (feat. String Pool, Integer cache) (0) | 2023.11.25 |

문제
22년 11월 말에 정식 출시된 Spring Boot 3 (Spring framework 6)은 Java 17 이상에서만 실행 가능하다. 자바 버전이 17 밑이라면 아예 사용조차 할 수 없다니, 제일 보편적으로 쓰이는 자바 버전이 8, 11인 것을 생각하면 꽤 파격적인 내용인 것 같다 🤔

하나의 자바 버전만 사용한다면 아무 문제 없겠지만, 만약 다른 자바 버전을 사용하는 여러 프로젝트를 동시에 진행 중이라면 꽤 골치 아파진다.
보통 우리는 편의를 위해 환경 변수를 이용해 자바 설치 경로를 할당한다. 매번 자바가 설치된 경로로 이동하기엔 번거로우니, 내 컴퓨터의 어느 경로에서 실행하더라도 커맨드 라인이 자바가 설치된 경로를 알아서 찾도록 설정해주는 방식이다. 이 과정에서 컴퓨터에 자바가 버전 별로 여러 개 설치되어 있더라도 환경 변수에는 특정 버전의 자바가 설치된 경로가 지정되어 있으므로 원하는 버전의 자바가 튀어나오지 않는 것이다.

위와 같이 IntelliJ IDE 자체에서 Java 17을 사용하도록 프로젝트 세팅을 해둔 경우도 마찬가지다. IntelliJ에서 제공하는 Gradle 플러그인을 이용한다면 IDE의 세팅을 따르므로, gradle clean / build 등이 잘 동작하지만 터미널에서 직접 gradle에 접근할 수는 없다. 터미널에서 직접 gradle build를 할 경우 IDE가 아닌 내 로컬 설정을 따르기 때문이다.


플러그인을 이용하는 방법도 나쁘진 않지만, 터미널을 애용하는 입장에서 번거로운 것은 사실이다. 솔직히 많이 불편했다 🔫 그렇다고 매번 자바를 설치하고 삭제하는 건 더더욱 비효율적이다.
해결
위에서 언급한 환경 변수를 이용해, 명령어 하나로 간편하게 active한 자바 버전을 바꿔보자 💁♀️
일단 기존에 세팅되어 있던 환경 변수 설정을 열어보자. 사람마다 세팅한 방법이 다를거라, 이번 포스팅에선 구글에서 '맥북 Java 환경변수' 를 검색해서 제일 먼저 나오는 블로그를 참고하겠다. (저는 zsh 쉘을 이용하기 때문에, vi ~/.zshrc로 설정 파일을 열어줬습니다)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=${PATH}:/Library/Java/VirtualMachines/jdk1.8.0_231.jdk/Contents/Home
JAVA_HOME 환경변수에 JDK 경로를 직접 할당해준 후, PATH 환경 변수에 해당 경로를 추가해 자바를 사용할 때 탐색할 바이너리 파일 경로에 JAVA_HOME이 포함되게 만드는 방식이다. 자바 버전을 동적으로 할당하기 전, 가독성을 위해 조금 명령어를 바꿔보자.
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
export PATH=${PATH}:$JAVA_HOME
(저는 자바 11을 디폴트로 사용할거라 11을 써줬습니다. 각자 버전에 맞춰 써주시면 됩니다)
'$(/usr/libexec/java_home -v 11' 을 이용해 시스템에 설치된 Java 11의 경로를 탐색하여 JAVA_HOME에 할당한 후, OS 환경 변수인 PATH에 새로 만든 환경변수 JAVA_HOME를 추가하도록 만들었다. 동시에 PATH의 업데이트도 환경변수를 이용하게 만들어, 직접 경로를 수동으로 써주는 것보다 훨씬 짧아졌다 😎
이제 자바 버전을 돌려쓸 수 있도록 설정을 추가해보자. 우리는 프로젝트별로 Java 11 (또는 8 등)와 Java 17이 동적으로 할당되기를 원하니까, 일단 저 고정되어 있는 JDK 경로를 바꿔주는 명령어가 필요하다. 리눅스의 alias 기능을 이용해보자.
alias setJava11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)'
alias setJava17='export JAVA_HOME=$(/usr/libexec/java_home -v 17)'
alias는 사용자가 명령어를 다른 이름으로 바꿔서 쓸 수 있게 해주는 쉘 내부 명령어다. 보통 작업 중 필요한 명령어를 일일이 손으로 쳐주기 불편하니, 별칭을 이용해 긴 명령어를 간단하게 입력하는 용도로 사용한다. 우리는 이 기능을 이용해 매번 자바 버전을 바꿔주는 귀찮은 작업을 간단하게 만드는거다. 일종의 단축키처럼 저장해두고 쓴다고 생각하면 이해가 쉽겠다. alias를 이용하지 않을 경우에도 JAVA_HOME이 디폴트로 작동하길 원하니까, JAVA_HOME과 alias를 모두 설정해주었다.
지금까지 작성한 설정 파일을 정리하면 아래와 같다.
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
export PATH=${PATH}:$JAVA_HOME
alias setJava11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)'
alias setJava17='export JAVA_HOME=$(/usr/libexec/java_home -v 17)'
1. 자바 설치 경로를 탐색하는 환경 변수 생성
2. OS 환경변수 PATH에 JAVA_HOME 경로를 추가
3. Java 11 버전을 사용하도록 만드는 alias, setJava11 생성
4. Java 17 버전을 사용하도록 만드는 alias, setJava17 생성
이제 :wq를 눌러 저장하고 나온 후, source ~/.zshrc를 이용해 추가한 설정을 적용해서 생성한 alias를 직접 이용해보자.

처음 버전을 확인했을 땐 디폴트인 11이 출력되고, 이후 setJava17 alias를 이용하면 17 버전으로 바뀌어 출력된다. 다시 11버전으로 돌아가고 싶다면 setJava11 alias를 사용해주면 된다.

아까는 실패했던 gradle clean을 성공했다. 야호!
마무리
오늘은 자바 환경 변수 설정을 보기 좋게 정리하고, 리눅스의 alias 기능을 이용해 손쉽게 Java 버전을 바꿀 수 있게 설정을 추가했다. 별거 아닌 것 같지만, 실제 이용해보면 생산성이 꽤 좋아진다. 괜히 자바 버전을 통일하겠답시고 이것저것 건드릴 필요가 없어지니 마음이 편안해진다 ^__^ 👍 만약 내가 자바 버전을 여러 개 돌려써야한다면, 해당 설정을 추가하는 것을 추천한다.
❗️ 혹시 문제가 있다면, 또는 더 좋은 방법이 있다면 댓글로 알려주세요! 🙌
'Develop > Java' 카테고리의 다른 글
[Java/Spring] DIP 활용해서 Testability 높이기 (0) | 2024.07.14 |
---|---|
[Java] equals()와 hashCode()를 털어보자 (feat. 동일성 vs 동등성) (1) | 2023.12.23 |
[Java] 참조 타입에 ==을 쓰면 안되는 이유 (feat. String Pool, Integer cache) (0) | 2023.11.25 |