본문 바로가기
Study Information Technology

개발자를 위한 Spring Batch 입문

by infobeste 2024. 8. 10.
728x90
반응형

개발자를 위한 Spring Batch 입문

Overview

Spring Batch는 대규모 데이터 처리를 위한 배치 처리 애플리케이션을 구축하는 데 사용되는 오픈 소스 프레임워크입니다. 이 프레임워크는 강력한 기능을 제공하여 데이터를 효율적으로 읽고 처리하며, 복잡한 배치 작업을 관리할 수 있도록 도와줍니다. 이 글에서는 Spring Batch를 사용하여 배치 처리 애플리케이션을 개발하는 과정과 주요 구성 요소들을 자세히 살펴보겠습니다.

Spring Batch 개요

Spring Batch는 Spring 프레임워크의 일부로 제공되며, 다음과 같은 주요 특징을 가지고 있습니다:

  • 스케일러블한 배치 작업: 대용량 데이터 처리에 최적화되어 있어, 수백만 건의 데이터를 안정적으로 처리할 수 있습니다.
  • 선언적 트랜잭션 관리: Spring의 트랜잭션 매니지먼트를 활용하여 데이터 일관성을 유지하며 안정적인 처리를 보장합니다.
  • 재시작 가능한 작업 처리: 장애 발생 시 작업을 재시작할 수 있는 기능을 제공하여 데이터 처리의 신뢰성을 높입니다.
  • 다양한 리스너와 훅 제공: 작업의 다양한 단계에서 이벤트를 감지하고 처리할 수 있는 리스너와 훅을 제공하여 커스텀 로직을 쉽게 통합할 수 있습니다.

Spring Batch의 구성 요소

Spring Batch 애플리케이션은 일반적으로 다음과 같은 주요 구성 요소들로 구성됩니다:

  1. Job: 하나의 배치 작업 단위를 정의하며, 여러 스텝들로 구성됩니다. Spring Batch에서는 Job 인터페이스를 구현하여 정의합니다.

  2. Step: Job 내에서 수행되는 실질적인 작업 단위를 의미하며, 특정한 처리를 수행하는 데 사용됩니다. Step은 ItemReader, ItemProcessor, ItemWriter 등의 구성 요소들을 포함합니다.

  3. ItemReader: 데이터를 읽어오는 역할을 담당합니다. 파일, 데이터베이스, REST API 등 다양한 소스로부터 데이터를 읽을 수 있습니다.

  4. ItemProcessor: 읽어온 데이터를 가공하거나 필터링하는 역할을 합니다. 옵셔널하게 사용될 수 있습니다.

  5. ItemWriter: 최종적으로 가공된 데이터를 저장하거나 외부 시스템으로 전송하는 역할을 합니다. 데이터를 처리하는 마지막 단계입니다.

  6. JobRepository: Job의 메타데이터를 저장하고 관리하는 데 사용됩니다. 기본적으로 데이터베이스를 사용하여 상태를 추적합니다.

Spring Batch 애플리케이션 개발 단계

Spring Batch 애플리케이션을 개발하는 과정은 다음과 같은 단계로 진행됩니다:

1. 프로젝트 설정

먼저 Spring Boot 기반의 프로젝트를 생성하고, Spring Batch와 관련된 의존성을 추가해야 합니다. 예를 들어, spring-boot-starter-batch 스타터 패키지를 추가하여 필요한 라이브러리들을 자동으로 가져올 수 있습니다.

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

2. Job 정의

Job은 Job 인터페이스를 구현하여 정의됩니다. 각 Job은 하나 이상의 Step을 포함합니다. 예를 들어, 사용자 정보를 데이터베이스에서 읽어와 파일에 저장하는 Job을 정의할 수 있습니다.

@Configuration
public class BatchConfiguration {

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Bean
public Job myJob() {
return jobBuilderFactory.get("myJob")
.start(myStep())
.build();
}

@Bean
public Step myStep() {
return stepBuilderFactory.get("myStep")
.<UserInfo, UserInfo>chunk(10)
.reader(userReader())
.processor(userProcessor())
.writer(userWriter())
.build();
}

@Bean
public ItemReader<UserInfo> userReader() {
// 데이터를 데이터베이스에서 읽어오는 Reader 구현
}

@Bean
public ItemProcessor<UserInfo, UserInfo> userProcessor() {
// 데이터 가공을 수행하는 Processor 구현
}

@Bean
public ItemWriter<UserInfo> userWriter() {
// 파일에 데이터를 쓰는 Writer 구현
}
}

3. ItemReader 구현

데이터를 읽어오는 ItemReader를 구현합니다. 예를 들어, 데이터베이스에서 사용자 정보를 읽어오는 Reader를 구현할 수 있습니다.

public class UserReader implements ItemReader<UserInfo> {

private int count = 0;

@Override
public UserInfo read() throws Exception {
// 데이터베이스에서 데이터를 읽어와 UserInfo 객체로 반환
}
}

4. ItemProcessor 구현

읽어온 데이터를 가공하는 ItemProcessor를 구현합니다. 예를 들어, 특정 조건에 맞는 데이터만 처리하거나 변형할 수 있습니다.

public class UserProcessor implements ItemProcessor<UserInfo, UserInfo> {

@Override
public UserInfo process(UserInfo userInfo) throws Exception {
// 데이터 가공 로직을 구현하여 UserInfo 객체를 반환
}
}

5. ItemWriter 구현

최종적으로 가공된 데이터를 저장하거나 외부 시스템으로 전송하는 ItemWriter를 구현합니다. 예를 들어, 파일에 데이터를 쓰는 Writer를 구현할 수 있습니다.

public class UserWriter implements ItemWriter<UserInfo> {

@Override
public void write(List<? extends UserInfo> items) throws Exception {
// 파일에 데이터를 쓰는 로직을 구현
}
}

6. Job 실행

Spring Boot 애플리케이션을 실행하여 Job을 실행합니다. 이 과정에서 Spring Batch는 설정된 Reader, Processor, Writer를 사용하여 데이터를 읽고 처리한 뒤, 결과를 저장합니다.

@SpringBootApplication
public class BatchApplication implements CommandLineRunner {

@Autowired
private JobLauncher jobLauncher;

@Autowired
private Job myJob;

public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
JobParameters jobParameters = new JobParametersBuilder()
.toJobParameters();
jobLauncher.run(myJob, jobParameters);
}
}

예외 처리와 에러 핸들링

Spring Batch는 다양한 예외 처리와 에러 핸들링 기능을 제공하여 안정적인 데이터 처리를 보장합니다. 예를 들어, 데이터베이스 연결 오류 시 해당 에러 코드와 함께 예외가 발생하며, 이를 재시도하거나 특정 조치를 취할 수 있습니다.

참고 문서

Spring Batch에 대한 더 자세한 정보는 공식 문서에서 확인할 수 있습니다:

이 문서에서는 Spring Batch를 사용하여 배치 처리

728x90
반응형