MySQL의 TIMESTAMP/DATETIME 자료형과 CURRENT_TIMESTAMP 모듈을 이용하면 손쉽게 레코드의 삽입 시간과 수정 시간을 파일 시스템처럼 관리할 수 있다.

가령 게시판을 만든다고 해보자. 게시판에 유저들이 글을 쓰는데, 등록시간과 수정시간을 기록하는 건 굉장히 중요한 서비스이다.

이 때, 당연히 사용자에게 등록시간과 수정시간을 하나하나 입력받을 수는 없는 노릇이다.

혹은 DB 에 쿼리를 날릴 때 웹에서 직접 현재 시간을 기록하게 해주어도 괜찮지만, DB 단에서 처리할 수 있는 다음과 같은 방법도 있다.



CREATE TABLE blog_text (
`text_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`contents` varchar(255) NOT NULL,
`reg_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
`mod_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(text_id)
);


 CURRENT_TIMESTAMP는 데이터 접근 시의 당시 현재 시간을 나타내는 모듈로, 위처럼 테이블을 생성하면 기본으로 레코드는 생성시 현재 시간을 갖게 된다.(미입력시의 초기값) 

그리고 ON UPDATE 키워드에 의해 갱신 시마다 Updated 칼럼의 Value는 해당 시점의 현재 시간으로 Update 된다.


(1) Insert into blog_text(name, contents) values(‘tester’, ‘안녕하세요. Korean Developers’);

1 | "tester" | "안녕하세요. Korean Developers" | 2018-08-27 09:25:58 | 2018-08-27 09:25:58


(2) Update blog_text set `contents` = "안녕하세요." where text_id = 1;

1 | "jinsp" | "안녕하세요." | 2018-08-27 09:25:58 | 2018-08-27 09:27:51


위와 같이 DB레벨에서 좀 더 쉽고 명확하게 등록시간 / 수정시간을 관리하는 것이 가능하다.

응용하면 다양한 방법으로 Tricky 하게 사용할 수도 있다.

물론 실무에서는 배치 작업이나 자동화된 로그성 데이터들이 아닌 관리해야하는 데이터의 경우 API 단에서 처리하는 경우가 더 많다.


+ Recent posts