[C#] Quartz.NET 스케줄링 작업 자동화 – 기본 사용법부터 실무 적용까지

2025. 3. 24. 14:59·프로그래밍/C#

[C# Quartz.NET] 스케줄링 작업 자동화 – 기본 사용법부터 실무 적용까지

C#에서 반복 작업이나 예약된 작업을 실행하려면 Quartz.NET을 사용하는 것이 가장 일반적입니다.

Quartz는 정해진 시간마다 특정 작업을 실행하거나, 복잡한 크론 표현식(Cron Expression)을 설정하여 정교한 스케줄링을 구현할 수 있는 라이브러리입니다.


✅ Quartz.NET 설치하기


// NuGet으로 설치
Install-Package Quartz

✅ 1. 기본 Job 클래스 만들기


// IJob을 상속한 작업 클래스
public class HelloJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        Console.WriteLine($"[{DateTime.Now}] Hello Quartz!");
        return Task.CompletedTask;
    }
}

Quartz는 실행할 작업을 IJob 인터페이스를 통해 정의합니다.


✅ 2. Scheduler 설정 및 Job 등록


IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start();

// Job 생성
IJobDetail job = JobBuilder.Create<HelloJob>()
    .WithIdentity("helloJob", "group1")
    .Build();

// 트리거 설정 (5초마다 실행)
ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("helloTrigger", "group1")
    .StartNow()
    .WithSimpleSchedule(x => x
        .WithIntervalInSeconds(5)
        .RepeatForever())
    .Build();

// 스케줄러에 Job과 Trigger 등록
await scheduler.ScheduleJob(job, trigger);

→ 위 예제는 프로그램이 실행되자마자 5초 간격으로 HelloJob을 반복 실행하는 구조입니다.


✅ 3. Cron 표현식으로 특정 시간에 실행


// 매일 오전 9시에 실행
ITrigger cronTrigger = TriggerBuilder.Create()
    .WithIdentity("dailyTrigger", "group1")
    .WithCronSchedule("0 0 9 ? * *") // 초 분 시 일 월 요일
    .Build();

Cron 표현식을 사용하면 매주 특정 요일, 특정 시간에만 실행되도록 정밀하게 제어할 수 있습니다.


✅ 4. 실무 적용 팁

  • 로그 파일 정리, 백업 작업, 메일 전송 등에 활용 가능
  • JobDataMap을 통해 Job에 매개변수 전달 가능
  • 윈도우 서비스로 등록하면 항상 백그라운드에서 작동

// JobDataMap 사용 예시
IJobDetail job = JobBuilder.Create<EmailJob>()
    .UsingJobData("recipient", "admin@example.com")
    .Build();

✅ 5. ASP.NET Core에서 Quartz 사용하기

.NET Core에서는 Quartz.Extensions.Hosting 패키지를 사용하면 DI 기반으로 Quartz를 쉽게 등록하고 관리할 수 있습니다.


// 패키지 설치
Install-Package Quartz.Extensions.Hosting

// Program.cs
builder.Services.AddQuartz(q =>
{
    q.UseMicrosoftDependencyInjectionJobFactory();

    var jobKey = new JobKey("HelloJob");
    q.AddJob<HelloJob>(opts => opts.WithIdentity(jobKey));
    q.AddTrigger(opts => opts
        .ForJob(jobKey)
        .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()));
});

builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

📌 마무리

Quartz.NET은 단순 반복 작업부터 복잡한 일정 작업까지 다양한 스케줄링을 안정적으로 처리할 수 있는 강력한 도구입니다.
C# 실무에서 백그라운드 작업 자동화, 주기적 로직 실행, 예약 시스템 등을 구성할 때 Quartz는 매우 유용하게 사용될 수 있습니다.

도움이 되셨다면 공감 / 댓글 부탁드립니다 😊

반응형
저작자표시 비영리 (새창열림)

'프로그래밍 > C#' 카테고리의 다른 글

C# 단위 테스트를 위한 NuGet 패키지 추천 – 테스트 코드 품질 높이는 필수 도구 6가지  (0) 2025.04.02
NuGet 패키지 추천 – C# 개발 생산성 극대화하는 라이브러리 7선  (1) 2025.03.31
[DevExpress] SplashScreenManager로 로딩 화면 만들기 – GridView 데이터 바인딩 UX 개선  (0) 2025.03.24
[C#] Devexpress GridControl DataSource 지연 로딩으로 속도 최적화하기  (0) 2025.03.24
[C#] DevExpress WinForms GridView 속도 개선 팁 – 렌더링 최적화 & 클릭 지연 해결  (0) 2025.03.24
'프로그래밍/C#' 카테고리의 다른 글
  • C# 단위 테스트를 위한 NuGet 패키지 추천 – 테스트 코드 품질 높이는 필수 도구 6가지
  • NuGet 패키지 추천 – C# 개발 생산성 극대화하는 라이브러리 7선
  • [DevExpress] SplashScreenManager로 로딩 화면 만들기 – GridView 데이터 바인딩 UX 개선
  • [C#] Devexpress GridControl DataSource 지연 로딩으로 속도 최적화하기
큐레이트
큐레이트
저의 일상을 기록하는 블로그입니다.
  • 큐레이트
    큐레이트의 기록
    큐레이트
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • 국내여행 (37)
        • 애견여행 (33)
        • 맛집여행 (2)
      • 프로그래밍 (82)
        • C# (24)
        • Python (24)
        • Flutter (5)
        • .NET (4)
        • ASP (7)
        • Html (5)
        • Tomcat (2)
        • typescript (3)
        • etc (8)
      • 일상생활 (71)
        • 다이어트일지 (70)
        • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 복이랑스마트스토어
    • 복이랑블로그
  • 공지사항

    • 블로그 소개
  • 인기 글

  • 태그

    오블완
    제주도여행
    다이어트일지
    식단
    다이어트 일지
    일상생활
    애견여행
    애견동반여행
    자동화
    체중기록
    C#
    제주도
    FastAPI
    제주도애견동반여행
    HTML
    pt
    iis
    DevExpress
    헬스
    운동일지
    티스토리챌린지
    식단관리
    애견동반
    국내여행
    Python
    Flutter
    다이어트
    파이썬
    자동매매
    오운완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
큐레이트
[C#] Quartz.NET 스케줄링 작업 자동화 – 기본 사용법부터 실무 적용까지
상단으로

티스토리툴바