일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 주식 청약 일정
- php
- 공모주
- 공모주 청약 일정
- codeigniter
- Stock ipo
- Oracle
- css
- jquery
- 리눅스
- IPO
- 맥
- Eclipse
- 자바
- 오라클
- 주식
- 7월 공모주 청약 일정
- java
- 제이쿼리
- 6월 공모주 청약 일정
- html
- JavaScript
- SQL
- 공모주 청약
- 코드이그나이터
- linux
- 자바스크립트
- Stock
- MYSQL
- 주식 청약
- Today
- Total
개발자의 끄적끄적
[Java]환경변수(JAVA_HOME & CLASSPATH) [펌] 본문
[Java]환경변수(JAVA_HOME & CLASSPATH) [펌]
환경변수
공식적인 의미의 환경변수(Environment variable)는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들이다. OS상에서 동작하는 응용프로그램들이 참조하기위한 설정이 기록된다. 따라서 이 환경변수를 건드려야 할 상황이 생긴다면 신중하게 해야한다. 때에 따라서 프로그램의 정상적인 동작을 보장받지 못할 수 있기 때문이다.
그래서 우리가 주로 개발환경을 설정해야할 때 변경하는 환경변수는 Path나 CLASSPATH정도가 되겠다.
환경변수에도 두가지가 존재한다.
사용자 변수 - OS내의 사용자 별로 다르게 설정가능한 환경변수
시스템 변수 - 시스템 전체에 모두 적용되는 환경변수
다른 사용자에게 영향을 미치느냐 미치지 않느냐에 따라서 환경변수를 변경할때도 주의를 기울이도록 해야한다. 시스템 변수는 다른 사용자에게도 영향을 미치기 때문이다.
그렇다면 set명령어를 통하여 어떤 환경변수가 있는지 확인을 해보도록 하자.
수많은 환경변수가 존재한다. 각각의 역할이 있지만, 이 중 우리가 주목해야할 환경변수는 Path이다.
Path
위의 화면에서 Path라는 것에 주목해보자. Path에는 다양한 경로가 문자열로 저장되어 있다. 이 경로들은 어떤 의미를 가지고 있을까?
우리는 GUI환경에서 프로그램을 시작할 때 어떤 특정한 파일들의 바로가기를 통해서 그 파일의 원래 위치에 찾아가지 않아도 접근을 할 수 있다.
CLI환경에서도 마찬가지이다. 콘솔창에서는 프로그램을 실행시킬 때 명령어들을 사용한다. 명령어들도 일종의 프로그램이기 때문에 어딘가에 저장이 되어있을 것이다. 이 프로그램들을 실행시킬 때마다 매번 실재 저장된 위치를 입력하기는 힘들것이다. 그래서 CLI환경에서도 이런 기능을 가능하게 해주는 것이 Path 환경변수이다.
GUI환경에서 바로가기를 설정하는 것과는 살짝 다른 맥락이지만 그래도 목적이 유사하기에 비교를 한다.
먼저 특정 프로그램의 경로를 한번 알아보도록 하자. 어떤 프로그램의 위치를 찾고싶을때 사용하는 명령어는 where이다. ipconfig의 위치를 알아보자.
위의 결과로 볼 수 있듯이 ipconfig.exe는 C:\Windows\System32에 저장되어 있다. 우리가 ipconfig 명령어를 아무 위치에서나 사용할 수 있는 이유는 C:\Windows\System32 경로가 Path 환경변수에 저장되어있기 때문이다. 그래서 우리는 자주쓰는 프로그램의 경로를 Path에 등록시켜두면 그 경로에 존재하는 프로그램을 어떠한 장소에서든 실행시킬 수 있도록 해주는 것이다.
Path 설정
서론이 길었다. 그렇다면 우리는 자바 컴파일러나 클래스 파일 로더 등을 아무 위치에서나 사용하고 싶다면 Path에 이 프로그램들이 있는 경로를 지정해줘야 한다는 결론을 얻을 수 있다. 자바의 프로그램들을 사용하기 위해서는 jdk폴더 안에 있는 bin폴더를 Path에 등록시켜주면 된다. 그 방법은 아래와 같다.
1. 먼저 '내 PC'에서 우클릭을 하여 '속성'을 클릭한다.
2. 왼쪽 메뉴에서 '고급 시스템 설정'을 클릭한다.
3. 설정창이 나오면 '고급'탭으로 바꾼 후 오른쪽 아래에 '환경 변수'를 클릭한다.
4. 아래의 시스템 변수의 메뉴에서 '새로 만들기'를 클릭한다.
5. 변수명은 JAVA_HOME으로 설정하고, 경로는 jdk의 경로를 지정해준다. 따로 경로를 설정하지 않았다면 C:\Program Files\Java 경로 아래에 자신의 jdk가 설치되어 있을 것이다. 그리고 '확인'을 누른다.
6. 이번에는 Path를 설정해야 한다. 시스템 변수의 Path를 클릭하고 그 아래쪽에 '편집'을 클릭한다.
7. 오른쪽 메뉴의 '새로 만들기'를 클릭하고 JAVA_HOME에 저장된 자바 jdk경로에서 bin폴더를 찾아가면 되므로 아래와 같이 경로를 입력해준다. 그리고 '확인' 버튼을 눌러서 적용시킨다.
8. 자바 jdk의 경로와 Path의 설정이 완료되었다. cmd창을 켜놓았었다면 다시 실행시켜서 환경변수의 변경된 값을 적용시켜준다. 그리고 javac를 입력해 본다. 아래와 같은 창이 나온다면 성공한 것이다.
javac를 정상적으로 콘솔창에서 실행시킬 수 있는 것을 볼 수 있다. 이렇게 정상적으로 사용이 가능한데, JAVA_HOME은 구지 왜 만들어서 Path에 상대주소로 입력해주는 걸까?
JAVA_HOME=C:\Program Files\Java\jdk-10.0.1
이 환경변수에는 jdk의 경로를 지정해준다. 이 경로는 Path에 javac를 사용하고자 할때, %JAVA_HOME%\bin과 같이 상대주소로 사용하게 해준다. 이렇게 설정하면 자바의 경로가 변경되면 Path값 대신 JAVA_HOME을 변경해주면 되고, jdk의 경로가 필요한 모든 곳에서 이 값을 사용할 수 있다. 이는 CLASSPATH 설정값에도 사용되기도 한다. 과거부터 프로그래머들이 통상적으로 이런 이름을 사용했다고 한다.
대표적으로 자바기반으로 서버를 구축할 때 사용되는 WAS인 톰캣(Tomcat)에서 내부적으로 JAVA_HOME 환경변수를 사용하므로, 여러 이유로 jdk의 경로는 필수적으로 잡아줄 필요가 있다.
CLASSPATH=.;C:\Program Files\Java\jdk-10.0.1\lib\tools.jar
JVM은 CLASSPATH의 경로를 확인하여 라이브러리 클래스들의 위치를 참조하게 된다. 그러나 J2JDK 버전부터는 \jre\lib\ext 폴더에 필요한 클래스 라이브러리들을 복사해 놓으면 사용가능하여 특별한 경우가 아니면 설정을 하지 않는다.
GUI로 하면 되지 않을까?
우리가 평생 Eclipse와 같은 IDE를 사용한다면 환경변수를 설정해줄 필요가 전혀없다. 왜나하면 IDE에서 필요한 프로그램들의 경로설정은 다 알아서 해주기 때문이다.
하지만 우리가 개발자로 살아오면서 GUI환경에서만 작업할 수 있을까? 단언컨데, 그럴 수 없다.
대표적으로 서버 컴퓨터에서는 GUI를 거의 사용하지 않는다. 왜냐하면 서버컴퓨터는 클라이언트의 요청에 대한 처리가 주 목적인데 굳이 GUI를 설치해서 리소스를 차지하게할 필요가 없기 때문이다. 따라서 우리는 CLI환경에서도 자바파일들을 자유자재로 다룰 수 있어야 한다. 그리고 그것을 편리하게 해주는 것이 환경변수이다.
참고
https://ko.wikipedia.org/wiki/%ED%99%98%EA%B2%BD_%EB%B3%80%EC%88%98
http://xxxelppa.tistory.com/61
http://imdct.tistory.com/entry/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EB%9E%80
출처 : https://hyoje420.tistory.com/7
'개발 > java & jsp' 카테고리의 다른 글
[java & spring] 데이타 소스에 따른 속도 차이 원인 XA [펌] (0) | 2019.12.17 |
---|---|
[java & spring] 이클립스 웹프로젝트(WAR파일) Import, Export 하기 [링크] (0) | 2019.12.16 |
[메이븐:maven] 이클립스에서 메이븐으로 의존성 라이브러리 쉽게 가져오기[펌] (0) | 2019.12.14 |
[eclipse] 이클립스(Eclipse) 실행 시 Build workspace (빌드) 느릴때(멈춤) 해결 방법 - vailidation [펌] (0) | 2019.12.14 |
[jsp] EL 태그 c:if 나 c:when 을 사용하여 공백 비교 [펌] (0) | 2019.12.14 |