Devlog

[Database:MySQL] 정해진 시간에 작동하는 이벤트 스케줄러(Event Scheduler) 만들기 본문

Database/이론

[Database:MySQL] 정해진 시간에 작동하는 이벤트 스케줄러(Event Scheduler) 만들기

recoma 2024. 5. 18. 23:47

개요

회사에서 특정 기간 동안 어느 이벤트에 대한 발급 포인트를 일정 기간 동안 2배로 올리라는 업무를 받았습니다. 이벤트 발급 포인트는 데이터베이스에 저장이 되어 있기 때문에 시간에 맞춰 자동으로 DB에 있는 데이터를 업데이트 해야 했습니다. 복잡한 SQL문을 재사용할 수 있는 FUNCTION과  PROCEDURE, 그리고 특정한 상황에 맞춰 작동하는 TRIGGER의 개념까지 알고 있었지만, Batch Process 마냥 특정 시간에 맞춰서 데이터베이스를 조작하는 방법은 전혀 몰랐습니다.

 

서버가 Python 계열로 개발이 되어 있기 때문에 CeleryBeat라는 Batch Process Tool을 사용해서 특정 시각에 업데이트를 하는 것을 생각해 봤지만, 이게 적용이 되려면 서버를 다시 배포를 해야 했기 때문에 이 방법을 차선책으로 미루고 다른 방법을 고안하게 되었습니다. 이때 찾은 방법이 이벤트 스케줄러(Event Scheduler) 입니다.

 

Event Scheduler

이벤트 스케줄러는 Python 계열의 CeleryBeat 처럼 일정한 시간 또는 특정한 시간에 맞춰 SQL로직을 작동시키는 일종의 장치 입니다.

 

특정 시간에 맞춰 딱 한번만 작동시키기

market이라는 테이블이 있고 데이터는 아래와 같습니다.

id(int) name(varchar) price(int)
1 pencel 1000
2 eraser 2000

 

2024년 7월 1일에 연필(pencel)의 가격을 1000원 올린다고 했을 때, 아래와 같이 이벤트를 등록해 주면 됩니다.

create event increase_price_of_pencel
on schedule at '2024-07-01 00:00:00'
do
    begin
        update market set value = 1000 where name = 'pencel';
end;

 

 

특정 시간에 맞춰 딱 한번만 작동시키기

한번 말고 시간 간격에 맞춰 SQL문을 작동시킬 수도 있습니다. 이번에는 2024년 8월 1일 부터 연필(pencel)의 가격을 매일 00시 00분 00초 마다 1000원씩 인상(?) 하려고 합니다. 그렇다면 아래와 같이 이벤트를 등록하면 됩니다.

create event increase_price_of_pencel_per_a_day
on schedule
every 1 day
starts '2024-08-01 00:00:00'
do
    begin
        set @price = (select price from market where id = 1);
        update market set price = @price + 1000 where id = 1;
end;
반응형