JAVA_HOME
- Java Development Kit (JDK)가 설치된 경로를 지정하는 환경 변수
- 용도: 여러 Java 기반 도구와 애플리케이션에서 Java의 설치 경로를 참조하는 데 사용된다.
예를 들어, Maven, Gradle 등과 같은 빌드 도구가 JAVA_HOME을 사용하여 JDK를 찾는다.
PATH
- 정의: 실행 가능한 프로그램의 경로를 지정하는 환경 변수
- 용도: 터미널에서 Java 명령어(java, javac 등)를 언제 어디서나 사용할 수 있도록 하기 위해, Java 실행 파일이 위치한 bin 디렉토리를 PATH에 추가하고 이를 통해 사용자는 java -version과 같은 명령어 사용할 수 있게 된다.
설정 예시
# JAVA_HOME 설정
export JAVA_HOME=/app/java8
# PATH에 JAVA_HOME/bin 추가
export PATH=$PATH:$JAVA_HOME/bin
이렇게 설정하면, Java JDK가 설치된 경로와 실행 파일 경로를 모두 사용할 수 있다!
$PATH: 이건 또 뭐얏?!
$PATH는 현재 사용자의 환경 변수 중 하나로, 실행 가능한 프로그램의 경로를 포함하는 문자열이다.
이 변수는 터미널에서 명령어를 입력했을 때, 시스템이 해당 명령어를 찾기 위해 검색하는 디렉토리 목록을 정의한다.
- 경로 목록:
- $PATH는 여러 디렉토리 경로를 콜론(:)으로 구분하여 나열한 문자열이다.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 이 경우, 시스템은 이 경로들에서 차례로 명령어를 찾습니다.
- $PATH는 여러 디렉토리 경로를 콜론(:)으로 구분하여 나열한 문자열이다.
- 명령어 실행:
- 사용자가 터미널에서 명령어를 입력하면, 시스템은 $PATH에 나열된 디렉토리에서 해당 명령어를 검색한다.
- 만약 명령어가 $PATH에 포함된 디렉토리 중 하나에 존재하면, 그 프로그램이 실행된다.
- 환경 변수 설정:
- 새로운 경로를 추가하려면, PATH 변수에 새로운 경로를 추가할 수 있다.
export PATH=$PATH:/new/directory/path
- 이 명령어는 기존의 PATH에 /new/directory/path를 추가합니다.
- 새로운 경로를 추가하려면, PATH 변수에 새로운 경로를 추가할 수 있다.
$PATH가 올바르게 설정되지 않으면, 시스템이 특정 명령어를 찾지 못해 "command not found" 오류가 발생할 수 있다.
JAVA_HOME과 PATH를 동시에 설정하는 이유
1. 명확한 경로 지정
- JAVA_HOME: JDK의 설치 위치를 명확하게 지정하게 되면 이는 여러 도구와 애플리케이션에서 Java의 설치 경로를 찾는 데 사용되며, 경로를 변경할 필요가 있을 때 한 곳만 수정하면 된다.
- PATH: Java 실행 파일(java, javac 등)이 위치한 디렉토리를 추가하여, 터미널에서 간편하게 Java 명령어를 사용할 수 있게 한다.
2. 도구와 애플리케이션 호환성
- 많은 Java 기반 도구(예: Maven, Gradle 등)는 JAVA_HOME 환경 변수를 사용하여 JDK를 찾게 되고 이 변수 없이는 도구가 Java를 제대로 인식하지 못할 수 있다.
- PATH가 설정되어 있지 않으면, 사용자가 터미널에서 Java 명령어를 입력할 때 "명령어를 찾을 수 없음"이라는 오류가 발생할 수 있다.
3. 편리함
- JAVA_HOME과 PATH를 모두 설정하면, Java 개발 환경을 설정하는 데 있어 더 편리하다. 코드 작성, 빌드 및 실행 과정에서 Java 관련 명령어를 쉽게 사용할 수 있고, 도구들이 JDK를 쉽게 찾을 수 있다.
4. 유지 보수 용이성
- JDK의 경로가 변경되거나 업그레이드할 경우, JAVA_HOME만 수정하면 되므로 유지 보수가 용이하다. PATH에 추가된 경로는 변하지 않으므로, 단일 경로만 변경하면 된다.
'Java' 카테고리의 다른 글
[헷갈리는 개념 정복하기] 오브젝트(object)가 뭐야?! (0) | 2023.08.16 |
---|---|
[헷갈리는 개념 정복하기] 필드(Filed)에 대해 알아보자!! (0) | 2023.07.03 |
[헷갈리는 개념 정복하기] 생성자에 대해 알아보자!! (0) | 2023.07.01 |
[헷갈리는 개념 정복하기] 제네릭 타입이 뭐야!? (0) | 2023.06.28 |