본문 바로가기

RDBMS

Mysql 시간별 자동 실행

728x90

관리자 페이지를 만들었는데 사용자가 많지 않으 것 으로 판단 RDBMS를 그대로 사용하기로하고

리플레시 토큰 테이블을 만들었다.

 

그러나 여기서 문제는 로그아웃을 하면 리플레시 토큰이 모두 제거가 될텐데 사용자가 로그아웃이 아닌 창을 닫아서 제거가 되지 않는 리플레시 토큰이 남는다는 것!!

 

이를 해결 하기위해 처음에는 이벤트를 만들어야 하나 했지만

 

이런.. Mysql에 기능이 다 있다니....;;

리플레시토큰의 유효시간을 8시간으로 주고 정해진 시간마다 현재 시간과 유효시간을 비교!!

유효시간이 만료된 토큰은 자동 삭제되는 방법이다!!

 

고민하지마라!! 사람의 욕심은 끝이없기에 이미 원하는 기능들은 다있다!!

-- 리플레시 토큰 자정에 자동 삭제
SET GLOBAL event_scheduler = ON;

CREATE EVENT IF NOT EXISTS delete_expired_tokens_07
    ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE, '07:00:00')
    DO
DELETE FROM REFRESH_TOKENS WHERE expiry_date < NOW();


CREATE EVENT IF NOT EXISTS delete_expired_tokens_19
    ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE, '19:00:00')
    DO
DELETE FROM REFRESH_TOKENS WHERE expiry_date < NOW();

CREATE EVENT IF NOT EXISTS delete_expired_tokens_21
    ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE, '21:00:00')
    DO
DELETE FROM REFRESH_TOKENS WHERE expiry_date < NOW();

CREATE EVENT IF NOT EXISTS delete_expired_tokens_00
    ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE, '00:00:00')
    DO
DELETE FROM REFRESH_TOKENS WHERE expiry_date < NOW();

-- 조회
SELECT EVENT_NAME, EVENT_SCHEMA, EVENT_DEFINITION, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS
FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_NAME = 'delete_expired_tokens_07';