배치 데이터 처리

Spring batch

BUST 2017. 7. 13. 21:59

Spring Batch

Batch Processing 란?

일괄 처리라는 의미로써, 순차적으로 자료를 처리를 한다는 의미이다. 실시간 처리와 다르게 통계 및 데이터 동기화 등 시간이 오래 걸리는 작업을 위주로 구현된다.

  • 일일 통계 작업
  • 쿠폰 이벤트, App Push가 같이 실시간성이 필요 없는 작업

Spring Batch란?

Spring 오픈스소에서 나온 Batch Framework 중에 하나이다. 손쉽게 배치 잡(Job)을 작성을 할 수 있다.

  • 트랙잭션 관리
  • 청크(Chunk) 단위 처리
  • 병렬(parallel) 처리
  • Spring Admin Tool

구성요소

활용 패턴

배치가 실행 스케쥴러를 설정할때 Linux의 crontab를 활용할수 있다. Linux 커맨드을 이용하여 배치를 실행시킬때에는 로그 정보를 보기가 어렵다.
또 다른 방법으로는 젠킨스(Jenkins)를 이용하여 스케쥴러  작업 로그를 관리를 할수가 있다. 배치가 실패했을 경우 젠킨스 플러그인을 이용하여 슬랙이나 이메일로 알림을 받을수가 있다. 하지만 젠킨스의 스케쥴러는 1분단위 이상만 가능하기 때문에 초단위의 정확한 스케쥴러가 필요하다면 다른 플랫폼을 사용하거나 Standalone으로 계속 실행되는 Application 제작을 하는 것이 더욱 더 나을듯하다.

Spring Boot를 이용한 간단한 예제

Maven 설정

<!-- Maven -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>

Configuration

@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration
public class BatchConfiguration {
 
  @Autowired
  private JobBuilderFactory jobBuilderFactory;
 
  @Autowired
  private StepBuilderFactory stepBuilderFactory;
 
  @Bean
  public Step step1() {
    return stepBuilderFactory.get("step1")
        .tasklet(new Tasklet() {
          public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
            return null;
          }
        })
        .build();
  }
 
  @Bean
  public Job job(Step step1) throws Exception {
    return jobBuilderFactory.get("job1")
        .incrementer(new RunIdIncrementer())
        .start(step1)
        .build();
  }
}

Main class

public class Main {
  public static void main(String [] args) {
    System.exit(SpringApplication.exit(SpringApplication.run(
        BatchConfiguration.class, args)));
  }
}
  • jobLauncher나 jobRepository를 각각에 대해 설정하고자 한다면 DefaultBatchConfigurer 인터페이스를 이용하며 된다.


'배치 데이터 처리' 카테고리의 다른 글

Apache Airflow  (0) 2018.07.07
Jenkins을 Batch Scheduler로 활용하기  (0) 2018.06.17