PostgreSQL 'EPOCH'

김태훈·2023년 8월 3일
0

5분의 유효기간을 가지는 인증메일을 DB에 저장하고, 5분의 유효성을 체크하는 때에, 다음과 같은 SQL문을 작성했다

String sql = "SELECT email, code FROM member.auth_code WHERE email = ? AND NOT expiration AND date_part('minute', now() - due_date) < 5";

저렇게되면 now() - due_date의 적혀있는 그대로의 시간(분) 차이만 가지고 계산하므로, 예외케이스가 생긴다

예를들어 now()가 12시 59분이고, due_date가 1시 58분으로 유효시간 5분이 훨씬 지나도, 형식상으로는 59분 - 58분 = 1분이므로, 해당 SQL문에서 SELECT 되어진다.

따라서 이를 변형하기 위한 수단으로써 EPOCH가 존재하는데, 모든 날짜를 1970년부터 지난 초로 변형시켜서 계산하므로 정확한 계산이 가능하다.(유닉스 시간 -> Epoch Time) 이라고 한다.

따라서 다음과 같이 sql문을 바꿔보자

String sql = "SELECT email, code FROM member.auth_code WHERE email = ? AND NOT expiration AND extract('EPOCH' from (due_date - now())) between 0 and 300";
profile
기록하고, 공유합시다

0개의 댓글