CRONTAB 과 배치(Batch,SpringBatch)
2025. 10. 16. 22:18

1️⃣ Crontab (리눅스/유닉스 스케줄러)

정의:

  • 리눅스/유닉스에서 정해진 시간, 주기마다 명령어나 스크립트를 자동 실행하는 기능.
  • 백그라운드에서 주기적 작업을 수행할 때 사용.

기본 명령어:

crontab -e # 크론탭 편집 crontab -l # 크론탭 목록 확인 crontab -r # 크론탭 삭제

크론탭 문법:

* * * * * command_to_run
- - - - -
| | | | |
| | | | +---- 요일 (0-7, 0=일요일, 7=일요일)
| | | +------ 월 (1-12)
| | +-------- 일 (1-31)
| +---------- 시간 (0-23)
+------------ 분 (0-59)

예시:

# 매일 새벽 3시 실행
0 3 * * * /home/user/backup.sh

# 매 5분마다 실행
*/5 * * * * /home/user/check.sh

# 매주 월요일 오전 9시 실행
0 9 * * 1 /home/user/report.sh

2️⃣ 일반 배치(Batch) 처리

정의:

  • 대량 데이터 또는 반복 작업을 일괄 처리하는 방식.
  • 사용 예: 파일 처리, DB 데이터 갱신, 보고서 생성 등.

구성:

  1. 입력 데이터(Read)
  2. 처리 로직(Process)
  3. 출력 데이터(Write)

예시 (Java로 간단한 배치):

public class SimpleBatch {
    public static void main(String[] args) {
        List<String> data = Arrays.asList("A", "B", "C");

        for (String item : data) {
            String processed = item.toLowerCase();
            System.out.println("Processed: " + processed);
        }
    }
}
  • 스크립트 배치: shell, python 등으로도 가능.
  • 정기 실행: 위에서 설명한 crontab으로 실행 가능.

3️⃣ Spring Batch

정의:

  • Spring에서 제공하는 배치 처리 프레임워크.
  • 대용량 데이터 처리, 트랜잭션 관리, 잡 재시도, 로그 관리, 스케줄링까지 지원.
  • Job → Step → Chunk 단위 처리 구조를 가짐.

Spring Batch 구조:

Job
 └─ Step
     └─ Chunk (읽기 → 처리 → 쓰기)

주요 컴포넌트:

  • Job: 배치 작업 전체
  • Step: Job 내 실행 단위
  • ItemReader: 데이터 읽기
  • ItemProcessor: 처리 로직
  • ItemWriter: 데이터 쓰기

예시 (Spring Batch 간단 설정):

 
@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    @Autowired
    private StepBuilderFactory stepBuilderFactory;

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

    @Bean
    public Step sampleStep() {
        return stepBuilderFactory.get("sampleStep")
                .<String, String>chunk(3)
                .reader(() -> "data")
                .processor(item -> item.toUpperCase())
                .writer(items -> items.forEach(System.out::println))
                .build();
    }
}

실행 방법:

  • Spring Boot 앱 실행 시 Job 자동 실행 가능.
  • 스케줄링 추가: @EnableScheduling + @Scheduled 사용.

💡 정리 비교

구분 특징 장점 단점
Crontab OS 레벨, 정기 실행 단순, OS 기본 로직 관리 어려움
일반 배치 수동/스크립트 기반 유연, 간단 트랜잭션/재시도 기능 없음
Spring Batch 프레임워크 기반 트랜잭션, Chunk, Job 관리 가능, 재시도, 병렬처리 러닝커

 

NellKiM
NellKiM