클라우드 환경 GCP 예시

클라우드 환경(GCP 등)에서 MySQL을 사용하다 보면,
서버의 기본 시간대가 UTC(협정 세계시)로 설정되어 있어 한국 표준시(KST)보다 9시간이 뒤쳐져서 데이터가 저장·조회되는 경우가 종종 발생
이 글에서는 MySQL과 JavaScript에서 시간 차이를 다루는 방법을 정리
MySQL의 날짜/시간 자료형 정리
MySQL에는 크게 DATE, DATETIME, TIMESTAMP 자료형이 있습니다. 다음 표로 비교해보겠습니다.
자료형 | 예시 | 타임존 반영 여부 | 특징 |
---|---|---|---|
DATE | 2023-02-06 | 없음 | 연-월-일만 저장 (시·분·초 정보 없음) |
DATETIME | 2023-02-06 11:00:00 | 없음 | 날짜와 시간을 함께 저장하되, DB서버 타임존이 직접 반영되지는 않음 |
TIMESTAMP | 2023-02-06 11:00:00 | 있음 (UTC 기준으로 저장 후 변환) | UTC 기준으로 저장되며, 조회 시 MySQL 서버의 타임존에 따라 시간차가 반영되어 표시됨 |
- DATETIME은 “그냥 적힌 시각”을 저장하는 방식이므로, DB 자체에서 시간대 정보를 고려하지 않습니다.
예:2020-08-25 11:00:00
→ MySQL에 어떤 타임존 설정이 되어 있어도 이 형식 그대로 저장·조회됨. - TIMESTAMP는 실제로는 UTC 기준으로 저장되지만, MySQL 서버의 타임존 설정에 따라 조회 시점에 시차를 보정하여 표시합니다.
예: DB 서버 타임존이Asia/Seoul (UTC+09:00)
일 때,2020-08-25 11:00:00
로 입력 → 내부적으로 UTC로 보정되어 저장(다른 시간처럼 보일 수 있음) → 조회 시 KST로 보정되어 다시11:00:00
임을 이해할 수 있음.
MySQL에서 타임존 설정 바꾸기 (일시 적용)
3-1. 현재 타임존 확인
sql복사SELECT @@global.time_zone, @@session.time_zone, @@system_time_zone;
@@global.time_zone
: MySQL 전체(Global)의 타임존@@session.time_zone
: 현재 연결된 세션(Session)의 타임존@@system_time_zone
: OS 시스템 레벨의 타임존
3-2. 타임존 변경 (일시 적용)
sql복사-- 글로벌 타임존 설정 (서버 전체)
SET GLOBAL time_zone = '+09:00';
-- 현재 세션 타임존 설정
SET time_zone = '+09:00';
이렇게 설정하면 즉시 타임존이 적용되지만, MySQL 서버를 재시작하면 다시 원래 설정으로 돌아갑니다.
확인
sql복사SELECT NOW();
위 명령으로 시간을 조회했을 때, 원하는 한국 시각(KST)이 나온다면 정상입니다.
만약 Asia/Seoul
을 직접 쓰고 싶다면 SET GLOBAL time_zone = 'Asia/Seoul';
로 시도할 수도 있으나, OS나 MySQL 타임존 정보 설정이 제대로 되어 있지 않으면 에러가 날 수 있습니다. 그 경우 숫자 형태(+09:00
)로 설정하는 방법이 확실합니다.
4. MySQL 설정 파일에서 타임존 변경 (영구 적용)
MySQL이 재시작될 때도 설정이 유지되려면 설정 파일을 수정해야 합니다.
- MySQL 설정 파일 열기 (우분투 예시)bash복사
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
섹션 아래에 다음 내용을 추가pgsql복사default-time-zone = "+09:00"
- MySQL 재시작bash복사
sudo service mysql restart
혹은bash복사sudo systemctl restart mysql.service
- 재시작 후 다시 MySQL에 접속, 다음 명령어로 타임존이 제대로 반영됐는지 확인sql복사
SELECT @@global.time_zone, @@session.time_zone;
목차