배치 작업 개발
스프링 배치를 사용하여 배치 작업을 개발하기 위해서는 Job 설정과 구성, Step 정의와 처리 로직 구현, 그리고 Reader, Processor, Writer의 역할과 사용 방법을 이해해야 한다!!
1. Job 설정과 구성
Job은 스프링 배치의 최상위 개념으로, 배치 작업의 실행 단위.
Job은 JobBuilderFactory를 사용하여 생성하고, JobBuilder를 통해 Job의 속성을 설정할 수 있음.
JobBuilder를 사용하여 Job의 이름, 실행 시점, 파라미터 등을 설정하면 됨!
2. Step 정의와 처리 로직 구현
Step은 Job을 구성하는 작업 단위.
각 Step은 Reader, Processor, Writer 등의 구성 요소를 포함하여 작업의 세부 처리를 정의한다.
StepBuilderFactory를 사용하여 Step을 생성하고, StepBuilder를 통해 Step의 속성을 설정할 수 있음.
StepBuilder를 사용하여 Step의 이름, 트랜잭션 처리 방식, 실패 시 처리 등을 설정할 수 있음.
3. Reader, Processor, Writer의 역할과 사용 방법
Reader: 데이터를 읽어오는 역할.
스프링 배치는 다양한 Reader를 제공하고, 데이터 소스에서 데이터를 읽어오는 기능을 구현할 수 있음.
예를 들어, JdbcCursorItemReader, JpaPagingItemReader, FlatFileItemReader 등을 사용할 수 있음.
내가 최근 배치 개발에서 사용한 ItemReader는 FlatFileItemReader 였음.
- 얘는 텍스트 파일의 데이터를 한 줄씩 읽어와서 처리함.
- 텍스트 파일의 데이터를 구분할 구분자(delimiter)를 설정할 수 있습니다. 기본적으로 쉼표(,)나 탭(tab)과 같은 구분자를 사용할 수 있음
- 각 필드를 어떤 도메인 객체의 속성과 매핑할지 설정할 수 있음
- 데이터 처리 중 에러가 발생하면, FlatFileItemReader는 기본적으로 해당 레코드를 스킵하고 다음 레코드를 하는데, 이러한 Skip 설정을 개발자가 조정할 수 있음 (더 세세한 설정도 코드로 짤 수 있음. 무슨 예외를 던지면 어디로 스킵할건지 등등)
위의 이미지의 설명에 Chunk 방식이라고 썼는데, 이건 다음에 설명할 예정.
Processor: 읽어온 데이터를 가공하거나 필터링하는 역할.
개발자는 Processor를 구현하여 데이터를 가공하는 비즈니스 로직을 작성할 수 있음. 가공된 데이터는 다음 단계로 전달됨.
Writer: 가공된 데이터를 저장하거나 외부 시스템과 연동하는 역할.
스프링 배치는 다양한 Writer를 제공하고, 개발자는 Writer를 선택하여 데이터를 저장하거나 외부 시스템과의 연동을 처리할 수 있음.
예를 들어, JdbcBatchItemWriter, JpaItemWriter, FlatFileItemWriter 등을 사용할 수 있음.
4. 결론
이러한 개념과 구성요소를 사용하여 배치 작업을 개발할 수 있음. Job 설정과 구성, Step 정의와 처리 로직 구현, 그리고 Reader, Processor, Writer의 역할과 사용 방법을 이해하면 스프링 배치를 통해 다양한 배치 작업을 개발할 수 있을 것 !