- Scheduler (스케줄러)
- 스케줄러는 정해진 시간이나 조건에 따라 작업을 자동으로 실행하도록 예약하는 시스템
- 주로 작고 가벼운 작업에 적합하며, 애플리케이션의 다른 작업에 큰 영향을 미치지 않는 경우 사용
- 예시) 매시간마다 데이터베이스에서 최신 데이터를 조회하여 로그 기록
- 작업절차
- @EnableScheduling 를 main프로그램에 추가
- @Scheduled 어노테이션 사용
- Cron설정
- 초 분 시간 일 월 요일
- 예시
- 0 30 3 * * *
- 0 0/30 * * *
- Batch
- 배치는 일련의 데이터 처리 작업을 자동으로 실행하는 프로세스
- 주로 대량의 데이터를 처리하는 데 사용되며, 사용자의 개입 없이 일정한 순서로 작업
- 예시)매일 밤 특정 시간에 데이터베이스에서 데이터를 추출, 변환, 로드 등
- 작업구성
- 배치 작업 구성
- Tasklet 방식
- 배치 작업의 단일 단계를 정의
- Job과 Step을 정의
- Job은 전체 배치 프로세스
- Step은 개별 단계를 나타냄
- Chunk 기반 방식
- 이 방식은 대량의 데이터를 효율적으로 처리할 때 사용
- 리더, 프로세서, 라이터 구현
- 데이터를 읽는 Reader정의(예: 데이터베이스 쿼리, 파일 읽기 등)
- 읽은 데이터에 대한 처리를 수행하는 Processor정의(예: 데이터 변환, 필터링 등)
- 처리된 데이터를 쓰거나 저장하는 Writer정의(예: 데이터베이스 쓰기, 파일 쓰기 등)
- 트리거 설정
- 배치 작업을 실행할 트리거를 설정(스케쥴러 등)
- 적절한 예외 처리 및 로깅 기능 구현을 통해 배치작업 정합성 확인
- 작업절차
- spring-boot-starter-batch 의존성 추가
- Config 정의 및 트리거 생성
- 배치 테이블 생성 필요
- org/springframework/batch/core/schema-mysql.sql의 schema-mysql.sql 실행
- Batch, Scheduler의 차이
- 배치 작업은 일반적으로 작업이 시작되는 시점과 종료되는 시점이 명확하며, 실행에 상당한 시간이 소요
- 대규모 데이터 처리 시 신뢰성을 높이기 위해 배치 작업은 오류 발생 시 재시도 및 오류 처리 메커니즘을 제공