MySQL JDBC에서 ‘KST’ 타임존 오류 해결하는 방법

java.sql.SQLException: The server time zone value 'KST' is unrecognized or represents more than one time zone ...

위 에러는 JDBC를 사용하는 자바 애플리케이션이 MySQL 서버에 연결할 때 서버의 시간대 설정이 올바르게 인식되지 않아서 발생하는 문제입니다.

간단히 말하면 MYSQL 타임존이 KST인데 JDBC 드라이버는 KST가 뭔지 못 알아 먹는 겁니다.

‘KST’ is unrecognized 해결 방법

해결 방법은 jdbc url에 serverTimezone= 파라미터를 추가하여 타임존을 명시하는 것입니다. 이렇게 하면 jdbc가 서버의 타임존을 우리나라 시간으로 인식합니다.

"jdbc:mysql://localhost:3306/yourdatabase?serverTimezone=Asia/Seoul"

‘KST’ is unrecognized 원인

왜 MYSQL의 타임존이 KST로 설정되냐 하면 대부분 디폴트 값이기 때문입니다.

리눅스 OS의 타임존이 KST인 경우를 보겠습니다.

[root@localhost ~]# date
Mon Jun 17 17:40:51 KST 2024

MYSQL에서 타임존 값을 확인해보면 SYSTEM 이라고 표기된 걸 볼 수 있습니다. 이건 시스템의 타임존을 따른다는 의미입니다. 즉 OS가 사용하는 KST 타임존을 따라갑니다.

MariaDB [(none)]> show variables like 'time_zone';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| time_zone | SYSTEM |
+---------------+--------+
1 row in set (0.001 sec)

타임 존 에러란?

타임 존 에러는 서버와 클라이언트 간 시간대가 일치하지 않거나 jdbc 등 라이브러리가 지원하지 않는 시간대를 db 서버가 사용하고 있는 경우 발생합니다.

servertimezone Asia/Seoul과 servertimezone KST 차이

Asia/Seoul은 국제적으로 표준화된 IANA 타임존 데이터베이스에 포함된 식별자입니다. IANA가 뭔지 자세히 알 필요는 없지만 명확하게 시간을 표현할 수 있는 형식이고 대부분의 데이터베이스 드라이버가 지원하는 표준화된 식별자라는 걸 기억하고 넘어가시면 됩니다.

KST는 Korea Standard Time(한국 표준시)를 의미하는 약어입니다. 약어는 중복 가능성이 있기 때문에 표준 식별자로는 부적합 합니다. 그래서 데이터베이스 드라이버가 인식하지 못할 수 있습니다. 근데 또 UTC는 인식하긴 합니다… UTC는 전 세계 표준이니까 그냥 넘어가도록 하구요.

따라서 타임존을 명시할 땐 KST 대신 IANA 타임존 데이터베이스에 포함된 식별자인 Asia/Seoul를 사용합니다.

댓글 남기기