본문 바로가기

Linux

리눅스 서버 설치기 - 1. JAVA

 

들어가기 전에, 본 글은 저의 삽질이 잔뜩 기록되어 있는 글입니다.

 

이 AWS를 이용한 리눅스 서버 설치기는 에러와 삽질과정까지 전부 기록한 총 3편으로 구성되어 있는 글입니다.

삽질/에러난 과정 필요없고 성공루트만 빠르게 보고 싶으신 분들은 아래 링크로 들어가시면 됩니다.

rimkongs.tistory.com/241

 

Spring 프로젝트를 AWS에 웹 배포하기 (JAVA, Tomcat 설치부터 사이트 띄우기까지)

1. openJDK-8 설치 sudo apt-get install openjdk-8-jre openjdk-8-jdk 설치 경로 확인 java 파일구조 1. java-8-openjdk-amd64/bin/java  2. java-8-openjdk-amd64/bin/javac 3. java-8-openjdk-amd64/jre/bi..

rimkongs.tistory.com

 

 

1. 오라클 jdk 사이트에 접속하여 자바 다운로드 받기

 

$ wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz

 

apt-get 을 사용할 수도 있지만, 다음 사항을 알아야만 한다. 

- wget 은 현재 디렉토리에 다운로드 받는다.

- 기존에 apt 를 사용하였으나, 도대체 어디에 다운로드 받아지고 설치된것인지 알 수가 없어 원본 파일 다운로드부터 시작한다. + apt 깔았다가 삽질 엄청했다..

데비안, 우분투, 민트 OS 는 apt 명령어 사용
레드햇, 페도라, 센트 OS 는 yum 명령어 사용
아치, 만자로 OS 는 pacman 명령어 사용
linux 를 처음해본 입장에서 아무 블로그나 찾아보던 나는 우분트를 쓰면서 왜 yum 이 안되는지 찾고 있었다...

/usr 
시스템이 정상적으로 가동되는 데에 필요한 모든 명령들과 라이브러리들 그리고 메뉴얼 페이지들이 위치한다.
/usr/local 은 윈도우로 보자면 C:/Program Files 용도로 사용된다고 한다. 

/var 
계속 변화하는 파일들을 위한 공간이다. 

/home
각 사용자들의 홈 디렉토리다. 아주 중요하다
 '~' 표시가 /home/ubuntu 이라는 뜻

덧붙여, apt-get 을 사용하여 tomcat8 을 설치하고 도대체 환경변수 설정시 PATH 를 어디로 해야하는지를 모르겠었다.
/var/lib/tomcat8 폴더인지, /usr/bin/tomcat8 인지... 둘 다 존재했고, 다른 폴더/파일 구성을 가지고 있었다.
결론 : 블로그 좀더 읽어보니까... /usr/local 에 옮기네... 헐... ㅎㅎ 그래도 좋은 공부였지 뭐. .

tar.gz  VS .rpm
.tar.gz
: 현재 유저의 프라이빗 버전 (tar 가 tarball 이라고 한다. Tape ARchaive 의 abbreviation)
.rpm : 모든 유저를 위한 전시스템 수준의 설치 (root access 필요)

 

내가 이전에 삽질해서 받은 openjdk-8.. 그런데 또 이 블로그에서는 jdk-1.8.10을 받고 있다.

그러다가 이 두개의 차이를 찾아보았다

*open jdk 설치했던 경로

/usr/lib/jvm/java-8-openjdk-amd64

 

Oracle JDK 와 OpenJDK

  1.  Java 애플리케이션을 실행하기 위해서는 JVM이 필요하고 컴파일하기 위해서는 JDK가 필요하다. 일반적으로 JDK를 설치하면 JVM(Hotspot이라고도 표현, Java 기술의 핵심)도 함께 설치된다.
  2. - JDK는 2개 버전으로 나뉜다. 하나는 폐쇄적인 상업 코드 기반의 Oracle JDK이고 하나는 오픈 소스 기반의 OpenJDK이다. 
  3. 둘 간의 큰 차이라면 Oracle JDK는 OpenJDK에는 없는 재산권이 걸린 플러그인을 제공한다.
  4. Oracle JDK에 존재하고 OpenJDK에는 없는 대표적 기능으로 글꼴 라이브러리와 Java Web Start가 있다. 사용자의 웹 브라우저에서 자바 애플릿을 실행하려면 필요한 기능이다. 서버 애플리케이션 개발에는 쓰이지 않는 기능들이다.
  5. 제공되는 기능적 차이 외에 Java 6 시대에는 분명히 OpenJDK가 Oracle JDK보다 성능이나 안정성이 크게 떨어졌다. 하지만 오늘날에는 Oracle JDK만이 제공하는 일부 라이브러리를 제외하고는 차이가 없다.

Oracle JDK는 무료인가?

Java의 무료 논쟁은 2011년 오라클이 소유권을 가지면서 시작되었다. 일단 명확히 해야할 점은 Java라는 프로그래밍 언어 자체는 GPL 라이센스로 무료이다. [관련 링크] 그렇지 않다면 오늘날 Java가 시장지배적인 언어가 되지 못했을 것이다. 중요한 부분은 Java로 작성한 프로그램을 컴파일(JDK)하고 실행(JVM)시키는 데 있다.

 

  1. JDK와 JVM을 제공하는 OpenJDK은 GPL v2 with the Classpath Exception 라이센스로 무료이다.

  2. 문제는 Oracle JDK이다. 결론부터 이야기하면 Oracle JDK는 사용 목적에 따라 무료일수도 유료일수도 있다. 먼저 Oracle JDK(Java SE)의 구성 요소를 살펴보면 아래와 같다.

1. JDK
2. JRE(JVM)
3. JavaFX SDK
4. JavaFX Runtime
5. JRockit JDK
  1. Oracle JDK는 BCL(Oracle Binary Code License) 라이센스로 위 기능을 일반적인 목적의 컴퓨팅(General Purpose Computing)에만 사용시 무료라고 밝히고 있다. [관련 링크] 일반적인 목적의 컴퓨팅이란 무엇일까? 오라클은 데스크탑, 노트북, 스마트폰, 태플릿 등에서의 사용이 이에 해당한다고 설명하고 있다. 즉, 개발환경에서는 사용에 있어 아무 문제가 없다.

  2. 일반적이지 않은 목적의 컴퓨팅(Non-General Purpose Computing)은 별도의 라이센스비를 지불해야 하는 유료 과금 대상이 된다. 오라클은 특정 기능 만을 위해 작동하는 시스템 및 솔루션에서의 사용이 이에 해당한다고 설명하고 있다. 이 부분의 애매한 표현 때문에 대부분의 상업 프로젝트를 진행하는 회사들은 OpenJDK를 사용한다.

 

 

다시 본론으로 돌아가서,  OpenJDK8 설치 시 Linux 우분투 환경에서는 다음과 같이 다운받는다.

sudo apt-get install openjdk-8-jre openjdk-8-jdk

 

일단 다른 블로그에선 OracleJDK를 받으라 되어있지만 그냥 나는 깔려있는 OpenJDK로 그대로 가보려 한다.

그럼 현재 내 openJDK8의 java 위치는 ? 

 

 

java -> ../jre/bin/java   이 의미가 java가 /java-8-openjdk-amd64/jre/bin/java에도 있다는 뜻일까?

해당 경로로 가보니 그 뜻이 맞는 것 같다. 

 

 

apache tomcat이 깔린 위치와 동일하게 /usr/local 로 옮겨주려 한다. 아니 그런데 /usr/lib/jvm 해보니깐 왜 openjdk가 두가지 깔려있는거지? .......산넘어 산이네.. 실수로 깔았었나 보다. 난 java-8-openjdk-amd64로 밀고 나갈거다.

 

옮겨주기

$ mv java-8-openjdk-amd64 /usr/local

 

해당 위치에 가서 잘 옮겨졌는지 확인해보기

 

링크 생성

$ ln -s java-8-openjdk-amd64 java

 

 

 

여기서 잠깐, java 의 파일 구조를 보고 가자.

 

1. java-8-openjdk-amd64/bin/java  

2. java-8-openjdk-amd64/bin/javac

3. java-8-openjdk-amd64/jre/bin/java 

 

1,2는 jdk(압축 풀었을 때 생성되는 아카이브)의 bin 에 java 와 javac인 것이다.

즉, 컴파일러는 하나만 존재하는데 java는 두 곳에 존재한다.

 

이것이 윈도우에서 java jdk를 설치했을 때와 다른 점!

윈도우에서는 java라는 폴더 내부에 jdk 폴더와 jre 폴더가 따로 생성된다.

 

 

2. JAVA 환경변수 설정

※ 주의!! 띄어쓰기에 주의한다. '=' 의 양 옆에는 공백이 없다! -> not a valid identifier(source 명령어 사용시)

띄어쓰기는 export 바로 다음에만 존재한다. 

 

여기서 환경변수가 무엇인지에 대해서 다시 짚고 넘어가자

 

환경변수란?

자주 필요한 정보를 저장하여 사용자가 사용하기 편리하게 해주는 것,

프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임이다.

 

기본적 사용법

echo 명령어를 통해 환경변수들을 출력해볼 수 있다.

$ echo $TERM
xterm-256color

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/jsh/shell

 

printenv 명령어를 통해 현재 설정되어있는 환경변수들을 출력해볼 수 있다.

$ printenv
SHELL=/bin/bash
TERM=xterm-256color
USER=root
 ...

 

export 명령어를 통해 환경변수를 설정할 수 있다.

$ export TEST='testing'
$ echo $TEST
testing

 

unset 명령어를 통해 환경변수를 해제할 수 있다.

$ unset TEST
$ echo TEST

 

미리 정의된 환경변수들

환경변수 이름 뜻
PATH 명령어 검색 경로, 보통 쉘 설정 파일들 중 하나에 설정된다.
EDITOR 자주 이용하는 편집기
PRINTER 기본 프린터(설정이 되어있으면 lpr에게 알려주지 않아도 됨)
PWD 현재 디렉토리의 절대경로명
HOME 사용자 홈 디렉토리
SHELL 로그인 쉘의 절대경로명
USER 사용자 이름
TERM 터미널 종류의 이름
TERMCAP 터미널 종류에 대한 termcap 데이터베이스 항목 로드

 

이 중 PATH 환경변수에 대해서..

PATH 환경변수는 콜론(:)으로 구분된 디렉토리들의 목록이다. 쉘은 명령어를 찾을 때 마다 이 디렉토리들을 순서대로 검사한다.

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

만약에 특정 경로를 PATH에 추가하고 싶다면 ~/.profile 에 다음과 같은 내용을 추가한다.

$ vi ~/.profile

export PATH=$PATH:/path/to/add

 

*쉘 변수란?

쉘 변수는 환경 변수의 일반적인 유형, 사용자 또는 사용자의 쉘이 이용하기 위한 정보를 모아두는 곳이다.

환경변수는 전역변수이고 쉘 변수는 지역변수라고 생각할 수 있다. 환경변수와는 다르게 쉘 변수는 소문자로 작성해준다.

쉘 변수를 설정하려면 쉘에 따라 다음과 같이 명령어를 입력해주면 된다.

# C shell
$ set test="testing"

# Bourn shell
$ test="testing"

삭제는 아래와 같이 입력해주면 된다.

# C shell 과 Bourn shell 동일하다.
$ unset test

 

 

다시 본론으로 돌아가서...

  1. jdk 및 jre 가 설치된 경로(환경)은 사용자마다 다를 것이고, 이를 처리하기 위한 접점(인터페이스)이 환경변수인 것 같다.
  2. rm, mv, mkdir 등 어느 경로에서나 해당 명령어를 실행할 수 있는 이유는 해당 이름을 가진 파일들의 경로가 환경변수에 등록되어있기 때문이다. 
export JAVA_HOME = /usr/local/java
export CLASSPATH = .:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
PATH = $PATH:$JAVA_HOME/bin

나는 PATH도 export가 되어있었는데, 다른 블로그글 보니깐 PATH는 export해주지 않아도 되는 것 같다. PATH도 당연히 export 해야하는건 줄 알았는데 리눅스는 아니였나보다 일단 지워본다. -> 이거때매 일주일 뒤에 하루동안 고생했다 ,, 

tomcat이 시작하려면 PATH를 반드시 참조하므로 export가 되어있어야 한다. 내가 무슨 글을 본거지 - 

 

 

설정파일 적용

source /etc/profile

 

 

 

참조 블로그 -
https://booolean.tistory.com/560 

http://jsonobject.tistory.com/395 

https://coldmater.tistory.com/171?category=753896