배치 실행 어플리케이션
배치실행 어플리케이션 설치
다음은 배치실행 어플리케이션을 리눅스 서버에 설치하는 과정을 설명한다.
어플리케이션 계정 생성
어플리케이션을 구동하기 위한 리눅스 계정을 생성한다.
Ps. 계정명 및 home 디렉터리의 위치는 프로젝트 임의로 구성 가능하나 유지보수의 영속성을 위하여 chamomile로 fix할것을 권고함.
# 계정 생성
root@host> useradd chamomile -d /home/chamomile
# 패스워드 입력
root@host> passwd chamomile
# switch user
chamomile@host> su - chamomile
ulimit 설정 변경
ulimit는 프로세스의 자원 한도를 설정하는 것으로 soft한도와 hard한도 두가지가 있습니다.
-
soft : 새로운 프로그램을 생성하면 기본으로 적용되는 한도
-
hard : 소프트한도에서 최대로 늘릴 수 있는 한도
어플리케이션 계정은 최적화를 위하여 해당 설정을 조정한다.
# 현재 chamomile계정의 설정 확인
chamomile@host> ulimit –a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31147
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
위의 경우 리소스 사용이 제약적이므로 배치 실행 시 오류 발생할 가능성이 크므로 아래와 같이 설정을 추가한다. (unlimited 또는 직접 건수 지정)
root@host> vim /etc/security/limits.conf
…
chamomile soft nproc unlimited
chamomile hard nproc unlimited
chamomile soft nofile unlimited
chamomile hard nofile unlimited
…
어플리케이션 설치
배치실행어플리케이션 바이너리 설치 (JDK등은 이미 설치되어있다고 가정하고 설명은 생략한다.)
# 압축파일 해제
chamomile@host> tar -zxvf chamomile-batch-0.0.1-dist.tar.gz
# Symbolic Link 생성
chamomile@host> ln -s ./chamomile-batch-0.0.1 ./chamomile-batch
# 어플리케이션 HOME 이동
chamomile@host> cd ./chamomile-batch
# 기동스크립트 권한 변경
chamomile@host> chmod +x ./application.sh
라이선스 적용
라이선스 파일을 chamomile-batch-0.0.1/conf
폴더에 위치시킨다.
라이선스에 관한 상세한 내용은
온라인_개발가이드
문서를 참고한다.
배치실행 데이터베이스 생성 (Mysql/MariaDB)
데이터베이스 별 DDL 스크립트는 배포 binary에 포함되어 있다.
2가지 주제영역의 테이블을 생성해야 한다.
-
캐모마일 배치실행 어플리케이션 관련 테이블
-
스프링배치 JobReposiory 관련 테이블
데이터베이스 및 계정 생성
Mysql(MariaDB)는 설치 되어있다고 가정한다.
# 데이터베이스 서버로 sql 디렉터리 파일 전송(DDL스크립트 및 SQL)
chamomile@host> scp -rp ./sql root@[MYSQL서버]:./
# Mysql 데이터베이스 서버 접속(mysql 계정이 nologin상태인 경우 root로 접속)
chamomile@host> ssh mysql@${mysql 설치서버}
# Mysql 데이터베이스 및 사용자 생성
mysql@host> mysql -u root -p mysql
Mysql>
-- Creating Database
CREATE DATABASE CHAMOMILE;
-- Creating User
INSERT INTO USER
(HOST,USER,PASSWORD, SELECT_PRIV, INSERT_PRIV, UPDATE_PRIV, DELETE_PRIV, CREATE_PRIV, DROP_PRIV, INDEX_PRIV, ALTER_PRIV, SSL_CIPHER,X509_ISSUER,X509_SUBJECT,AUTHENTICATION_STRING)
VALUES
('%', 'chamomile', PASSWORD('[패스워드]'),'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y','','','','');
INSERT INTO DB
(HOST, DB, USER, SELECT_PRIV, INSERT_PRIV, UPDATE_PRIV, DELETE_PRIV, CREATE_PRIV, DROP_PRIV, INDEX_PRIV, ALTER_PRIV)
VALUES
('%', 'chamomile', 'chamomile', 'Y', 'Y', 'Y', 'Y','Y','Y','Y','Y');
flush privileges;
테이블 생성
# 신규 생성 데이터베이스 접속
mysql@host> mysql -u chamomile -p chamomile
# 배치실행 어플리케이션 스키마 생성
Mysql> source ./sql/ddl/chamomile-batch.mysql.sql
# 스프링 배치 스키마 생성
Mysql> source ./sql/spring-batch/spring-batch.mysql.sql
# 초기 테스트 데이터 적재
Mysql> source ./sql/data/chamomile-batch.data.sql
Mysql> source ./sql/test/emp.mysq.sql
PS. 테이블 및 SQL 대소문자 문제가 발생할 경우 아래와 같이 확인 후 Mysql 또는 MariaDB 설정변경
Mysql> show variables like ‘lower%’; lower_case_table_names 값이 0인 경우 1로 추가 mysql@host> vim /etc/my.conf … [mysqld] lower_case_table_names = 1 ..
배치실행 어플리케이션 설정
데이터베이스 접속정보 설정
chamomile@host> vim ./conf/application.properties
…
# 기본 언어셋 설정 (한국어:ko, 영어:en 디폴드값은 ko)
defaultLocale=ko
# 데이터베이스 아이디 설정(오라클:ORACLE, MariaDB/MySQL: MYSQL, SQLServer: MSSQL, 티베로: TIBERO)
databaseId=MYSQL
# OLTP connection pool
dataSource.oltp.driver=com.mysql.jdbc.Driver
dataSource.oltp.url=jdbc:mysql://[데이터베이스서버]:3306/chamomile
dataSource.oltp.username=[사용자]
dataSource.oltp.password=ENC([패스워드PBE])
dataSource.oltp.initialSize=5
dataSource.oltp.maxActive=10
dataSource.oltp.validationQuery=select 1 from dual
# OLAP connection pool
dataSource.olap.driver=com.mysql.jdbc.Driver
dataSource.olap.url=jdbc:mysql://10.131.7.140:3306/chamomile
dataSource.olap.username=[사용자]
dataSource.olap.password=ENC(([패스워드PBE])
dataSource.olap.initialSize=5
dataSource.olap.maxActive=10
dataSource.olap.validationQuery=select 1 from dual
# BATCH connection pool
dataSource.batch.driver=com.mysql.jdbc.Driver
dataSource.batch.url=jdbc:mysql://[데이터베이스서버]:3306/chamomile
dataSource.batch.username=[사용자]
dataSource.batch.password=ENC([패스워드PBE])
dataSource.batch.initialSize=2
dataSource.batch.maxActive=5
dataSource.batch.validationQuery=select 1 from dual
…
관리자 웹콘솔 포트정보 변경
관리자 웹콘솔의 접속 포트 변경시 아래의 설정파일 변경 후 재기동한다.(기본 6100번 포트로 설정)
chamomile@host> vim ./conf/application.xml
…
<webServer id="application" port="6100">
<ssl>
<keyStorePath>conf/ssl/keystore</keyStorePath>
<keyStoreType>pkcs12</keyStoreType>
<keyStorePass>abcd1234</keyStorePass>
</ssl>
<context path="">
<resourceBase>webapp/application</resourceBase>
<descriptor>webapp/application/WEB-INF/web.xml</descriptor>
</context>
</webServer>
…
PS.1025포트 아래로 서비스가 필요한 경우 추가적인 시스템 설정이 하다.
sudo setcap 'cap_net_bind_service=+eq' ${JRE_HOME}/bin/java setcap이 불가능한 경우는 sticky설정으로 처리 sudo chown root:root ${JRE_HOME}/bin/java sudo chmod u+s ${JRE_HOME}/bin/java
관리자 웹콘솔 SSL 적용
보안상의 문제로 HTTPS로 설정해야되는 경우 아래의 설정정보에 인증서 정보를 입력한다.
PS. 배치서버 특성상 폐쇄망이므로 도메인이 없어 공인인증서가 아닌 사설인증서로 설치될것으로 보임. 설치파일에는 10년기간의 사설인증서가 기본으로 들어있다.
HTTP로 접속하고 싶은 경우 ssl 태그 부분을 제거한다.
chamomile@host> vim ./conf/application.xml
…
<webServer id="application" port="6100">
<ssl>
<keyStorePath>conf/ssl/keystore</keyStorePath>
<keyStoreType>pkcs12</keyStoreType>
<keyStorePass>abcd1234</keyStorePass>
</ssl>
…
배치실행 어플리케이션 실행
어플리케이션 기동
chamomile\@host\> ./application.sh start
어플리케이션 확인
chamomile@host> ./application.sh status
Application Status
chamomi+ 16397 1 30 17:41 pts/1 Sl 0:36 java -server -Djava.net.preferIPv4Stack=true -Djava.security.egd=/dev/./urandom -Dlog4j.configuration=file:conf/log4j.xml -Dlog4jdbc.drivers=com.tmax.tibero.jdbc.TbDriver -classpath ./*:./lib/* net.lotte.chamomile.batch.Application
어플리케이션 로그 확인
chamomile@host> ./application.sh log
[2018-07-31 17:41:57.474][INFO ](ApplicationContainer.java:115)-
_______ _____ __ _______ __ _________ ____
/ ___/ // / _ | / |/ / __ \/ |/ / _/ / / __/
/ /__/ _ / __ |/ /|_/ / /_/ / /|_/ // // /__/ _/
\___/_//_/_/ |_/_/ /_/\____/_/ /_/___/____/___/
[2018-07-31 17:42:06.699][INFO ](FrameworkServlet.java:489)-
[2018-07-31 17:42:06.712][INFO ](AbstractApplicationContext.java:583)-Refreshing W
[2018-07-31 17:42:06.739][INFO ](XmlBeanDefinitionReader.java:317)-Loading XML bea
[2018-07-31 17:42:07.063][INFO ](XmlBeanDefinitionReader.java:317)-Loading XML bea
어플리케이션 종료 (Graceful)
기본적으로 shutdown 은 graceful로 처리된다. (배치작업이 있을 경우 종료까지 대기함)
chamomile\@host\> ./application.sh stop
어플리케이션 강제종료
chamomile\@host\> ./application.sh status
chamomile\@host\> kill -9 [프로세스PID]
설치 후 점검
웹콘솔 접속 여부 확인
설치서버의 웹콘솔 접속의 정상여부를 확인한다.
로그인 화면이 정상적으로 열린다면 로그인한다.
Default 사용자/패스워드는 ADMIN / 1111 이다.
배치프로그램 실행 정상 확인(Build-In)
메뉴[배치워크플로우 관리] 로 이동하여 샘플 배치프로그램 중 BUILD-IN 으로 구성된 배치프로그램이 정상적으로 작동하는지 여부를 확인한다.
해당 샘플 배치프로그램을 선택하여 상세화면으로 진입한다.
상세화면에서 상단 [시작][중지] 버튼을 클릭하여 배치프로그램의 실행/중지를 테스트 한다.