diff --git a/Server/Server.csproj b/Server/Server.csproj
index da6294f..e350cb3 100644
--- a/Server/Server.csproj
+++ b/Server/Server.csproj
@@ -21,6 +21,7 @@
+
diff --git a/Server/System/Scheduler.cs b/Server/System/Scheduler.cs
new file mode 100644
index 0000000..a6848e9
--- /dev/null
+++ b/Server/System/Scheduler.cs
@@ -0,0 +1,69 @@
+using Quartz;
+using Quartz.Impl;
+
+namespace Server.System
+{
+ public abstract class Scheduler : IJob
+ {
+
+ private string _cron;
+ public string cron { get { return _cron; } }
+
+ public Scheduler(string cronData)
+ {
+ _cron = cronData;
+ }
+
+ public abstract void Process();
+ public async Task Execute(IJobExecutionContext context)
+ {
+ Console.WriteLine("Job 실행됨: " + DateTime.Now);
+ Process();
+ await Task.CompletedTask;
+ }
+ }
+
+ public class schedule
+ {
+ private IScheduler scheduler;
+ private List schedules = new List();
+
+ public void Add(Scheduler scheduler)
+ {
+ schedules.Add(scheduler);
+ }
+
+ public async Task Start()
+ {
+ // 스케줄러 생성
+ ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
+ scheduler = await schedulerFactory.GetScheduler();
+
+ // 스케줄러 시작
+ await scheduler.Start();
+
+ // schedules에 있는 스케줄들을 스케줄러에 등록
+ foreach (var schedule in schedules)
+ {
+ IJobDetail job = JobBuilder.Create()
+ .WithIdentity(schedule.GetType().Name, "group1") // Scheduler 클래스의 이름을 사용하여 고유한 ID 생성
+ .Build();
+
+ ITrigger trigger = TriggerBuilder.Create()
+ .WithIdentity(schedule.GetType().Name + "Trigger", "group1")
+ .WithCronSchedule(schedule.cron) // 스케줄의 cron 표현식 사용
+ .Build();
+
+ await scheduler.ScheduleJob(job, trigger);
+ }
+
+ // 프로그램이 종료되지 않도록 대기
+ await Task.Delay(TimeSpan.FromDays(365));
+ }
+ public async Task Stop()
+ {
+ // 스케줄러 중지
+ await scheduler.Shutdown();
+ }
+ }
+}