[Spring Batch] Spring Batch 간단 정리

2024. 12. 23. 16:26· Web Programming
목차
  1. 1. Spring Batch 기본 구성 요소
  2.  
  3. 2. Spring Batch 성능 최적화 기법
  4. 3. Scheduler를 활용한 통합

1. Spring Batch 기본 구성 요소

Spring Batch는 대규모 데이터 처리에 최적화된 프레임워크로 대량의 데이터를 처리하거나 활용하는데 널리 사용된다. 스프링 배치에서 사용되는 주된 구성 요소들을 큰 순서부터 차례로 나열하면 다음과 같다

  • Job: 하나 이상의 Step으로 구성된 배치 처리 단위
  • Step: 작업의 논리적 단위로, Tasklet이나 Chunk 기반 처리로 구현
  • Tasklet: 단순 반복 작업을 처리하기 위한 인터페이스
  • Chunk: 데이터를 일정 크기 단위로 나누어 처리하는 방식. 내부적으로는 크게 reader, processor, writer 형태로 처리.

tasklet vs chunk

  chunk tasklet
장점 대량 데이터를 효율적으로 처리 가능(읽기, 처리, 쓰기) 간단한 반복 작업에 적합함.
사용 사례 파일 로드, DB 마이그레이션, ETL 작업 단일 작업, 외부 API 호출 등

코드 예시

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Bean
    public Job exampleJob(JobBuilderFactory jobBuilderFactory, Step exampleStep) {
        return jobBuilderFactory.get("exampleJob")
                .start(exampleStep)
                .build();
    }

    @Bean
    public Step exampleStep(StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get("exampleStep")
                .<String, String>chunk(10)  // Chunk 단위 설정
                .reader(itemReader())
                .processor(itemProcessor())
                .writer(itemWriter())
                .build();
    }

    @Bean
    public ItemReader<String> itemReader() {
        return new SimpleItemReader();
    }

    @Bean
    public ItemProcessor<String, String> itemProcessor() {
        return new SimpleItemProcessor();
    }

    @Bean
    public ItemWriter<String> itemWriter() {
        return new SimpleItemWriter();
    }
}

 

2. Spring Batch 성능 최적화 기법

여러가지 방법이 있겠지만 크게 4가지가 있다.

  1. Multi-threaded Step
    1. 말 그대로 데이터를 병렬 처리해 성능을 향상시키는 방법.
    2. 다만 멀티 쓰레드 시 가지는 문제점에 대해서 고민(병목 현상, 데이터 정합성 등)
  2. Partitioning
    1. 데이터를 파티션으로 나누어서 병렬 처리하는 방식
    2. 멀티 쓰레드와 유사하지만 말 그대로 하나의 작업을 파트별로 나눠서 처리(1000가지가 있다면 100개씩)
  3. Parallel Step
    1. 만약 하나의 Step에서 순서대로 처리하지 않아도 되는 작업이라면 별도로 그 작업을 별도로 병렬로 나눠서 처리하는 방식.
    2. Step의 흐름을 하나 더 나눠서 처리하는 방식.
  4. Chunk 크기 조절
    1. Chunk 크기에 따른 데이터 크기와 메모리 사용량을 고려해 적절한 크기를 설정해 처리 효율을 극대화 하는 방식.

3. Scheduler를 활용한 통합

Spring Batch는 단일로 사용하기보다는 사용자의 이용량이 적은 새벽 시간대에 통계 작업을 위해 처리하는 경우가 많기 때문에 Spring Scheduler나 Quartz를 연동해서 많이 처리한다. 

다만 개발단계에서는 스프링이 실행되면 Job이 자동으로 실행되기 때문에 이를 application.yml이나 설정 파일에서 스프링 배치 실행을 끄고 작업할 필요는 있다. 만약 스프링 부트 환경이라면 application.properties에 다음 속성을 추가한다.

spring.batch.job.enabled=false

코드 예시

@Component
public class JobScheduler {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private Job exampleJob;

    @Scheduled(cron = "0 0 2 * * ?")
    public void runJob() throws Exception {
        JobParameters params = new JobParametersBuilder()
                .addLong("time", System.currentTimeMillis())
                .toJobParameters();
        jobLauncher.run(exampleJob, params);
    }
}

실무에서 Spring Batch를 사용할 경우가 뭐가 있을지 생각해보니, 일일 사용량과 같은 통계 데이터를 추출하거나, 특정 기간에 대한 정산 데이터를 구하기 위해서도 자주 사용하는 예시를 확인했다. 또한 개인적인 생각이지만 한 번 제대로 작성하고 나면 로직 자체가 변경되는 일이 많지 않을 것 같기 때문에 처음에 조금 정성들이는게 추후에 관리를 위해서도 좋을 것 같다.

저작자표시 (새창열림)

'Web Programming' 카테고리의 다른 글

[Web] 웹 인증 방식에 대한 이해  (1) 2024.09.03
  1. 1. Spring Batch 기본 구성 요소
  2.  
  3. 2. Spring Batch 성능 최적화 기법
  4. 3. Scheduler를 활용한 통합
'Web Programming' 카테고리의 다른 글
  • [Web] 웹 인증 방식에 대한 이해
solitude12
solitude12
solitude12
Digital Agora
solitude12
전체
오늘
어제
  • 분류 전체보기 (54)
    • Programming Language (0)
      • Java (0)
    • Web Programming (2)
      • Spring Boot (3)
    • Computer Science (10)
    • 항해99 (28)
      • 1주차 (6)
      • 2-4주차 (18)
      • 5-8주차 (3)
    • 코딩테스트 (11)
      • 알고리즘 (4)
      • 백준 (3)
      • 프로그래머스 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구현
  • 큐
  • spring boot
  • 자료구조
  • 개발자취업
  • 개발자취준
  • Stack
  • 코딩테스트
  • 자바
  • 프로그래머스
  • cs
  • 취업리부트코스
  • Java
  • 다익스트라
  • 그래프
  • 배열
  • 컴퓨터 구조
  • bfs
  • 개발자포트폴리오
  • Collection
  • dfs
  • spring
  • 개발자이력서
  • 컴퓨터구조
  • 취리코
  • 개발자부트캠프
  • 알고리즘
  • 스택
  • 백준
  • 항해99

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
글쓰기 / 관리자
solitude12
[Spring Batch] Spring Batch 간단 정리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.