macOS 환경에서 Java 기반 개발을 시작할 때 가장 먼저 마주치는 관문 중 하나는 바로 JAVA_HOME
환경 변수를 설정하는 것입니다. 많은 개발 도구, 프레임워크, 그리고 서버 애플리케이션이 시스템에 설치된 Java 개발 키트(JDK)의 위치를 찾기 위해 이 변수를 참조합니다. 예를 들어, Maven, Gradle과 같은 빌드 도구나 Jenkins, Tomcat, Spring Boot 애플리케이션 등은 JAVA_HOME
이 올바르게 설정되어 있지 않으면 정상적으로 실행되지 않을 수 있습니다. 이 글에서는 macOS에서 JAVA_HOME
을 설정하는 가장 효율적이고 표준적인 방법을 단계별로 상세하게 안내합니다.
단순히 경로를 복사해서 붙여넣는 방식을 넘어, 왜 이 설정이 필요한지, 그리고 여러 버전의 Java를 어떻게 관리하고 전환할 수 있는지에 대한 깊이 있는 이해를 돕는 것을 목표로 합니다.
1. JAVA_HOME이란 무엇이며 왜 중요한가?
JAVA_HOME
은 시스템에 설치된 JDK(Java Development Kit)의 최상위 디렉토리 경로를 가리키는 환경 변수입니다. 운영체제나 다른 프로그램에게 "자바 개발에 필요한 파일들이 여기에 있다"고 알려주는 이정표 역할을 합니다.
- JRE vs. JDK: Java를 실행만 하는 데 필요한 환경은 JRE(Java Runtime Environment)이고, 컴파일 등 개발에 필요한 도구까지 포함하는 것이 JDK입니다.
JAVA_HOME
은 일반적으로 JRE가 아닌 JDK의 경로를 가리켜야 합니다. 개발 도구들은javac
(컴파일러)와 같은 JDK에 포함된 실행 파일을 필요로 하기 때문입니다. - 도구 호환성: 앞서 언급했듯이, 수많은 자바 생태계의 도구들이
JAVA_HOME
을 기준으로 JDK를 찾습니다. 이 변수가 없으면, 각 도구마다 JDK 경로를 수동으로 설정해주어야 하는 번거로움이 발생하거나, 아예 실행이 실패할 수 있습니다. - 버전 관리: 하나의 시스템에 여러 버전의 JDK(예: Java 8, 11, 17)가 설치된 경우,
JAVA_HOME
을 변경함으로써 프로젝트 요구사항에 맞는 특정 버전의 Java를 사용하도록 손쉽게 전환할 수 있습니다.
2. macOS에 설치된 Java 버전 및 경로 확인하기
JAVA_HOME
을 설정하기에 앞서, 현재 시스템에 어떤 버전의 Java가 어디에 설치되어 있는지 확인해야 합니다. macOS는 이를 위한 매우 편리한 유틸리티를 기본적으로 제공합니다.
macOS의 표준 유틸리티: /usr/libexec/java_home
터미널(Terminal) 앱을 열고 다음 명령어를 사용하면 가장 확실하고 간단하게 JDK 경로를 찾을 수 있습니다. 하드코딩된 경로를 직접 찾는 것보다 이 유틸리티를 사용하는 것이 훨씬 권장되는 방법입니다.
모든 설치된 JDK 버전 목록 보기:
가장 유용한 명령어입니다. 시스템에 설치된 모든 JDK의 버전과 경로를 상세히 보여줍니다.
/usr/libexec/java_home -V
이 명령어를 실행하면 다음과 유사한 결과가 나타납니다. 사용자의 설치 환경에 따라 내용은 달라질 수 있습니다.
Matching Java Virtual Machines (3):
17.0.1 (x86_64) "Oracle Corporation" - "Java SE 17.0.1" /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
11.0.12 (x86_64) "Amazon Corretto" - "Amazon Corretto 11" /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
위 출력은 시스템에 Java 17, 11, 8 버전이 설치되어 있음을 보여줍니다. 마지막 줄은 현재 기본으로 설정된 Java의 경로를 나타냅니다.
기본 JDK 경로 확인하기:
단순히 기본 JDK의 경로만 확인하고 싶다면 -V
옵션 없이 실행합니다.
/usr/libexec/java_home
출력 결과:
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
이 경로가 바로 우리가 JAVA_HOME
으로 설정할 값입니다. 하지만 이 경로를 직접 복사하여 사용하는 것보다, 이 명령어를 동적으로 활용하는 것이 더 좋습니다. 그 이유는 잠시 후에 설명하겠습니다.
3. 셸(Shell) 환경에 JAVA_HOME 설정하기
macOS에서는 터미널에서 사용하는 셸의 설정 파일에 환경 변수를 등록해야 합니다. 최신 macOS(Catalina 버전 이상)는 기본 셸로 Zsh를 사용하며, 이전 버전이나 사용자가 직접 변경한 경우에는 Bash를 사용할 수 있습니다. 먼저 본인이 어떤 셸을 사용 중인지 확인해야 합니다.
현재 사용 중인 셸 확인
터미널에 다음 명령어를 입력하여 현재 셸을 확인합니다.
echo $SHELL
결과가 /bin/zsh
이면 Zsh를, /bin/bash
이면 Bash를 사용 중인 것입니다. 자신의 셸에 맞는 설정 방법을 따르세요.
방법 1: Zsh 사용자의 경우 (~/.zshrc
파일)
Zsh는 ~/.zshrc
파일을 사용하여 셸 환경을 설정합니다. ~
는 현재 사용자의 홈 디렉토리를 의미합니다 (예: /Users/your-username
).
1. .zshrc
파일 열기:
선호하는 텍스트 편집기로 .zshrc
파일을 엽니다. 파일이 없다면 이 명령어를 실행할 때 새로 생성됩니다. 여기서는 macOS에 내장된 간단한 편집기인 nano
를 사용하겠습니다.
nano ~/.zshrc
2. 환경 변수 추가:
파일의 맨 아래에 다음 두 줄을 추가합니다. 이 방법이 가장 권장되는 방식입니다.
# Java Home 설정
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
왜 이 방법이 좋을까요?
export JAVA_HOME="/Library/Java/..."
와 같이 경로를 직접 쓰는 대신 $(/usr/libexec/java_home)
구문을 사용했습니다. 이를 '명령어 치환(Command Substitution)'이라고 부릅니다. 이렇게 하면 셸이 시작될 때마다 /usr/libexec/java_home
명령어가 실행되고, 그 결과(기본 JDK 경로)가 JAVA_HOME
변수에 동적으로 할당됩니다. 나중에 Java를 업데이트하여 기본 버전이 바뀌더라도 설정 파일을 수정할 필요 없이 자동으로 최신 버전을 가리키게 되어 매우 편리합니다.
두 번째 줄 export PATH=...
는 Java의 실행 파일(java
, javac
등)이 있는 bin
디렉토리를 시스템의 PATH
환경 변수에 추가하는 것입니다. 이렇게 해야 터미널 어디에서든 java
명령어를 바로 실행할 수 있습니다.
3. 변경사항 저장 및 적용:
nano
편집기에서 Control + O
를 눌러 저장하고, Enter
를 친 후, Control + X
를 눌러 편집기를 종료합니다.
그 다음, 터미널에 다음 명령어를 입력하여 변경된 설정을 즉시 적용합니다.
source ~/.zshrc
이제 터미널을 새로 시작하지 않아도 JAVA_HOME
이 적용됩니다.
방법 2: Bash 사용자의 경우 (~/.bash_profile
파일)
Bash 셸을 사용한다면 과정은 거의 동일하지만, 대상 파일이 다릅니다. macOS의 Bash는 로그인 셸이므로 ~/.bash_profile
파일을 수정하는 것이 일반적입니다.
1. .bash_profile
파일 열기:
nano ~/.bash_profile
2. 환경 변수 추가:
Zsh와 마찬가지로 파일 맨 아래에 다음 내용을 추가합니다.
# Java Home 설정
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
3. 변경사항 저장 및 적용:
Control + O
로 저장, Control + X
로 종료한 후, 다음 명령어로 설정을 적용합니다.
source ~/.bash_profile
4. 설정 확인하기
설정이 올바르게 완료되었는지 확인하는 것은 매우 중요합니다. 터미널에서 다음 명령어들을 차례로 실행해보세요.
1. JAVA_HOME
변수 값 확인:
echo $JAVA_HOME
앞서 /usr/libexec/java_home
으로 확인했던 JDK 경로가 출력되어야 합니다.
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
2. 현재 사용 중인 Java 버전 확인:
java -version
JAVA_HOME
이 가리키는 버전의 정보가 출력되어야 합니다.
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
3. Java 컴파일러 버전 확인:
javac -version
java -version
과 동일한 버전 정보가 출력되어야 합니다. 만약 javac: command not found
오류가 발생한다면 PATH
설정에 문제가 있을 가능성이 높습니다.
5. 특정 버전의 Java를 사용하도록 JAVA_HOME 설정하기
여러 프로젝트를 진행하다 보면 특정 프로젝트는 Java 8로, 다른 프로젝트는 Java 11로 실행해야 하는 경우가 많습니다. /usr/libexec/java_home
유틸리티는 버전 전환도 매우 간단하게 만들어 줍니다.
앞서 /usr/libexec/java_home -V
명령어로 설치된 버전 목록을 확인했습니다. 이 목록을 기반으로 원하는 버전을 지정할 수 있습니다.
예를 들어, Java 11을 기본으로 사용하고 싶다면, 셸 설정 파일(~/.zshrc
또는 ~/.bash_profile
)을 열어 JAVA_HOME
설정 부분을 다음과 같이 수정합니다.
# Java 11을 기본으로 설정
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
export PATH=$JAVA_HOME/bin:$PATH
-v
옵션 뒤에 원하는 메이저 버전을 명시하면 됩니다. 만약 Java 11 버전이 여러 개 설치되어 있다면 가장 최신 빌드 버전의 경로를 반환해줍니다.
마찬가지로 Java 8 (1.8)을 사용하고 싶다면 다음과 같이 수정합니다.
# Java 8 (1.8)을 기본으로 설정
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
파일을 수정한 뒤에는 반드시 source ~/.zshrc
(또는 source ~/.bash_profile
) 명령어로 변경사항을 적용하는 것을 잊지 마세요. 적용 후 java -version
을 실행해보면 지정한 버전으로 변경된 것을 확인할 수 있습니다.
문제 해결 및 추가 정보
"zsh: command not found: java" 오류가 발생합니다.
이 오류는 크게 두 가지 원인일 수 있습니다.
- Java가 설치되지 않음: Homebrew나 Oracle 웹사이트 등에서 JDK를 먼저 설치해야 합니다.
/usr/libexec/java_home -V
명령어로 설치된 JDK가 있는지 확인해보세요. PATH
설정 오류:JAVA_HOME
은 설정했지만export PATH=$JAVA_HOME/bin:$PATH
부분이 누락되었거나 잘못 설정된 경우입니다. 셸 설정 파일을 다시 확인하고,echo $PATH
명령어로$JAVA_HOME/bin
경로가 포함되어 있는지 살펴보세요.
설정을 변경했는데도 IDE(통합 개발 환경)에서는 다른 버전의 Java를 사용합니다.
IntelliJ IDEA, Eclipse, VS Code와 같은 IDE는 시스템의 JAVA_HOME
환경 변수를 참조하기도 하지만, 대부분 자체적으로 프로젝트별 또는 전역 JDK 설정을 가지고 있습니다. 셸에서 JAVA_HOME
을 변경했더라도 IDE의 설정이 우선될 수 있습니다. 이 경우, 각 IDE의 설정 메뉴(예: IntelliJ의 'Project Structure' -> 'SDKs')에서 사용할 JDK를 직접 지정해주어야 합니다.
.zshrc
파일이 없다고 나옵니다.
Zsh를 처음 사용하거나 환경 설정을 한 번도 하지 않았다면 .zshrc
파일이 없을 수 있습니다. 이는 정상적인 상황입니다. nano ~/.zshrc
또는 vi ~/.zshrc
명령어를 실행하면 파일이 새로 생성되므로 걱정하지 않고 내용을 추가하면 됩니다.
이 가이드를 통해 macOS에서 JAVA_HOME
을 설정하는 명확한 방법을 이해하셨기를 바랍니다. macOS가 제공하는 /usr/libexec/java_home
유틸리티를 적극적으로 활용하면, Java 버전 관리와 환경 설정을 훨씬 더 효율적이고 유연하게 처리할 수 있어 개발 생산성을 높이는 데 큰 도움이 될 것입니다.
0 개의 댓글:
Post a Comment