관리 메뉴

나만의공간

Spring Batch 강의 #2 본문

IT/Spring Batch

Spring Batch 강의 #2

밥알이 2023. 8. 1. 17:35

강의 첫번째에서 SpringBatch F/W을 기본으로 만드는 방법을 설명 드렸습니다.
docker를 이용한 DB도 구성을 맞춰습니다.

Spring Batch에서 기본으로 생성하는 테이블이 만들어 지는 과정으로 로그로 볼려고 하는데 로그에는 아무것도 안찍히는데, MySql서버에 접속하여 테이블을 조회 하면 아래와 같은 9개에 테이블이 만들어져 있습니다.

아래 9개 테이블은 Spring Batch Application을 실행하면 자동으로 만들어 집니다.

Spring Batch에서 자동생성된 테이블 / 시퀀스에 대한 ERD는 아래와 같습니다.

어떤 과정으로 Spring Batch에서 테이블들을 만드는지 설명 드리고, 다음강의에서 각 테이블별 어떤 정보가 적재되고, 어떤용도로 쓰이는지 자세히 알아 보겠습니다.

Spring Batch 자동 생성테이블 Sql Schema 조회

Spring Batch 기본 구성 F/W을 받았다면 아래와 같은 방식으로 검색을 하면 DB 종류별 Schema를 볼수 있습니다.
Intellij 에서는 Shift키를 두번 누르면 아래와 같은 창이 나타나고 검색어에 "schema-*.sql"로 검색하면 됩니다.
DB 종류별 생성할 Schema가 있으며, 저희가 구성한 F/W에서는 해당 Schema를 자동으로 읽어 들려 테이블을 생성하고 있습니다.

자동 생성 기능을 사용해도 되고, 본인 DB에 해당 하는 Schema 파일을 조회하여 안에 있는 Sql을 실행해도 됩니다.

강의 첫번째에 보여드린 Application.yml 설정중 아래 설정으로 인하여 필요한 테이블들이 Application 실행시 자동으로 생성됩니다.
매번 자동 생성이 되면 안되니, 처음에는 "always" 속성을 지정하고, 그 이후 실행시에는 "never" 로 변경하시는걸 추천 드립니다.

Spring Batch 자동 생성테이블 로그 보는법

Spring Batch에서 테이블을 언제 생성하는지 보기 위해서는 로그를 Debug 레벨로 변경해야 하는데 기본 설정은 INFO 레벨입니다.
이에 logback-spring.xml 파일을 신규로 만들어 로그레벨 변경 등을 진행하겠습니다.

Spring Batch에서 아무런 설정을 안해도 기본적으로 로그에 색상등이 지정되면서 보기 편하게 로그가 출력이 됩니다.
이것은 Spring-boot.jar 파일에 있는 defaults.xml / base.xml 두개 파일에 로그 출력에 대한 기본설정이 있는 상태입니다.

아래 파일내용이 defaults.xml에 있는 기본로그 출력에 대한 설정입니다.

<?xml version="1.0" encoding="UTF-8"?>

<!--
Default logback configuration provided for import
-->

<included>
	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

	<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
	<property name="CONSOLE_LOG_THRESHOLD" value="${CONSOLE_LOG_THRESHOLD:-TRACE}"/>
	<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
	<property name="FILE_LOG_THRESHOLD" value="${FILE_LOG_THRESHOLD:-TRACE}"/>

	<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
	<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
	<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
	<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
	<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
	<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
	<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
	<logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
</included>

base.xml 파일 기본 설정 정보

<?xml version="1.0" encoding="UTF-8"?>

<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->

<included>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</included>

 

위 기본 로그 설정에서 저희가 원하는 형태에 변경과 Debug로그도 찍히도록 logback-spring.xml 파일을 신규로 만들어 보겠습니다.

Comments