MySQL
[MySQL] 타임존(Timezone) 설정과 변경 – 헷갈리지 말자!
Matae0712
2025. 5. 29. 13:26
반응형
✅ 운영 환경에서 흔히 겪는 타임존 이슈, 오늘은 MySQL 기준으로 정리해봅니다.
✅ 개발·운영 중 "시간이 이상해요!" 라는 문의가 들어왔다면 이 글이 도움이 될 거예요.
🔍 왜 타임존 설정이 중요한가요?
MySQL에서는 DATETIME이나 TIMESTAMP 컬럼을 사용할 때 서버의 타임존 설정에 따라 저장되거나 조회되는 시간이 달라질 수 있습니다.
예를 들어 한국(Asia/Seoul)에서 운영되는 서비스인데, DB 인스턴스가 UTC로 설정되어 있으면 시간이 9시간 밀려 보이게 되죠.
🧭 현재 설정된 타임존 확인하기
SELECT @@global.time_zone, @@session.time_zone;
- global.time_zone: MySQL 서버 전체의 타임존 (재시작 전까지 고정)
- session.time_zone: 현재 접속 세션에서의 타임존 (접속 시마다 초기화됨)
🔧 타임존 변경하는 방법
✅ 1. 세션 타임존 변경 (임시, 세션만)
SET time_zone = 'Asia/Seoul';
이 설정은 현재 접속 중인 세션에만 적용됩니다.
웹 애플리케이션에서 DB 연결할 때 설정하는 것도 이 방식이에요.
✅ 2. 글로벌 타임존 변경 (임시, 서버 재시작 시 초기화)
SET GLOBAL time_zone = 'Asia/Seoul';
서버 전체에 영향을 주지만, MySQL 재시작 시 원래대로 돌아옵니다.
✅ 3. my.cnf에 설정 (영구 적용)
Linux에서 MySQL 설정 파일을 수정해 영구 반영할 수 있습니다.
sudo vi /etc/my.cnf
[mysqld] default-time-zone='Asia/Seoul'
-- 수정 후 MySQL 재시작:
sudo systemctl restart mysqld
RDS에서는 직접 수정이 안 되므로 파라미터 그룹에서 설정해야 합니다. 아래 참고 👇
📦 [AWS RDS/Aurora]에서 타임존 설정 방법
- RDS 파라미터 그룹 생성 또는 편집
- time_zone 파라미터를 Asia/Seoul로 설정
- 인스턴스에 파라미터 그룹 적용
- DB 재시작 필요 (반드시 리부팅해야 적용됩니다)
🧱 타임존 이름 목록 불러오기
MySQL에서 일부 시스템은 time zone name을 인식하지 못할 수 있습니다. 그럴 땐 time zone 테이블을 로드해야 합니다.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
이건 리눅스 서버에서 직접 MySQL을 운영할 때만 가능해요.
AWS RDS에서는 자동으로 포함돼 있어 따로 할 필요는 없습니다.
❗ 주의할 점
- TIMESTAMP 타입은 MySQL에서 타임존을 자동으로 보정합니다.
→ 저장 시 UTC로 변환, 조회 시 다시 로컬 타임존으로 변환 - 반면 DATETIME은 그냥 타임존 무관한 숫자입니다.
→ 애초에 어떤 타임존인지 구분이 안 되므로 앱/DB 간 명확한 규칙 필요!
🧩 정리하며
설정 위치지속성대상
SET time_zone | 세션만 | 현재 연결된 클라이언트 |
SET GLOBAL time_zone | 서버 재시작 시 초기화 | 전체 세션 |
my.cnf 설정 | 영구 적용 | 전체 인스턴스 |
RDS 파라미터 그룹 | 영구 적용 | 전체 인스턴스 (재시작 필요) |
✅ 마무리 Tip
- 앱에서 시간을 사용할 땐 UTC로 통일하고, 사용자 UI에서만 타임존 적용하는 것도 좋은 전략이에요.
- MySQL 8.0 기준으로도 크게 다르지 않지만, 설정 적용 방식은 꼭 점검해 주세요.
반응형