• Scheduler (스케줄러)
    • 스케줄러는 정해진 시간이나 조건에 따라 작업을 자동으로 실행하도록 하는 예약시스템
      • 사용자의 직접적인 요청 없이도 백그라운드에서 독립적으로 동작
    • Spring Scheduling의 핵심 속성
      • fixedRate
        • 주기적인 작업 실행
        • @Scheduled(fixedRate = 1000) → 1초마다 작업 수행
      • Cron설정
        • 초, 분, 시, 일, 월, 요일을 사용하여 가장 유연하게 설정하는 방식
        • 예시
          • 0 30 3 * * *
            • 매일 3시 30분 0초에 실행
          • 0 0/30 * * *
            • 매일 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의 차이
    • 배치 작업은 일반적으로 작업이 시작되는 시점과 종료되는 시점이 명확하며, 실행에 상당한 시간이 소요
    • 대규모 데이터 처리 시 신뢰성을 높이기 위해 배치 작업은 오류 발생 시 재시도 및 오류 처리 메커니즘을 제공