□ Spring Batch(스프링 배치)
복잡한 배치 프로세스를 개발할 수 있도록 설계 되었으며, 대량 데이터 처리를 위한 배치 처리 프레임워크 입니다.
1. Spring Batch 레이어

- Application Layer: 배치 작업의 구성과 실행을 담당하는 최상위 계층입니다.
- Batch Core Layer: Job의 실행과 제어를 담당하는 핵심 실행 계층입니다.
- Batch Infrastructure Layer: 실제 배치 처리를 위한 Reader, Writer, 서비스 기능을 제공하는 계층입니다.
2. Spring Batch 컴포넌트

- JobLauncher: Job을 실행하는 인터페이스입니다.
- Job: 배치 처리의 전체 프로세스를 정의합니다.
- Step: Job 내부의 실제 처리 단계입니다. 하나의 Job은 여러 Step으로 구성될 수 있습니다.
- ItemReader, ItemProcessor, ItemWriter: 데이터를 읽고, 처리하고, 쓰는 역할을 담당합니다.
- JobRepository: 모든 배치 처리 정보를 저장하고 관리합니다.
3. Spring Batch 특징
- 목적: 대량 데이터를 처리하기 위한 배치 처리
- 작업단위: Job, Step 구조 (Read → Process → Write)
- 트랜잭션 관리: 트랜잭션 지원 및 롤백 기능 제공
- 대량 데이터 처리: 수백만 건 이상의 데이터도 효율적으로 처리
- 스레드 관리: 멀티스레드 및 병렬 처리 지원
- 재시작/재처리: Job 재시작 및 실패한 단계의 재처리 지원
□ Spring Scheduler(스프링 스케줄러)
Spring 프레임워크가 제공하는 스케줄링 기능으로, 지정된 시간이나 주기적인 간격으로 작업을 실행하는 도구입니다.
1. Spring Scheduler 종류
- @Scheduled (Simple Scheduled Tasks): Spring 프레임워크가 기본적으로 제공하는 어노테이션
- TaskScheduler: Spring의 인터페이스, 동적 주기변경 및 멀티스레드 환경에서 사용
- 라이브러리를 주입받아서 사용하고, 복잡하고 정교한 스케줄링 요구사항 처리가능.
- Job 과 Trigger 정의 및 실행시간 제어
- 분산 환경 지원 및 Job 상태관리를 위한 데이터베이스 연동 가능
2. @Scheduled 어노테이션 옵션
- cron: “초, 분, 시, 일, 월, 요일” 로 이루어져 있습니다.
- * : 와일드 카드(모든 값에 대해 일치)
- , : (0,15,30) → 0, 15, 30분 실행(여러 값을 지정)
- - : (10-12) → 10시, 11시, 12시에 실행(범위를 지정)
- / : (0/5) → 0초부터 시작해 5초 간격으로 실행(시작값과 간격을 지정)
- ? : 특정 필드를 지정하지 않음, 보통 일, 요일에 사용
예시) @Scheduled(cron= “0/5 * * * * ?”) → 5초 주기
- fixedDelay: 이전 메소드 실행이 종료 후 지정된 시간(ms)이 지난 후 실행됩니다.
예시) @Scheduled(fixedDelay = 10 * 1000)
- fixedRate: 이전 메소드 시작 시간으로부터 지정된 시간(ms) 마다 실행됩니다.
- 이전 실행이 완료되었는지 여부와 관계없이 일정한 간격으로 실행됨을 의미합니다.
예시) @Scheduled(fixedRate = 10 * 1000) → 10초 주기
3. Spring Scheduler 특징
- 목적: 주기적 작업 실행 (간단한 작업)
- 작업단위: 단일 작업 (메소드)
- 트랜잭션 관리: 트랜잭션 관리 없음
- 대량 데이터 처리: 대용량 데이터 처리에 적합하지 않음
- 스레드 관리: 단일 스레드(TaskExecutor로 확장 가능)
- 재시작/ 재처리: 지원하지 않음
□ 언제 사용해야 할까?
1. Spring Batch 사용 예시
- 대량의 데이터를 데이터베이스에서 읽어 파일에 저장.
- 파일에서 데이터를 읽어 가공 후 데이터베이스에 저장.
2. Spring Scheduler 사용 예시
- 특정 시간에 정확하게 실행해야 하는 작업 (예: 매일 자정 데이터 백업)
- 복잡한 주기로 실행되어야 하는 작업 (예: 평일 오전 9시부터 오후 6시까지 매시간)
- 특정 요일이나 날짜에만 실행되어야 하는 작업 (예: 매주 월요일 오전 8시)
□ 성능 차이
구분 | 작업 복잡도 | 확장성 |
Spring Scheduler | 간단한 주기적 작업 (이메일 발송, 로그 기록)에서 더 빠르게 수행 | 확장성이 부족하고 스레드 관리가 제한적 |
Spring Batch | 데이터 읽기, 변환, 쓰기 등 복잡한 작업을 수행하며, 성능 최적화 | 스케일 아웃 및 병렬 처리를 통해 성능 확장에 용이 |
□ 결론
- 간단한 주기 작업 : Spring Scheduler
- 대량 데이터 배치 처리 : Spring Batch
⭐발표자 : 남상엽님
□ Spring Batch(스프링 배치)
복잡한 배치 프로세스를 개발할 수 있도록 설계 되었으며, 대량 데이터 처리를 위한 배치 처리 프레임워크 입니다.
1. Spring Batch 레이어

- Application Layer: 배치 작업의 구성과 실행을 담당하는 최상위 계층입니다.
- Batch Core Layer: Job의 실행과 제어를 담당하는 핵심 실행 계층입니다.
- Batch Infrastructure Layer: 실제 배치 처리를 위한 Reader, Writer, 서비스 기능을 제공하는 계층입니다.
2. Spring Batch 컴포넌트
- JobLauncher: Job을 실행하는 인터페이스입니다.
- Job: 배치 처리의 전체 프로세스를 정의합니다.
- Step: Job 내부의 실제 처리 단계입니다. 하나의 Job은 여러 Step으로 구성될 수 있습니다.
- ItemReader, ItemProcessor, ItemWriter: 데이터를 읽고, 처리하고, 쓰는 역할을 담당합니다.
- JobRepository: 모든 배치 처리 정보를 저장하고 관리합니다.
3. Spring Batch 특징
□ Spring Scheduler(스프링 스케줄러)
Spring 프레임워크가 제공하는 스케줄링 기능으로, 지정된 시간이나 주기적인 간격으로 작업을 실행하는 도구입니다.
1. Spring Scheduler 종류
- @Scheduled (Simple Scheduled Tasks): Spring 프레임워크가 기본적으로 제공하는 어노테이션
- TaskScheduler: Spring의 인터페이스, 동적 주기변경 및 멀티스레드 환경에서 사용
- 라이브러리를 주입받아서 사용하고, 복잡하고 정교한 스케줄링 요구사항 처리가능.
- Job 과 Trigger 정의 및 실행시간 제어
- 분산 환경 지원 및 Job 상태관리를 위한 데이터베이스 연동 가능
2. @Scheduled 어노테이션 옵션
- * : 와일드 카드(모든 값에 대해 일치)
- , : (0,15,30) → 0, 15, 30분 실행(여러 값을 지정)
- - : (10-12) → 10시, 11시, 12시에 실행(범위를 지정)
- / : (0/5) → 0초부터 시작해 5초 간격으로 실행(시작값과 간격을 지정)
- ? : 특정 필드를 지정하지 않음, 보통 일, 요일에 사용
예시) @Scheduled(cron= “0/5 * * * * ?”) → 5초 주기
예시) @Scheduled(fixedDelay = 10 * 1000)
- 이전 실행이 완료되었는지 여부와 관계없이 일정한 간격으로 실행됨을 의미합니다.
예시) @Scheduled(fixedRate = 10 * 1000) → 10초 주기
3. Spring Scheduler 특징
□ 언제 사용해야 할까?
1. Spring Batch 사용 예시
2. Spring Scheduler 사용 예시
□ 성능 차이
구분
작업 복잡도
확장성
Spring Scheduler
간단한 주기적 작업 (이메일 발송, 로그 기록)에서 더 빠르게 수행
확장성이 부족하고 스레드 관리가 제한적
Spring Batch
데이터 읽기, 변환, 쓰기 등 복잡한 작업을 수행하며, 성능 최적화
스케일 아웃 및 병렬 처리를 통해 성능 확장에 용이
□ 결론
- 간단한 주기 작업 : Spring Scheduler
- 대량 데이터 배치 처리 : Spring Batch
⭐발표자 : 남상엽님