MySQL TimeZone 설정 - serverTimezone=Asia/Seoul 로 수정할 때

Posted on July 20th, 2021

시작

회사 신입과제를 할 때, 의외로 TimeZone에서 많은 시간을 보냈습니다. 회사 코드, DB에는 설정을 하고 계속 개발을 시작하였지만, 제가 정리하는 개인 프로젝트에는 설정이 안되어있기에 설정을 하려고 합니다.

UTC(Coordinated Universal Time:세계 협정시)는 예전의 GMT(Greenwich Mean Time)가 표준화 된 것입니다. KST(대한민국)는 UTC +9:00 인 값입니다.

이제 해야할 것은 Intellij에서 JDBC URL의 ServiceTimeZone과 Mysql DB 서버와 TimeZone을 일치시켜 UTC가 아닌 KST로 수정하려합니다.

Intellij 설정

DB를 연결하는 yml 에서 Timezone을 수정합니다.

url: jdbc:mysql://localhost:3306/basic?serverTimezone=UTC&characterEncoding=UTF-8

기존에 Timezone이 UTC 였다면,

url: jdbc:mysql://localhost:3306/basic?serverTimezone=Asia/Seoul&characterEncoding=UTF-8

Asia / Seoul 로 변경해줍니다.

MySQL Asia/Seoul Set

만약 JDBC URL만 KST로 수정하고 MySQL에는 UTC로 그대로 냅두면, 계속 UTC로 남아있거나, 에러가 났을 겁니다. 그 부분을 방지하고자 같이 동기화를 시켜줍니다.

Mysql WorkBench를 이용합니다. 우선 사진과 같이 현재 global.time_zone 과 session.time_zone을 확인합니다. 설정이 아닌 default 값으로 SYSTEM 으로 설정이 되어있습니다. 그럼 Set을 통해 변경해보겠습니다.

여기서 만약 에러가 아닌 곧바로 셋팅이 된다면, 끝난거지만 보편적으로는 안될겁니다.

그 다음 단계는 Asia/Seoul을 셋팅하기위해 URL에 접속합니다. https://dev.mysql.com/downloads/timezones.html

접속 후에, Window OS인 유저분들은 해당 빨간 네모칸에 있는 부분을 다운로드하면 됩니다. ( 5.7+ 이라는 것은 Mysql Version 입니다. )

다운로드 후, 클릭을 하면 사진과 같은 압출 풀기가 나오고 더블클릭 후, Mysql Bench를 곧바로 열어주면 됩니다.

use mysql를 우선적으로 실행을 시킵니다. 만약 mysql Cli인 경우 password를 치면 곧바로 복붙하면 됩니다.

이제 마지막 단계입니다. 아까와는 다르게 TimeZone이 설정이 잘됩니다.

Mysql Server my.ini 설정

C:\ProgramData\MySQL\MySQL Server 8.0

해당 경로를 찾아들어가서 my.ini를 찾고 설정을 해줍니다. txt 마지막 줄에

default-time-zone=Asia/Seoul

를 추가해주시면 됩니다. 하지만 분명히 경고창이 뜰겁니다.

my.ini의 오른쪽 마우스 클릭을 하고 보안 탭에 들어가서 권한을 변경해줍니다. 그리고 다시한번 변경해주면 됩니다.

서버 재구동

밑에 '검색하려면 여기에 입력하시오.' 부분에 서비스을 입력하여 서비스를 실행시키고 MySQL80을 찾아 서버 재구동을 시킵니다.

결과

다시 한번 TimeZone을 확인하면 짜잔! 제대로 나오는 것을 볼수있습니다.