Search

์ด๋ฒคํŠธ

์ด๋ฒคํŠธ

ํŠน์ • ์‹œ๊ฐ„์— ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์˜ˆ์•ฝ๋œ ์ž‘์—…(scheduled task)์ž…๋‹ˆ๋‹ค.
์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ์ •๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

โ€ข
์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ
โ€ข
์ผํšŒ์„ฑ ๋˜๋Š” ๋ฐ˜๋ณต ์‹คํ–‰ ๊ฐ€๋Šฅ
โ€ข
์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ๋™์ž‘
โ€ข
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ์ง€๋ณด์ˆ˜ ์ž๋™ํ™”์— ์œ ์šฉ

์ฝ”๋“œ ์˜ˆ์‹œ

1. ์ด๋ฒคํŠธ ์ƒ์„ฑ

-- ์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ ํ™œ์„ฑํ™” SET GLOBAL event_scheduler = ON; -- ๋งค์ผ ์ž์ •์— ์‹คํ–‰๋˜๋Š” ์ด๋ฒคํŠธ ์ƒ์„ฑ CREATE EVENT daily_cleanup ON SCHEDULE EVERY 1 DAY STARTS '2025-05-02 00:00:00' DO DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
SQL
๋ณต์‚ฌ

2. ์ด๋ฒคํŠธ ์ˆ˜์ •

-- ์ด๋ฒคํŠธ ์ˆ˜์ • ALTER EVENT daily_cleanup ON SCHEDULE EVERY 2 DAY DO DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 60 DAY);
SQL
๋ณต์‚ฌ

3. ์ด๋ฒคํŠธ ์‚ญ์ œ

-- ์ด๋ฒคํŠธ ์‚ญ์ œ DROP EVENT IF EXISTS daily_cleanup; -- ์ด๋ฒคํŠธ ๋น„ํ™œ์„ฑํ™” ALTER EVENT daily_cleanup DISABLE;
SQL
๋ณต์‚ฌ
์ฐธ๊ณ : ์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
SHOW VARIABLES LIKE 'event_scheduler';
SQL
๋ณต์‚ฌ

์‹ค์ œ ์˜ˆ์‹œ (employees ์Šคํ‚ค๋งˆ)

employees ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์‹ค์šฉ์ ์ธ ์ด๋ฒคํŠธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

1. ๊ธ‰์—ฌ ์ด๋ ฅ ๋ฐฑ์—…

CREATE EVENT backup_salaries ON SCHEDULE EVERY 1 MONTH STARTS '2025-06-01 00:00:00' DO INSERT INTO salary_backup SELECT * FROM salaries WHERE from_date > DATE_SUB(NOW(), INTERVAL 1 MONTH);
SQL
๋ณต์‚ฌ

2. ํ‡ด์‚ฌํ•œ ์ง์› ๋ฐ์ดํ„ฐ ์•„์นด์ด๋ธŒ

CREATE EVENT archive_ex_employees ON SCHEDULE EVERY 6 MONTH STARTS '2025-06-01 00:00:00' DO BEGIN INSERT INTO archived_employees SELECT * FROM employees e WHERE e.emp_no IN ( SELECT emp_no FROM dept_emp WHERE to_date < NOW() ); DELETE FROM employees WHERE emp_no IN ( SELECT emp_no FROM archived_employees ); END;
SQL
๋ณต์‚ฌ

3. ๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ ํ†ต๊ณ„ ์—…๋ฐ์ดํŠธ

CREATE EVENT update_dept_salary_stats ON SCHEDULE EVERY 1 WEEK STARTS '2025-05-08 00:00:00' DO INSERT INTO dept_salary_stats SELECT d.dept_no, d.dept_name, AVG(s.salary) as avg_salary, NOW() as calculated_at FROM departments d JOIN dept_emp de ON d.dept_no = de.dept_no JOIN salaries s ON de.emp_no = s.emp_no WHERE s.to_date > NOW() GROUP BY d.dept_no, d.dept_name;
SQL
๋ณต์‚ฌ
์œ„์˜ ์˜ˆ์‹œ๋“ค์€ ์‹ค์ œ ์—…๋ฌด ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ๋“ค์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์›”๋ณ„ ๊ธ‰์—ฌ ๋ฐ์ดํ„ฐ ๋ฐฑ์—…, ํ‡ด์‚ฌ์ž ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์ฃผ๊ฐ„ ํ†ต๊ณ„ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.