
데이터 삭제를 위해 php 명령어와 cron 자동 실행을 이용 해 왔습니다. DB의 경우 event_scheduler 기능을 써보지 않고 있다가 별도 서버에서 실행하는 것보다 DB 서버에서 처리하는 게 효율적이라서 쿼리를 준비하고 새벽 3시에 자동 삭제하도록 구현하였습니다.
주차장에 차량이 들어 올 때 기록되는 정보로 현장마다 보유 기간이 설정되어 있어 해당 기간이 지난 기록을 삭제하는 스케줄 입니다. 나간 차량의 경우 오래 보관할 필요가 없어 삭제하여 데이터 효율성을 높이기 위해서 입니다.
데이터를 먼저 백업하고 차가 들어올 때 기록되는 날짜가 년-월-일 또는 년.월.일 2가지로 입력되는 오류가 있어 특수 문자를 제거하고 실행하도록 하였고 날짜가 기록이 안되는 현장이 있어 무조건 삭제하면 문제가 생기므로 날짜가 있는 경우만 삭제하도록 하였습니다.
이와 같이 삭제의 경우도 예외 사항이 있는지 검토 하고 진행하는 게 중요합니다.
기록의 무게를 덜어내는 시간의 흐름
매일같이 쌓여가는 입출차 기록은 시스템의 성장을 증명하는 지표가 되기도 하지만, 때로는 서버가 감당해야 할 묵직한 부채가 되기도 합니다. 수백만 건의 데이터 속에서 필요한 정보를 찾아내는 속도가 조금씩 느려지는 것을 지켜보며, 이제는 스스로 비워내는 로직이 필요하다는 점에 생각이 머뭅니다. 사람이 일일이 개입하여 삭제 버튼을 누르는 대신, 정해진 시간이 되면 시스템이 조용히 불필요한 흔적을 정리하는 방식은 운영의 안정성을 위해 자연스러운 선택으로 보입니다.
혼재된 형식 사이에서 중심 잡기
오랜 시간 운영되어 온 시스템일수록 데이터의 모습은 제각각인 경우가 많습니다. 어떤 기록은 점으로 날짜를 구분하고, 어떤 기록은 하이픈으로 그어져 있습니다. 이러한 불일치는 단순한 비교만으로는 해결하기 어려운 지점을 만듭니다. 문자열을 치환하고 실제 날짜 객체로 변환하여 비교하는 과정은, 데이터의 외형에 현혹되지 않고 그 본질적인 시간의 선후 관계를 명확히 파악하기 위한 정밀한 조율 과정으로 해석됩니다. 비어있는 날짜 값들을 무리하게 건드리지 않고 보존하는 태도 역시, 데이터 손실이라는 위험을 피하려는 신중한 접근이라 할 수 있습니다.
스스로 움직이는 스케줄러의 설정
운영진이 깊게 잠든 새벽, 시스템이 홀로 깨어나 불필요한 기록을 정리하도록 만드는 과정은 간결한 명령어로 완성됩니다. MySQL 내부에 내장된 이벤트 스케줄러는 별도의 외부 스크립트 없이도 독립적인 생명력을 지닙니다. 현장마다 제각각인 보관 주기 설정을 존중하면서도, 초 단위와 일 단위가 혼용된 복잡한 기준을 하나의 논리로 엮어내는 작업은 시스템 전체의 호흡을 가볍게 만드는 결과로 이어지는 듯합니다.
SET GLOBAL event_scheduler = ON;
DROP EVENT IF EXISTS daily_parking_cleanup;
DELIMITER //
CREATE EVENT daily_parking_cleanup
ON SCHEDULE EVERY 1 DAY
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 27 HOUR)
ON COMPLETION PRESERVE
DO
BEGIN
DELETE
p
FROM
t_parking_inout p
JOIN cpgroup c ON p.ino = c.pcode
WHERE
c.clear_time > 0 AND
p.idate IS NOT NULL AND
p.idate != '' AND
CHAR_LENGTH(p.idate) >= 8 AND
STR_TO_DATE(REPLACE(p.idate, '.', '-'), '%Y-%m-%d')
<
DATE_SUB(NOW(), INTERVAL
(CASE WHEN c.clear_time >= 100 THEN c.clear_time ELSE c.clear_time * 86400 END)
SECOND);
END //
DELIMITER ;
이벤트 스케줄러 확인하기
SHOW EVENTS;
DB 이벤트 스케줄러 현황
| DB | 이벤트 이름 | 타임존 | 유형 | 간격 | 시작 예정일 | 상태 |
|---|---|---|---|---|---|---|
| parking | daily_parking_cleanup | SYSTEM | RECURRING | 1 DAY | 2026-02-07 03:00 | ENABLED |
* 위 스케줄은 매일 새벽 3시, clear_time 설정에 따라 노후 데이터를 자동으로 정리합니다.
비워냄으로써 얻게 되는 운영의 여유
수만 건의 노후 데이터가 정리된 후 남은 4천여 건의 기록은 현재 시스템이 가장 집중해야 할 핵심적인 정보들로 보입니다. 불필요한 부피를 덜어낸 데이터베이스는 여러 쿼리 요청에서 효율적으로 사용하게 되고, 관리자는 이제 수동 삭제의 번거로움에서 벗어나 더 가치 있는 로직을 고민할 시간을 벌게 되었습니다. 자동화라는 것은 결국 기계에게 일을 맡기는 것이 아니라, 사람이 더 사람 다운 고민을 할 수 있도록 여백을 만들어주는 과정이라는 점을 이번 데이터 정제 과정을 통해 만족 스러운 결과네요.