프로그래밍/C#

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

큐레이트 2025. 3. 24. 14:59

[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는 매우 유용하게 사용될 수 있습니다.

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

반응형