ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. Spring Batch Job
    IT/Spring Batch 2021. 4. 29. 21:53

    Spring Batch를 구성하는 요소중 가장 기본적인 것은 Job이다. Job과 Job Repository에 대해서 알아보자.

     

    Spring Batch의 구조

    일반적인 Spring Batch의 흐름은 다음과 같이 이루어진다.

    Job이라는 하나의 포괄적인 작업을 Step 의 단계로 나누고, Step은 다음과 같이 3단계로 처리된다.

    1. 읽기 : 데이터 저장소에서 가공할 데이터를 불러온다.

    2. 처리 : 불러온 데이터를 원하는 방식으로 가공한다.

    3. 쓰기 : 가공이 끝난 데이터를 다시 저장소에 저장한다.

    Job

    Spring Batch 에서의 Job은 하나의 배치 작업 단위를 얘기한다. Job 안에는 여러 Step이 존재할 수 있고, Step 안에는 Tasklet 또는 Reader, Processor, Writer의 묶음이 존재한다.

    Tasklet의 명확한 역할이 있는것은 아니지만 개발자가 커스텀한 기능을 넣기 위한 단위로 보면 된다. 실제 배치의 로직은 Reader,Processor,Writer의 묶음으로 처리된다.

    Job을 생성할 때에는 JobBuilderFactory 클래스를 이용하여 쉽게 Job을 생성할 수 있다.

     

    Job Repository

    Job Repository는 실행한 Job에 관련된 정보를 담고있는 데이터 저장소 이다. 우리가 보통 사용하는 H2, Mysql 같은 DB를 사용하여 테이블을 생성하고 그 안에 Batch 실행 관련 정보를 담는다. Job Repository 내부의 테이블은 다음과 같다.

    이 테이블들이 Job Repository에 연결된 DB에 존재해야하만 Spring Batch가 정상 작동한다. 기본적으로 H2 DB를 사용 할 경우 테이블을 자동 생성 해 주지만, MySql이나 Oracle 같은 DB를 사용 할 경우 개발자가 직접 생성해야 한다.

     

    그렇다면 어떻게 테이블들을 다 생성할까? 걱정하지 말자. 스프링부트 배치를 정상적으로 추가했다면 이미 테이블 스키마가 DB별로 존재한다.

    IntelliJ 에서 ctrl+shift+n 을 눌러 schema 로 검색하면 다음과 같이 목록을 볼 수 있다.

    목록에서 schema-mysql.sql 을 선택하여 다음과 같이 ddl을 확인하자. 이 내용을 그대로 복사하여 mysql에 데이터를 초기화 시켜주면 된다.

    더보기

    *유의사항

    Spring Batch로 배치서버를 구동할때, 보통 2개 이상의 DB가 필요하다. 하나는 Job Repository의 내용을 저장할 DB와, 실제로 배치를 이용하여 처리할 데이터가 있는 DB이다.

    개인적인 학습용이라면 두개의 DB를 구분없이 한군데 사용하면 되겠지만, 실무에서는 Job Repository용 DB와 작업할 데이터의 DB가 다른 경우가 많다. 이때는 DB 커넥션을 2개 이상 생성하여 사용해야 한다.

    이를 위해서는 datasource를 2개 이상 생성하여 각각 다른 DB에 커넥션을 생성해야 한다. 본인의 경우는 하나의 물리적인 DB(Mysql)에 database 2개를 생성하여 각각의 datasource를 설정했으며, 배치로 실제 작업할 데이터는 JPA를 통해 작업할 수 있게 세팅하였다.

    본 내용에 대해서는 코드와 함께 추가적인 포스팅을 통해 다루도록 하겠다.

    참고용 Github repository : https://github.com/sgsgbaek/SpringBatch

    기본적인 Job과 Job Repository에 대해 학습하였으니 다음 포스팅은 실제로 Spring Batch 프로젝트를 생성하고 설정하는 작업을 해 보겠다.

     

    'IT > Spring Batch' 카테고리의 다른 글

    4. Spring Batch Job Repository 설정  (0) 2021.04.30
    3. Spring Batch Project 생성 및 설정  (0) 2021.04.29
    1. Spring Batch  (0) 2021.04.27
Designed by Tistory.