- Scheduler (스케줄러)
- 스케줄러는 정해진 시간이나 조건에 따라 작업을 자동으로 실행하도록 하는 예약시스템
- 사용자의 직접적인 요청 없이도 백그라운드에서 독립적으로 동작
- Spring Scheduling의 핵심 속성
- fixedRate
- 주기적인 작업 실행
- @Scheduled(fixedRate = 1000) → 1초마다 작업 수행
- Cron설정
- 초, 분, 시, 일, 월, 요일을 사용하여 가장 유연하게 설정하는 방식
- 예시
- 0 30 3 * * *
- 0 0/30 * * *
- 작업절차
- @EnableScheduling 를 main프로그램에 추가
- 스케쥴러로 사용하고자 하는 클래스 상단에 @Scheduled 어노테이션 사용
- 멀티서버 환경에서의 스케쥴러 주의 사항
- 스케쥴러 서버를 2대 이상 운영하게 되면, 중복 스케쥴이 돌아갈 여지가 있으므로, redis등의 솔루션을 사용하여 스케쥴 제어
- 해결책
- Redis를 이용해 락(lock)을 걸어 한 번에 하나의 서버만 실행되도록 설정
- Batch
- 배치는 대량의 데이터를 일정한 규칙에 따라 자동으로 처리하는 프로세스
- 사용자 요청 없이 정해진 시점 또는 트리거에 의해 실행
- 주 사용 목적은 정합성 유지, 대량 데이터 처리, 반복 작업 자동화
- 예시
- 매일 밤 특정 시간에 데이터베이스에서 데이터를 추출, 변환, 로드 등
- 매일 회계 데이터 정산 후 집계
- 작업구성
- 트리거 설정
- 배치 작업을 실행할 트리거를 설정(스케쥴러 등)
- 배치 작업 구성
- Tasklet 방식
- 배치 작업의 단일 단계를 정의
- Job과 Step을 정의
- Job은 전체 배치 프로세스
- Step은 개별 단계를 나타냄
- Chunk 기반 방식
- 이 방식은 대량의 데이터를 효율적으로 처리할 때 사용
- 리더, 프로세서, 라이터 구현
- 데이터를 읽는 Reader정의(예: 데이터베이스 쿼리, 파일 읽기 등)
- 읽은 데이터에 대한 처리를 수행하는 Processor정의(예: 데이터 변환, 필터링 등)
- 처리된 데이터를 쓰거나 저장하는 Writer정의(예: 데이터베이스 쓰기, 파일 쓰기 등)
- 적절한 예외 처리 및 로깅 기능 구현을 통해 배치작업 정합성 확인
- 작업절차
- spring-boot-starter-batch 의존성 추가
- Config 정의 및 트리거 생성
- 배치 테이블 생성 필요
- org/springframework/batch/core/schema-mariadb.sql의 schema-mariadb.sql 실행
- Batch, Scheduler의 차이
- 배치 작업은 일반적으로 작업이 시작되는 시점과 종료되는 시점이 명확하며, 실행에 상당한 시간이 소요
- 대규모 데이터 처리 시 신뢰성을 높이기 위해 배치 작업은 오류 발생 시 재시도 및 오류 처리 메커니즘을 제공