Skip to content

[ 정산 배치 프로그램 ] > 스케줄러 적용 #19

@IMWoo94

Description

@IMWoo94

#14

정산 배치 프로그램

스케줄러 적용

개요

  • 정산 배치 프로그램의 경우 Application 을 수동으로 구동해야 하며, 동작 완료 시 한번의 실행 이후 작동이 종료가 된다.
  • 스케줄러를 지정하여 반복적으로 특정 시간대에 배치 프로그램을 구동할 수 있도록 하자.

Spring Scheduler

  • Spring 에서 제공되는 "Scheduled + EnableScheduling" 어노테이션 활용하여 스케줄러 적용

    • scheduler 가 작동 되면서 백그라운드 실행으로 지속적으로 Application 서버가 작동
  • Spring Scheduler Thread Pool Issue

    • @EnableScheduling 에 의해서 스케줄러는 Default 로 ThreadPoolTaskScheduler 를 사용하게 된다.
      이때, 별도의 설정을 주어지지 않으면 Thread Pool Size 는 1로 고정이 되어 있으므로, 스케줄러에 배정 된 Thread 는 최대 1개만 사용할 수 밖에 없는 것이다.
    • Thread Pool Size 를 변경하는 방법에는 2 가지 해결 방안
      • application.yaml 에 spring.task.scheduling.pool.size 옵션으로 변경이 가능하다.
      • SchedulingConfigurer 을 통해 설정을 재정의 함으로써 ThreadPoolTaskScheduler size 를 변경 할 수 있다.

Quartz Scheduling

  • Spring Scheduler 에서 생길 수 있는 이슈에 대해서 간단하고 더 실용적으로 사용할 수 있는 스케줄링 라이브러리 Quartz 도입
    • Spring Scheduler 문제점
      • [ 클러스터링 X ]
        Application Server 가 여러 대가 동작하고 있다면 지금 상태로는 Application Server 마다 동일한 배치가 작동
      • [ 작업 우선 순위 및 트리거 지정 X ]
        정산 데이터 생성 → 정산 배치 프로그램의 흐름으로 진행이 되어야 하기 때문에 배치를 돌리기 위해서는 앞의 작업이 완료가 된 후 배치 작업이 작동 할 수 있도록 순서나 트리거를 지정해야 한다.
  • Quartz 를 통해서 DB 기반의 클러스터링 활용 [ 옵션 활성화 필수 ]
    • application-quartz.yml 을 통해서 Quartz 옵션 설정
  • �JobChainingJobListener 를 통해 특정 작업 이후에 동작할 수 있도록 설정
    • A Job [ API 랜덤 이력 생성 배치 ] 작업 이후 B Job [ 정산 배치 작업 ] 동작 할 수 있도록 Chaining 작업

자세한 이야기 : Notion

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions