diff --git a/app.js b/app.js
index f24843b3591afc52a33338e0914a846fdf4d951c..5b244850efc525f6b2393b0844c6fc9b07a9694e 100644
--- a/app.js
+++ b/app.js
@@ -7,6 +7,7 @@ const express = require('express');
 const session = require('express-session');
 const passport = require('./passport'); // 변경된 경로
 const flash = require('connect-flash');
+const { initScheduleCleaner } = require('./utils/scheduler');
 
 const app = express();
 
@@ -40,6 +41,8 @@ const scheduleRoutes = require('./routes/schedule');
 app.use('/api/schedule', scheduleRoutes);
 
 
+initScheduleCleaner();
+
 const PORT = process.env.PORT || 3000;
 
 app.get('/', (req, res) => {
diff --git a/utils/scheduler.js b/utils/scheduler.js
new file mode 100644
index 0000000000000000000000000000000000000000..e881e899d6906bc9dd8d8f822b6fe3a84e2d8660
--- /dev/null
+++ b/utils/scheduler.js
@@ -0,0 +1,19 @@
+const cron = require('node-cron');
+const scheduleService = require('../services/scheduleService');
+
+// 매주 월요일 자정에 유동 스케줄 삭제하기
+const initScheduleCleaner = () => {
+    cron.schedule('0 0 * * 1', async () => {
+        try {
+            await scheduleService.cleanExpiredSchedules();
+        } catch (error) {
+            console.error('Failed to clean expired schedules:', error);
+        }
+    }, {
+        timezone: "Asia/Seoul" 
+    });
+};
+
+module.exports = {
+    initScheduleCleaner
+};
\ No newline at end of file