개발이야기 014. talkit.bank 신규 스케쥴러 작성을 위한 테이블 설계
안녕하세요 가야태자 @talkit 입니다.
지난번 부터 고민하고 있는 스케쥴 문제를 해결 하려고 합니다.
우선 오늘은 테이블을 설계하고 해당 테이블을 생성 했습니다.
우선 스케쥴 테이블 입니다.
CREATE TABLE scheduler (
id INT AUTO_INCREMENT PRIMARY KEY,
year VARCHAR(4) NOT NULL COMMENT '년 (YYYY 또는 *)',
month VARCHAR(2) NOT NULL COMMENT '월 (MM 또는 *)',
day VARCHAR(2) NOT NULL COMMENT '일 (DD 또는 *)',
hour VARCHAR(2) NOT NULL COMMENT '시 (HH 또는 *)',
minute VARCHAR(2) NOT NULL COMMENT '분 (MM 또는 *)',
second VARCHAR(2) NOT NULL COMMENT '초 (SS 또는 *)',
weekday VARCHAR(1) NOT NULL COMMENT '요일 (0-6 또는 *)', -- 0: 일요일 ~ 6: 토요일
command TEXT NOT NULL COMMENT '실행할 프로그램 또는 명령어',
remark TEXT DEFAULT NULL COMMENT '비고 (추가 설명 등)',
is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '사용 여부 (1: 사용, 0: 미사용)',
is_deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '삭제 여부 (1: 삭제됨, 0: 정상)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DB 기반 스케줄러 테이블';
테이블 명이 바뀔 수는 있겠지만, 위와 같이 생성 하려고 합니다.
command에 있는 text를 임시로 .sh 파일을 생성하고 해당 .sh 파일을 실행 할것 인데 이부분이 보안상에 문제가 있는지 고려해봐야겠습니다.
CREATE TABLE scheduler_log (
id INT AUTO_INCREMENT PRIMARY KEY,
scheduler_id INT NOT NULL COMMENT '연결된 스케줄 ID',
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '실행 시작 시간',
ended_at TIMESTAMP NULL COMMENT '실행 종료 시간',
execution_time FLOAT GENERATED ALWAYS AS (TIMESTAMPDIFF(SECOND, started_at, ended_at)) STORED COMMENT '총 실행 시간(초)',
status ENUM('SUCCESS', 'FAIL') NOT NULL COMMENT '실행 상태',
log_message TEXT COMMENT '실행 결과 메시지',
FOREIGN KEY (scheduler_id) REFERENCES scheduler(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='스케줄 실행 기록 테이블';
스케쥴이 잘 수행 되었는지를 확인하기 위해서
로그 테이블도 위와 같이 생성하려고 합니다.
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
Upvoted! Thank you for supporting witness @jswit.