Spring Batch

2023. 3. 24. 09:41Framework

스프링 배치(Spring Batch)는 대용량 데이터 처리를 위한 오픈 소스 프레임워크입니다. 스프링 프레임워크 기반으로 만들어졌으며, 일괄 처리(batch processing) 작업을 수행하는 데 사용됩니다. 대용량 데이터를 처리하는 작업을 자동화하고, 이를 효율적으로 처리할 수 있도록 지원합니다.

스프링 배치는 다음과 같은 특징을 가지고 있습니다.

  • 스프링 기반: 스프링 프레임워크 기반으로 만들어졌기 때문에 스프링의 다양한 기능과 라이브러리를 활용할 수 있습니다.
  • 대용량 데이터 처리: 대용량 데이터 처리를 위한 다양한 기능을 제공하며, 이를 효율적으로 처리할 수 있습니다.
  • 확장성: 다양한 확장 기능을 제공하며, 필요에 따라 개발자가 직접 커스터마이징할 수 있습니다.
  • 재시작 기능: 배치 처리 중에 예기치 않은 상황이 발생하더라도, 재시작 기능을 통해 중단된 부분부터 다시 처리할 수 있습니다.
  • 관리 기능: 배치 처리 작업을 관리하는데 필요한 다양한 기능을 제공합니다.

스프링 배치는 데이터베이스, 파일 등 다양한 소스에서 데이터를 읽어들여 처리하고, 결과를 데이터베이스나 파일 등으로 저장할 수 있습니다. 대용량 데이터를 처리하는 작업에서는 스프링 배치를 활용하여 일괄 처리를 자동화하고, 이를 효율적으로 처리할 수 있습니다.

 

@Configuration
@EnableBatchProcessing
public class BatchConfig {

  @Autowired
  private JobBuilderFactory jobs;

  @Autowired
  private StepBuilderFactory steps;

  @Bean
  public ItemReader<String> reader() {
    return new ListItemReader<>(Arrays.asList("foo", "bar", "baz"));
  }

  @Bean
  public ItemProcessor<String, String> processor() {
    return String::toUpperCase;
  }

  @Bean
  public ItemWriter<String> writer() {
    return items -> items.forEach(System.out::println);
  }

  @Bean
  public Step step1() {
    return steps.get("step1")
            .<String, String>chunk(2)
            .reader(reader())
            .processor(processor())
            .writer(writer())
            .build();
  }

  @Bean
  public Job job() {
    return jobs.get("job")
            .start(step1())
            .build();
  }
}

위 코드는 간단한 배치 작업을 수행하는 스프링 배치 예제입니다. 이 예제에서는 "foo", "bar", "baz" 세 개의 문자열을 읽어들여 대문자로 변환하고, 결과를 콘솔에 출력하는 작업을 수행합니다.

  • reader() 메서드: ListItemReader를 사용하여 문자열 목록을 읽어들입니다.
  • processor() 메서드: 각 문자열을 대문자로 변환하는 ItemProcessor를 반환합니다.
  • writer() 메서드: 변환된 문자열을 콘솔에 출력하는 ItemWriter를 반환합니다.
  • step1() 메서드: reader, processor, writer를 조합하여 하나의 Step을 생성합니다.
  • job() 메서드: 하나의 Step을 시작점으로 하는 Job을 생성합니다.

위 예제에서는 각 Step에서 처리할 데이터 단위(chunk)의 크기를 2로 설정했습니다. 이는 하나의 트랜잭션 안에서 최대 2개의 데이터를 처리하도록 지정한 것입니다. 이렇게 하면 처리할 데이터가 많을 때 메모리 사용을 줄일 수 있습니다.

'Framework' 카테고리의 다른 글

Jeus  (0) 2023.03.17
Tomcat  (0) 2023.03.17
Apache  (0) 2023.03.17
Nginx  (0) 2023.03.17
Spring Cloud  (0) 2023.02.27