MySQL을 사용하다 보면 타입이 DATETIME인 칼럼에 데이터를 넣는 경우가 종종 생기는데,
저는 NOW() 값을 INSERT 해주었는데 DB에 들어간 값을 보니 실제 현재시간과 9시간 정도 차이가 나는 걸 확인할 수 있었습니다.
검색을 통해 mysql 타임존이 보통 UTC( 그리니치 천문대가 있는 곳의 시간)으로 설정되어 있기 때문에 KST(한국시간)와 9시간 정도 차이가 있기 때문에 발생하는 문제라는 것을 확인할 수 있었습니다.
실제 한국시간으로 데이터를 사용하기 위해서는 크게 두가지로 정리할 수 있습니다.
첫 번째는 서버자체에서 입력을 한국시간으로 하거나, 두 번째로는 데이터를 클라이언트에서 받아와서 한번 더 가공해서 사용하는 방법이죠.
둘 다 특별하게 어렵거나 하진 않지만 클라이언트로 가져와서 매번 바꾸는 게 번거롭다고 생각이 들었고, 데이터를 저장할 때 애초에 한국시간으로 저장하자는 생각이 들었습니다.
그래서 서버에서 처리하는 방법이 대해 알아보겠습니다.
1. mysql에 접속한 후 다음과 같이 입력해줍니다.
select @@global.time_zone, @@session.time_zone,@@system_time_zone;
별도의 타임존을 설정하지 않았다면 저와 같이 테이블이 나타날 것입니다.
이걸 변경하는 방법은 UTC에서 +09:00을 하거나, timezone을 Asia/Seoul로 변경하여야 합니다.
저는 UTC에서 +09:00을 하는 방법으로 해결하였습니다.
2. mysqld.cnf 파일에 default 타임존을 설정합니다.
터미널에 접속한 뒤에 아래와 같은 명령어로 mysqld.cnf 파일에 접근합니다.
파일을 수정해야 하기 때문에 sudo로 접근해야 합니다.
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
3. 아래의 코드를 파일 맨 밑에 추가합니다.
default-time-zone="+09:00"
파일편집기를 열었을 때 과정을 간략하게 설명드리겠습니다.
1. i를 누르면 파일을 수정할 수 있게 됩니다.
2. 맨 밑에 코드를 추가합니다.
3. esc를 누릅니다.
4. :wq를 누르면 저장 후 종료가 됩니다.
4. mysql을 재시작합니다.
sudo service mysql restart
5. mysql에 다시 접속해서 1번에 썼던 쿼리를 날려봅니다.
짜잔~
UTC에서 +09:00이 이 추가된 걸 확인할 수 있습니다.
6. 현재시간을 확인해 봅니다.
select now();
서버의 현재시간과 제 pc의 시간이 같아진 것을 확인해 볼 수 있습니다.
오래 걸리지 않으니 저와 같은 문제가 있었다면 이런 방법으로도 간단하게 해결이 가능합니다.
다들 파이팅!!
끝!
'서버' 카테고리의 다른 글
[SSH] VScode로 EC2 인스턴스에 SSH 원격 접속하기 (1) | 2024.03.15 |
---|---|
[SSH] cmd 창으로 EC2 인스턴스 원격 접속 (0) | 2024.03.12 |
[MySQL] 데이터 생성/조회/수정/삭제 (0) | 2024.03.12 |
[MySQL] 컬럼 추가/삭제/컬럼명 변경/컬럼타입 변경 (0) | 2024.03.08 |
[MySQL] 데이터베이스 생성/조회/삭제 (0) | 2024.02.21 |