[java] Maven을 사용하여 자바 스프링 배치 구현하기

이번 블로그 포스트에서는 Maven을 이용하여 자바 스프링 배치를 구현하는 방법에 대해 알아보겠습니다.

배치 프로젝트 생성하기

먼저, Maven을 이용하여 새로운 스프링 배치 프로젝트를 생성합니다. 아래의 명령어를 사용하여 Maven 프로젝트를 생성할 수 있습니다.

mvn archetype:generate -DgroupId=com.example.batch -DartifactId=batch-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

위 명령어를 실행하면, com.example.batch라는 groupId와 batch-demo라는 artifactId를 가지는 Maven 프로젝트가 생성됩니다.

스프링 배치 의존성 추가하기

다음으로, 스프링 배치를 사용하기 위해 필요한 의존성을 Maven 프로젝트에 추가합니다. pom.xml 파일을 열고 <dependencies> 섹션에 다음 의존성을 추가합니다.

<dependencies>
    <!-- Spring Batch -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
</dependencies>

의존성을 추가하면 스프링 배치 관련 클래스와 라이브러리를 사용할 수 있게 됩니다.

배치 잡과 스텝 구현하기

이제 배치 잡과 스텝을 구현하는 코드를 작성해보겠습니다. 예를 들어, 간단한 데이터베이스 테이블에서 데이터를 읽어와서 파일로 저장하는 배치 작업을 구현해보겠습니다.

@EnableBatchProcessing
@SpringBootApplication
public class BatchDemoApplication {

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

    @Bean
    public ItemReader<SomeEntity> reader() {
        // 데이터베이스에서 데이터를 읽어오는 Reader를 구현합니다.
        return new JdbcCursorItemReaderBuilder<SomeEntity>()
                .dataSource(dataSource)
                .sql("SELECT * FROM some_table")
                .rowMapper(new BeanPropertyRowMapper<>(SomeEntity.class))
                .build();
    }

    @Bean
    public ItemProcessor<SomeEntity, SomeEntity> processor() {
        // 데이터에 대한 변환 로직을 구현하는 Processor를 구현합니다.
        return new SomeEntityProcessor();
    }

    @Bean
    public ItemWriter<SomeEntity> writer() {
        // 데이터를 파일로 저장하는 Writer를 구현합니다.
        return new FlatFileItemWriterBuilder<SomeEntity>()
                .name("someEntityWriter")
                .resource(new FileSystemResource("output.txt"))
                .lineAggregator(new PassThroughLineAggregator<>())
                .build();
    }

    @Bean
    public Step someStep(ItemReader<SomeEntity> reader, ItemProcessor<SomeEntity, SomeEntity> processor, ItemWriter<SomeEntity> writer, StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get("someStep")
                .<SomeEntity, SomeEntity>chunk(10)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }

    @Bean
    public Job someJob(JobBuilderFactory jobBuilderFactory, Step someStep) {
        return jobBuilderFactory.get("someJob")
                .incrementer(new RunIdIncrementer())
                .flow(someStep)
                .end()
                .build();
    }
}

위의 코드에서는 ItemReader, ItemProcessor, ItemWriter를 구현하여 데이터를 읽고 처리한 뒤 파일로 저장합니다. SomeEntity는 데이터베이스 테이블의 엔티티 클래스를 나타냅니다. 배치 작업의 각 단계는 Step으로 구성되며, JobStep들을 연결하여 전체 작업 흐름을 구성합니다.

실행하기

이제 스프링 부트 애플리케이션을 실행하여 배치 작업을 수행해보겠습니다. 아래 명령어를 사용하여 애플리케이션을 실행합니다.

mvn spring-boot:run

애플리케이션이 실행된 후, 스프링 배치가 자동으로 작업을 수행합니다. 읽어온 데이터를 가공한 뒤 파일에 저장하는 과정이 진행됩니다.

마무리

이번 포스트에서는 Maven을 사용하여 자바 스프링 배치를 구현하는 방법을 알아보았습니다. Maven으로 프로젝트를 생성하고, 스프링 배치 의존성을 추가하고, 배치 잡과 스텝을 구현하는 방법을 살펴보았습니다.

더 자세한 내용은 Spring Batch 문서를 참조하시기 바랍니다.