서버와 클라이언트의 시간차가 9시간이 나는 이유
나는 개발을 진행하던 도중 유독 서버와 클라이언트의 시간차가 9시간이 나는 경우를 자주 만나곤 한다. 이처럼 클라이언트에서 작성한 코드가 서버에서 다르게 보이는 이유는 각 컴퓨터가 위치한 시간대(timezone)가 다르기 때문이다.
GMT(그리니치 표준시)와 UTC(협정 세계시)
그리니치 표준시(GMT)는 말 그대로 영국에 위치한 그리니치 천문대를 기준으로 경도를 나누는 시간대이다. 보통 시차를 붙여 GMT+01, GMT-02처럼 표현한다. 여기서 헷갈리면 안 되는 게, 플러스가 적힌 시간대가 더 시간이 이른 것이다.
JavaScript의 코드 결과물을 살펴보면 GMT+0900라고 적힌 것을 자주 봤을 것이다. 이는 GMT 기준으로 한국이 9시간을 앞선 시간대에 있다는 것을 의미한다.
협정 세계시(UTC)는 과학자들로부터 초의 정의가 바뀌게 되면서 나오게 되었다.(과학 시간은 아니므로 패스하겠다.) 현재는 UTC가 국제 표준이며 UTC는 전 세계 어디에서 측정해도 같은 시간을 나타낸다. 우리의 컴퓨터 역시 UTC 기반으로 동작한다. 그런데 유독 JavaScript의 Date객체의 일부 출력이 시간대를 GMT라고 표시하고 있다. 이유는 단지 스펙에 그렇게 적혀있기 때문이다.
위의 내용 중 우리가 기억해야 할 건 2가지다.
1. JavaScript에서 GMT는 UTC와 똑같다. 2. UTC는 시간대와 상관없이 항상 같은 값이다. |
KST(한국 표준시)
KST(Korea Standard Time)는 한국 표준시이다. UTC로부터 9시간 이른 시간대이다. KST를 아래와 같은 방식으로 다르게 표현할 수도 있다.
- UTC+09
- UTC+09:00
- UTC+0900
- GMT+9
MariaDB/MySQL 시간대 (time-zone) 설정
현재의 시간대를 확인하는 방법은 아래와 같다.
MariaDB [(none)]> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.000 sec)
위와 같이 시간대가 "SYTEM"으로 나오면, 기본적으로 "UTC" 시각을 기준으로 설정되어 있음을 나타낸다. 그러면, 위에서 언급한 바와 같이 실제 한국시간보다 9시간 느린 시간으로 표시되게 된다.
현재 운영 중인 MariaDB의 시간대를 동적으로 변경하는 것은 "SET" 명령어로 다음과 같이 설정할 수 있다.
MariaDB [(none)]> SET GLOBAL time_zone='+09:00';
MariaDB [(none)]> SET time_zone = '+09:00';
MariaDB [(none)]> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +09:00 | +09:00 |
+--------------------+---------------------+
1 row in set (0.000 sec)
위와 같이 "SET" 명령어로 시간대를 변경하면, 바로 적용이 되나, MariaDB 서버를 재시작하면 원래대로 "SYSTEM" 설정
으로 되돌아간다.
이를 해결하기 위해서는 "my.cnf" 파일에 "default-time-zone"에 직접 시간대를 다음과 같이 설정해 주어야 한다.
[mysqld]
bind-address=0.0.0.0
nskip-host-cache
skip-name-resolve
default-time-zone='+9:00'
그런 다음 yml파일의 datasource의 url에 ?serverTimezone=Asia/Seoul를 추가해 주자.
'DB > MariaDB' 카테고리의 다른 글
[MariaDB] MacOS에 HomeBrew로 MariaDB 설치하기 (0) | 2024.03.04 |
---|