-
date, time, createdAt와 updateAt 같은 날짜와 시간 Date타입에 대해서백엔드/견고한 백엔드 만들기 2024. 7. 6. 13:38728x90
- Postgresql에서 timestamp와 timestamptz
- ISO 8601 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준 포맷
- Date 타입의 불변성
Postgresql timestamp와 Mysql datetime과 유사하고Postgresql timestamptz와 Mysql의 timestamp와 유사하다.
2. ISO 8601 날짜와 시간에 관련된 데이터 표현을 다루는 국제 표준
날짜와 시간을 표현할 때 나라마다 표시형식이 다르다보니 국제 표준화 기구(ISO)에서 정한 날짜 및 시간 표시 형식이다.
즉, 해당 format을 이용하여 date format을 일관성 있게 사용 할 수 있다.
ISO 8601과 RFC 3339를 제외한 Unix time, YYYY-MM-DD HH:mm:ss.SSS, YY-MM-DD HH:mm:ss.SSS,
방식으로 사용 할 경우 "이 시각 데이터가 어느 timezone을 기준으로 했는지" 를 신경써야 할 수밖에 없다. 그렇게 되면 프론트에서 api 요청 시에 프론트엔드 레벨에서 시각 데이터에 timezone 정보, 혹은 특정 timezone과의 시간 간격 정보를 UTC+9와 같이 별도로 추가해서 사용해야 되는 불편함이 생긴다.
그러나 만약 ISO 8601를 사용하여 timezone에 대한 명시를 백엔드가 해주면 '시간 간격은 UTC를 기준으로 한다'는 게 표준으로서 정의되어 있기 때문에(IOS 8601) 프론트 엔드에서도 어느 timezone 기준으로 했는지 신경 쓰지 않아도 된다.ISO 8601이 아닌 RFC 3339를 사용하는것도 적절하다. RFC 3339는 ISO 8601의 상위 집합이다.
결론적으로 createdAt나 updatedAt나 날짜 관련 데이터를 javascript Date 객체 그대로 return 하는것보다
toISOString() 메서드를 이용하여 ISO 8601 포맷 방식으로 일관성 있는 리턴을 해주는게 바람직 하다.3. Date 타입의 불변성
Reference
- (https://gngsn.tistory.com/166)
- (https://ko.wikipedia.org/wiki/ISO_8601)
- (https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-INPUT)
- (https://velog.io/@city7310/%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%80-%EC%9D%B4%EC%A0%95%EB%8F%84%EB%8A%94-%ED%95%B4%EC%A4%98%EC%95%BC-%ED%95%A8-12.-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EB%A0%88%EB%B2%A8-%EC%9D%98%EC%82%AC%EA%B2%B0%EC%A0%95-2)
- (https://velog.io/@kerri/TimeZone-Locale-DateFormat)
- (https://ohgyun.com/416)
728x90'백엔드 > 견고한 백엔드 만들기' 카테고리의 다른 글
NestJS에서 믹스인(mixins)이란? (0) 2024.08.14 Log와 모니터링 (0) 2024.08.13 dto에서 기본 타입만 사용 하고 계신가요 (0) 2024.07.17 NestJS Swaager 사용시 직관적이고 구체적인 응답 문서화 하기 (0) 2024.07.09 NestJS ResponseDto 적극 활용하기 (0) 2024.07.08