클라이언트와 서버의 시간 차 해소

1415 단어 tiptip

요즘 개발하는 서비스들은 대부분 해외에서도 사용 가능합니다. 해외에서 서비스를 사용하는 경우 뿐만 아니라 각자 사용하는 기기의 국가, 시간 설정을 대한민국이 아닌 다른 곳으로 해놓았을 경우 클라이언트에서 사용하는 코드는 다른 시간을 return 합니다.

현재 제가 사용하는 기기는 대한민국 표준시를 사용하도록 설정되어 있습니다.

이 상태에서 아래 코드와 결과는 다음과 같습니다.

new Date();
//Fri Feb 18 2022 08:13:49 GMT+0900 (한국 표준시)

이번에는 기기의 시간을 미국으로 변경해 보겠습니다.

그러면 동일한 코드는 아래와 같은 결과를 보여줍니다.

new Date();
Thu Feb 17 2022 17:15:19 GMT-0600 (북미 중부 표준시)

서비스의 성격에 따라 판단할 문제이지만 만약 서버에서 시간을 체크해야 하는데 화면의 Request에서 시간을 받아서 사용할 경우 서버는 대한민국 표준시를 사용하지만 화면은 북미 중부 표준시를 사용하게 되므로 대한민국 표준시를 사용하지 않는 사용자는 적절하지 않은 오류를 만나게 됩니다.

경우에 따라 또 다르지만 화면에서도 대한민국 표준시로 통일하는 방법이 있습니다.
아래 코드를 참고합니다.

const now = new Date();
const utcDate = now.getTime() + (now.getTimezoneOffset() * 60 * 1000);
const korDate = new Date(utcDate + 9 * 60 * 60 * 1000);

우리나라는 그리니치 표준시 + 9H를 사용하므로 UTC 기준시각에 9시간을 더해주는 로직입니다.

위와 같이 코드를 작성하면 북미 중부 표준시를 사용하더라도 대한민국 표준시를 화면에서도 사용할 수 있습니다. 물론 new Date() 보다는 서버의 시간을 Response Header로 받아온 후에 변환하는게 일반적입니다.

결과는 아래와 같습니다.

Fri Feb 18 2022 08:22:47 GMT-0600 (북미 중부 표준시)

좋은 웹페이지 즐겨찾기