Jul 9, 2020 - CentOS 6.9(Final) 에 jdk 11 설치

CentOS 6.9(Final) 에 jdk 11 설치

단순하게, CentOS 6.9 에서,

yum list java*jdk-devel

를 호출하면, JDK 11이 보이지 않습니다. 그러므로, 직접 설치를 해야합니다.

  1. jdk 11 다운로드 받아, /usr/local 로 이동시킴
curl -O https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
tar zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
mv jdk-11.0.1 /usr/local/
  1. jdk11 을 JAVA_HOME 변수에 export 시킬 스크립트 작성
vi /etc/profile.d/jdk11.sh
# create new
export JAVA_HOME=/usr/local/jdk-11.0.1
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile.d/jdk11.sh
  1. 자바 버전 확인
java -version

자바 버전이 11이 아니라 계속 기존 설정 값일 경우,

설치된 /usr/bin/java 를 1번에서 설정한 폴더로 변경

sudo update-alternatives --install /usr/bin/java java /usr/local/jdk-11.0.1/bin/java 1
sudo update-alternatives --config java
[root@localhost java]# sudo update-alternatives --config java

2 개의 프로그램이 'java'를 제공합니다.

  선택    명령
-----------------------------------------------
*  1           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
 + 2           /usr/local/jdk-11.0.1/bin/java

위의 값에서 기존 2번을 선택함.

Jul 1, 2020 - jdk version history(jdk 버전간 차이)

JDK 1.4 -> JDK 1.5

가장 변화가 힘들었던 시기로, 해당 버전업 프로젝트의 로직은 상당 수 수정해야만하였습니다.
추억이라면 추억이겠지만,

특히 for문에 대한 수정사항이 매우 많았던 시기입니다.
왜 버전업하면서 for문의 수정을 해야했냐면,

  • Generics
  • foreach

이 두가지 때문이라고 할 수 있겠습니다. foreach 의 경우는 기존의 for문을 그대로 사용해도 되었지만, Generics 의 경우 기존방식의, 비 구체화 타입(non-reifiable type)에서, 강제 형변환 시에 약간의 오류가 있었습니다.

1.5 버전부터 신규 버전에서는 Deprecated 를 걸더라도, 계속 쓸 수 있게 서포트해주었지만, 1.4 에서 1.5로 바뀔때는 그러한 배려가 좀 부족했던 기억이 납니다.

가장 기억에 남는 건,

enum, vararg, foreach, static imports

인데, 인터넷 검색해보니 annotation, auto boxing 도 있때 도입이 되었었다고 하네요. Boxing 과 Unboxing 을 예전에는

Integer age = new Integer(30); // 기본 자료형을 Wrapper 클래스의 객체로 변경하는 과정
int num = age.intValue();     // 와퍼 클래스를 기존자료형으로 변환하는 과정

형변환하는 별도의 구현이 필요했다면,

Auto(Un)Boxing을 통해 자동으로 변환 가능하게 되었었네요.

Integer age = new Integer(30);
int num = age;
  • AutoBoxing과 AutoUnBoxing 은 단지 기본형 타입과 상응하는 Wrapper class에만 일어납니다. 다른 경우에 대입을 시도하면 컴파일 에러가 발생합니다. 예를 들어, Integer는 intValue(), Double은 doubleValue() 등만 AutoBoxing과 AutoUnBoxing이 발생하기에 다음과 같은 경우의 수가 생깁니다.
Double obj = 3.14;
int num1 = obj.intValue() ;   (O)
int num2 = obj;               (X)
int num3 = (int)((double)obj);(O)

JDK 1.5 -> JDK 1.6

G1(Garbage First) GC도입 되었습니다.(JDK 1.6 update 14 에 포함됨, early access)

자바의 GC는 Parallel GC를 기본으로 사용했지만, Java 9부터는 G1 GC가 기본값으로 설정되게 되었고, JDK 1.6 부터 G1 GC가 되었다고 하네요.

early access 라고 부르며, JDK 1.7 update 4에 정식으로 추가된 것으로 보입니다.
자세한 내용은 Naver D2의 글 을 참고로 하시면 될 거 같습니다.

Young의 세가지 영역에서 데이터가 Old 영역으로 이동하는 단계가 사라진 GC 방식이라고 이해하고 넘어갑시다!
This SCP area is part of the method area (Permgen) until Java 1.6 version.

참고로, SCP(String constant pool)이라고 하여, 1.6 버전까지 리터럴 변수는 Permgen 에 속해있었습니다!

JDK 1.6 -> JDK 1.7

실제로 실업무에서, 1.4에서 1.5로 바뀌었을 때를 제외하고는,
1.5 에서 1.7 로 이동할 경우에 Deprecated 이 적용되는 경우는 있었으나,
컴파일이나 런타임에서 오류가 난 적은 없었습니다.

- Switch문 인자로 String 허용
- try-resource
- generics 타입추론
- 숫자에서 undersocre 사용

위의 세개는 자주 사용하는데, 숫자에서 undersocre 사용하는 건 이번에 조사하면서 알게 되었네요.

예전 버전의 경우 String은 PermGen(런타임시 크기가 변경되지 않는 메모리)에 위치하며, 동일한 String의 경우 Pooling 된다고 배워왔는데요.
java6 이후 String이 저장되는 메모리가 PermGet에서 heap으로 변경되었습니다.
String의 경우 추후 1.9 java가 나올때까지 이러한 형태를 유지하는데요,
String은 두 가지 생성 방식이 있고 각각의 차이점이 존재합니다.
두 가지 방식에는 큰 차이점이 있습니다.

new를 통해 String을 생성하면 Heap 영역에 존재하게 되고 리터럴을 이용할 경우 String constant pool이라는 영역에 존재하게 되기 때문입니다.

- new 연산자를 이용한 방식
- 리터럴을 이용한 방식

String 객체와 String 리터럴의 차이점이 존재합니다.


int money1 = 19000000000;

// 반드시 숫자 사이에만 올 수 있다.
// 숫자 언더스코어, 숫자의 가독성 상승
int money2 = 19_000_000_000;  

JDK 1.7 -> JDK 1.8

오라클로 인수된 후 첫번째 버전.
현재 대다수의 한국기업들이 사용하는 버전이 아닐까 합니다.

JDK 1.5이후 가장 큰 언어적 변화가 있었다고 하며, 실제로 1.8을 사용하는 한국 기업에서 해당 기능을 그렇게 많이 사용하는가 하면 아닌거 같습니다. ^^;

- Lambda expression   
- Defauit Method Ingerface   
- default method를 이용한 다중상속 지원

Jun 19, 2020 - MariaDB - Linux CentOS 6 에서 MariaDB yum으로 Install

  • OS 정보 확인
[root@localhost ~]# cat /etc/*release*
CentOS release 6.10 (Final)
CentOS release 6.10 (Final)
CentOS release 6.10 (Final)
cpe:/o:centos:linux:6:GA
[root@localhost ~]# cat /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

해당값을 다 설정했으면 MariaDB를 yum install 합니다.

yum install MariaDB

(yum install MariaDB-server MariaDB-client) 처럼 실행할 수 있으나, MariaDB로 우선 실행시킵니다.

[root@localhost ~]# rpm -qa | grep MariaDB
MariaDB-compat-10.2.32-1.el6.x86_64
MariaDB-client-10.2.32-1.el6.x86_64
MariaDB-server-10.2.32-1.el6.x86_64
MariaDB-common-10.2.32-1.el6.x86_64

로 정상적으로 설치된 것이 있는지 확입합니다.

  • MariaDB 실행
[root@localhost ~]# /etc/init.d/mysql start
Starting MariaDB.200619 18:39:40 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'.
200619 18:39:40 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
 SUCCESS!

MariaDB를 실행시킵니다.

  • MariaDB root 패스워드 변경
/usr/bin/mysqladmin -u root password "123456"
  • 리스너 확인합니다.
[root@localhost ~]# netstat -anp | grep 3306  
tcp        0      0 :::3306                     :::*                        LISTEN      1529/mysqld  
  • MariaDB 접속 확인
[root@localhost ~]# mysql -uroot -p
Enter password:  
Welcome to the MariaDB monitor.  Commands end with ; or \g.  
Your MariaDB connection id is 5  
Server version: 10.1.22-MariaDB MariaDB Server  
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
MariaDB [(none)]> quit  
Bye
  • MariaDB 재시작
    service mysql restart