Skip to main content

5 posts tagged with "java"

View All Tags

쿠버네티스 오브젝트와 클래스 오브젝트 비교

· 2 min read

쿠버네티스를 이해하는 건 어렵다. DevOps 의 전반적인 플로우를 알아야 이 플로우도 이해가 가기 때문이라 생각한다. 생소한 용어들도 어렵다. 한 판을 정리 했지만 매번 참조해야되는 듯하다.

오브젝트 비교

개념JAVA 클래스쿠버네티스 오브젝트
캡슐화ClassContainer image
인스턴스ObjectContainer
재사용단위jarContainer image
컴포지션Class A Contains Class BSidecar pattern
상속Class A extends Class BA container's from parent image
배포단위jar, war...Pod
빌드 및 런타임 아이솔레이션Module, Package, ClassNamespace, Pod, Container
초기화ConsturctorInit container
초기화 후 트리거Init methodpostStart
종료 전 트리거DestroypreStop
Cleanupfinalize(), shutdown hookDefer container
비동기, 병렬 실행ThreadPoolExecutor, ForkJoinPoolJob
스케쥴링Timer, ScheduledExecutorServiceCronJob
백그라운드Daemon threadDaemonSet
설정관리System.getenv(), PropertiesConfigMap, Secret

여담

  • 개념 설정 전에 이 표를 알았더라면 훨씬 이해가 쉬웠을텐데

windows에 spring boot cli 설치하기

· 3 min read

스프링 부트를 설치해보자.

여기서 원하는 버전 스냅샷의 bin.zip 파일을 받아 압축을 풀어준다 예를 들면 spring-boot-cli-2.1.0.M1-bin.zipC:/spring에 압축을 풀면 된다.

정식버전은 여기의 zip 파일을 받으면 된다.

설정

환경변수를 3 개 추가해줘야한다

  • JAVA_HOME 변수에 JDK 설치 경로 (C:/Program Files/Java/jdk-10.0.2)
  • SPRING_HOME 변수에 방금 압축푼 spring cli 의 경로 (C:/spring)
  • path 변수에 %SPRING_HOME%\bin 경로

오류

git bash에서 org.springframework.boot.loader.JarLauncher 을(를) 찾거나 로드할 수 없습니다란 오류가 뜰 때는 spring/bin/spring파일을 열어 다음과 같이 수정하자

spring
# 16번째 줄 if 문 주석처리
# For Cygwin, ensure paths are in UNIX format before anything is touched.
# if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
# fi

# 94번째 줄 if 문 주석처리
# if $cygwin; then
PRING_HOME=`cygpath --path --mixed "$SPRING_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# fi

출처

그래도 같은 오류가 발생한다면 spring 쉘 스크립트를 아예 새로 짜버리자

spring
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
# 아래에 다음 줄을 추가하자
# 이 구문은 스프링 홈 경로를 unix 스타일로 바꿔준다
[ -n "$SPRING_HOME" ] && SPRING_HOME=`cygpath --unix "$SPRING_HOME"`

# 94번째 줄을 다음과 같이 바꿔버리자
# if $cygwin; then
# SPRING_HOME=`cygpath --path --mixed "$SPRING_HOME"`
# CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
CLASSPATH=`cygpath --unix "$CLASSPATH"`
# fi

세 변수를 echo 찍었을 때 아래와 비슷하게 나오면 된다.

# echo $JAVA_HOME;
/d/Program Files/Java/jdk-10.0.2

# echo $SPRING_HOME;
/d/spring

# echo $CLASS_PATH;
.:/d/spring/bin:/d/spring/lib/spring-boot-cli-2.1.0.BUILD-SNAPSHOT.jar

그리고 마지막 줄의 명령어를 echo 할 때는 다음과 같다.

# echo "${JAVA_HOME}/bin/java" ${JAVA_OPTS} -cp "$CLASSPATH" org.springframework.boot.loader.JarLauncher "$@"
/d/Program Files/Java/jdk-10.0.2/bin/java -cp .:/d/spring/bin:/d/spring/lib/spring-boot-cli-2.1.0.BUILD-SNAPSHOT.jar org.springframework.boot.loader.JarLauncher

확인

$ spring --version

Spring CLI v2.1.0.M1

CentOS Tomcat 및 Java(JDK) 설치

· 3 min read

rpm이 설치되어있지 않은 환경에서의 compile 설치 방법을 다룬다.

$ cat /etc/issue
# bit 확인
$ getconf LONG_BIT

JDK 설치

다운로드

여기에서 다운로드하면 된다. image from hexo

업로드 및 압축 해제

$ tar -zxvf jdk.tar.gz

경로 설정

$ vi .profile

# 추가 내용
export JAVA_HOME=/유저경로/java
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin

# 저장
$ :wq!

bin 폴더 PATH들은 명령어를 위해 필요하고 $PATH < 기존 PATH를 추가하지 않는 이유는 TOMCAT 실행시 기본 설치 PATH를 먼저 읽어오기 때문이다.

경로 갱신

$ source .profile

설치 확인

$ javac -version

Tomcat 설치

다운로드

여기에서 다운로드하면 된다.

업로드 및 압축 해제

apache-tomcat-...의 이름이 길어 tomcat으로 변경 후 업로드하시면 편합니다.

$ tar -zxvf tomcat.tar.gz

경로 설정

$ vi .profile

# PATH 뒤에 tomcat/bin 경로를 추가
export PATH=/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin:/home/myuser/tomcat/bin

경로 확인

$ $PATH

/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin:/home/myuser/tomcat/bin
# 위에 설정한 PATH의 값이 보이면 정상

Tomcat 설정 추가

tomcat\bin\catalina.sh를 열고 Tomcat과 Java의 경로를 추가해준다.

CATALINA_HOME="/where/to/tomcat"
CATALINA_BASE="/where/to/tomcat"

JAVA_HOME="/where/to/java"

주의

catalina.sh의 주석 표시된 내용을 읽으면 변수를 추가하지 말고 setenv.sh를 만들어서 커스터마이징 옵션을 분리하라고 나온다.

setenv.sh를 수정하고 싶으면 파일을 열고 아래와 같이 추가해준다.

export CATALINA_HOME="/where/to/tomcat"
export CATALINA_BASE="/where/to/tomcat"

export JAVA_HOME="/where/to/java"

서버 실행

tomcat\webapps에 war파일을 옮긴 후 서버를 실행한다.

$ startup.sh

Tomcat started.

org.apache.ibatis.exceptions.PersistenceException

· One min read

서버 Mysql이 예전 커넥션을 그대로 가지고 있어서 발생한다.

해결

Mybatis Config에 아래처럼 커넥션과 관련된 옵션을 추가한다.

<!-- @author http://linuxism.tistory.com/580 -->
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>

<!-- 동시 커넥션 수 -->
<property name="poolMaximumActiveConnections" value="20"/>
<!-- 유휴상태의 커넥션 수 -->
<property name="poolMaximumIdleConnections" value="20"/>
<!-- 커넥션 요청 후 획득까지 기다리는 시간 -->
<property name="poolMaximumCheckoutTime" value="20000"/>
<!-- 커넥션 ping 테스트 -->
<property name="poolPingEnabled" value="true"/>
<!-- 커넥션 확인 쿼리 -->
<property name="poolPingQuery" value="select 1"/>
<!-- 커넥션이 얼마동안 사용하지 않으면 닫히는지 시간 설정 -->
<property name="poolPingConnectionsNotUsedFor" value="43200"/>
<!-- 사용불가능한 커넥션을 기다리는 시간 설정 -->
<property name="poolTimeToWait" value="30000"/>
<!-- 인코딩 -->
<property name="driver.encoding" value="UTF-8"/>
</dataSource>
</environment>
</environments>

java localhost HTTPS Connection

· One min read

localhost 에서 Https 페이지로 httpcon 을 열면 오류가 발생한다. 인증을 받아야하기 때문인데 함수하나만 호출하면 연결이 가능해진다.

private void setTrustAllCerts() throws Exception{
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType ) {}
public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType ) {}
}
};

// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance( "SSL" );
sc.init( null, trustAllCerts, new java.security.SecureRandom() );
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(
new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
});
}
catch (Exception e) {
//We can not recover from this exception.
e.printStackTrace();
}
}

원본에서 가져왔다.

예제

HTTPCON 전에 호출하면 인증서 없이 HTTPS 연결이 가능하다.