UTC 시간을 쓰자

Sinf·2022년 4월 19일
0

고민의 흔적

목록 보기
17/38
post-thumbnail

DB에 시간 저장

DB에 시간을 저장할 때

DB에 시간을 저장하고 조회할 때,
NOW()를 통해 저장했다.

DB에서 현재 시간으로 시간 값을 넣어주는 것이다.

Express App을 구현하고 DB에 저장된 정보를 가져올 때,
시간 값이 현재 로컬 시간이 아닌 UTC 시간을 가져오고 있었다.

이상한걸까?

현재 로컬 시간으로 가져와야 하지 않을까?
혹시, 시간이 잘못 저장되는 것은 아닐까?

INSERT INTO 
		post(title, description, created, updated) 
	VALUES ('title', 'description', NOW(), NOW())

시간을 저장하는 코드를 사용하고, DB Shell에서 조회해보니 로컬 시간으로 잘 출력되는 것을 볼 수 있다.

하지만, 저장된 시간을 Express App에서 조회할 땐,
로컬 시간이 아닌 UTC 시간으로 가져온다.

로컬 시간으로 가져와야 정상이 아닌가
고민하게 되었다.

이상한 시도

new Date()

그렇다면 new Date()를 통해 시간을 생성하고, 저장하면 될까? 이전과 동일한 결과를 가졌다.

DB에 string으로 저장?

하다하다 DB에 시간에 대한 타입을 VARCHAR로 문자열 타입으로 저장할까 생각했다.

const created = new Date();
// created.toString()으로 INSERT

하지만 DB에 시간은 시간 타입에 맞게 저장하는 것이 맞다고 생각했다. (이렇게 한다면 datetime, timestamp 타입이 다 필요 없지 않은가?)

Client로 던질 때 파싱

// result: DB 조회 결과
return result.rows.map(({created, ...rest}) => ({
  ...rest,
  created: created.toLocaleString('ko-KR')
}))

DB에서 조회한 값을 로컬 시간으로 파싱해서 던질까?

UTC 시간을 쓰자

함께 공부하는 분과 이 문제에 대해서 얘기했다.
하지만 뜻밖의 답을 들었다.

UTC 시간을 사용하는게 맞다.

나는 DB에서 로컬 시간으로 조회되는 것이 서버에서 UTC로 조회되는 것이 잘못된 로직인 줄 알았다.
당연하게 로컬 시간으로 서버에서도 나와야 하는 줄 알았다.

하지만 내 생각이 잘못되었다.

잠깐만 생각해봐도 UTC 시간을 가져오는 것이 클라이언트에서 더 유용하다. 서비스 한국에서만 배포되는 것도 아니고, 한국과 다르게 미국은 한 국가에서도 시간대를 여러개 사용한다.

모두 로컬 시간으로 저장되어있다면?

당연하게 안되는 것.

공유해주신 유튭 영상

profile
주니어 개발자입니다. 🚀

0개의 댓글