인프런 커뮤니티 질문&답변

H N님의 프로필 이미지
H N

작성한 질문수

스프링 배치

Hello Spring Batch 시작하기

배치 메타 데이터 사용

작성

·

262

·

수정됨

0

안녕하세요. 강의 잘 듣고 있습니다.

 

다름이 아니라 현업에서 배치 업무에 배정되어 급하게 강의를 수강중인데 메타 데이터를 꼭 설정해야 한다고 들었습니다. 현재 디비는 pom.xml 의존성으로 티베로 디비를 사용하고 있습니다.

그리고 스프링 배치의 버전은 4.1.4 RELEASE 버전을 사용중입니다. 또한 강의와 다르게 Job 구성을 XML로 하고 있습니다.

 

궁금한 사항은 아래와 같습니다.

  1. 배치 잡을 디버깅으로 찍어보면 Job이 수행된 후 JobExcution에 id, version, start, end, status 등이 찍히긴 하는데 데이터베이스에는 메타 데이터 테이블이 따로 존재하지 않습니다. 그리고 같은 파라미터와 xml id 값으로(찾아보니 job_name을 의미하는 것 같음) 중복 실행이 가능합니다. 이럴경우 현재 프로젝트에서는 DB 테이블에서 메타 데이터를 쓰고 있지 않는게 맞나요? 쓰고 있지 않다면 어떻게 실행이 가능한 것 인가요? 강의에서는 무조건 써야한다고 들었습니다.

  2. 배치 프로그램이 Spring 사용 없이 그냥 자바 자체로만 실행이 가능한가요? 원래 Spring이 뜰 때 Spring 배너가 보여야 하는데 Spring 배너가 보이지 않습니다. 또한 @EnableBatchProcess(?) 어노테이션도 사용하지 않고 특정 클래스에 Main 함수에서 실행하게 됩니다. (Springboot의 run도 없음) 이럴 경우 Spring을 사용하지 않는 것인가요? pom.xml 의존성에는 스프링 부트 의존성이 있긴합니다.

    1. (추가) 확인해보니 Java 어플리케이션으로 그냥 돌아가는 것 같습니다. 근데 스프링 부트를 사용한 이유는 스프링에서 제공하는 @Bean, @Component 등 스프링의 편의 기능을 사용하기 위해서 스프링을 사용했다고 봐도 무방할까요??, 물론 소스코드 없이 이렇게 말씀드리는게 판단이 어려우실 것 같긴합니다만 아무래도 회사 소스라 공개하기는 어려울 것 같아서요 ㅠㅠ)

  3. 배치를 XML로 구성하는 것의 용어는 배치 네임스페이스가 맞나요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

HN님의 질문에 답변 드리겠습니다.

  1. 스프링 배치는 메타 데이터를 관리하기 위해 배치 작업의 실행 정보를 데이터베이스에 저장하게 설계되어 있습니다. 현재 프로젝트에서 메타 데이터 테이블이 보이지 않고, 같은 파라미터와 xml id 값으로 중복 실행이 가능한 경우, 스프링 배치의 기본 설정이나 데이터베이스 구성이 제대로 이루어지지 않았을 수 있습니다. 스프링 배치가 메타 데이터를 관리하지 않고 있을 수 있지만, 이는 일반적인 사용 방법과는 다릅니다. 스프링 배치의 메타 데이터 관리 기능을 활용하기 위해서는 데이터베이스에 스프링 배치가 제공하는 메타 데이터 테이블을 생성하고 사용해야 합니다.

  2. 스프링 배치 프로그램은 Spring 없이도 실행이 가능합니다. 일반 자바 어플리케이션으로 구성하여 실행할 수 있으나, 이럴 경우 스프링 부트의 편의 기능(예: 자동 설정, 의존성 주입 등)을 직접 구현하거나 관리해야 할 수 있습니다. 스프링 부트 의존성이 포함되어 있다면, 아마도 스프링의 편의 기능을 일부 활용하기 위해 포함되었을 가능성이 큽니다. 따라서, 스프링 부트를 사용한 이유가 스프링의 편의 기능을 사용하기 위한 것으로 보아도 무방하며, 실제 구성과 사용 방식에 따라 다를 수 있습니다.

  3. 배치를 XML로 구성하는 것은 일반적으로 ‘배치 네임스페이스’ 또는 ‘XML기반 배치 구성’이라고 할 수 있습니다. 스프링 배치에서 XML 파일을 사용하여 Job, Step 등을 정의하는 방식을 말합니다. 이는 스프링 배치의 구성을 XML 파일에 명시하여 관리할 수 있게 해줍니다.

도움이 되었기를 바랍니다. 추가적인 질문이 있으시면 언제든지 질문해주세요.

H N님의 프로필 이미지
H N
질문자

추가 질문입니다.

  1. 스프링 배치가 메타 데이터를 사용하지 않고도 활용이 가능하다고 했는데 그럼 인메모리 데이터베이스(메모리 내 데이터베이스)를 사용하는건가요?

  2. 인메모리 데이터베이스를 사용해야하는 경우 따로 설정을 안해줘도 되나요? 설정을 해줘야한다면 어떻게 설정해줘야하나요? 참고로 해당 프로젝트에선 스프링 부트의 application.properties, application.yml 파일이 존재하지 않습니다.

     

정수원님의 프로필 이미지
정수원
지식공유자

네 맞습니다.

RDBMS 관련 아무런 설정을 하지 않으면 기본적으로 인메모리 데이터베이스(메모리 내 데이터베이스)를 사용합니다.

그래서 특별한 설정은 필요하지 않고 스프링 부트가 자동적으로 한다고 보시면 됩니다.

인메모리는 H2 와 같은 메모리 디비를 통해 저장소 역할을 하고 있습니다.

참고로 해당강의에서는 스프링 부트기반으로 배치를 설명하고 있기 때문에 xml 방식의 흐름과는 구조자체가 틀리기 때문에 답변에 어려움이 있는점 양해 부탁드립니다.

H N님의 프로필 이미지
H N

작성한 질문수

질문하기