DataGrip에서 데이타를 입력
localhost와 yebalja.com은 DB의 데이타를 받아 페이지를 출력합니다
DataGrip 어플리케이션을 통해 로컬 컴퓨터에서 DB에 시간을 입력해준다.
로컬은 KST 혹은 GMT+09:00, UTC+09:00를 따른다. (아시아/서울)
웹페이지 - localhost:3000
DB - localhost:5000/api/json/timelinelist
백서버는 UTC를 따른다.
웹페이지 - yebalja.com
DB - api.yebalja.com/api/json/timelinelist
기존의 날짜 형식은 YYYY-MM-DD HH:MM:SS
였지만 사파리에서 인식되지않는 문제때문에 YYYY-MM-DDTHH:MM:SS.000Z
로 날짜 데이타를 모두 변경했다.
해당 날짜 형식은 모두 UTC로 처리되는데 문제는 백서버 DB와 localhost DB가 입력된 시간을 인식하는 방법이 다르다는 것이었다. 따라서 localhost와 yebalja.com의 웹페이지에 최종적으로 나타나는 시간도 달라진다는 문제가 발생했다.
00시면 시간이 안 뜨게 되어있으므로 시간이 모두 00시인 것을 확인할 수 있다.
00시로 되어야할 부분들이 모두 9:00시로 뜨는 것을 확인할 수 있다. 입력한 시간 +9로 출력
기존에는 data.startdate
와 data.enddate
를 받아와서 시간을 계산하는 각종 함수에 넣어주었다.
startdate_KST
와 enddate_KST
라는 새로운 변수들을 선언해주었다.getTime()
함수로 날짜를 밀리세컨 형식으로 변한해준다.9 * 60 * 60 * 1000
let startdate_KST = new Date(new Date(data.startdate).getTime() - 540*60*1000);
let enddate_KST = new Date(new Date(data.enddate).getTime() - 540*60*1000);
startdate_KST
와 enddate_KST
를 대신 넣어주었고 yebalja.com은 제대로 실행되는 것을 확일할 수 있었다.백서버의 타임존이 다르다면 백서버의 타임존을 바꾸자!라는 생각으로 백서버의 mySQL timezone을 변경해보았다.
default-time-zone="+09:00"
로 타임존 변경
Taelee의 mysql에서 9시간 차이날 때참조
하지만 이는 백서버와는 또 다른 것으로 백서버와 로컬의 시간차는 여전히 존재할뿐아니라 로컬의 시간이 서버의 시간처럼 바뀌어버렸다. 즉, 서버와 로컬 모두 시간이 안 맞게 되어버렸다.
결국 새로운 방법을 시도해야했는데 우연히 mihykim님이 마침 상황에 딱 맞는 해결법을 검색해주셨다.
back/config/db_config.js
에서 타임존 옵션을 추가했고 결과적으로 yebalja.com과 localhost:3000 모두에서 잘 작동하는 것을 확인할 수 있었다.
timezone: KST
하지만 여기서 새로운 문제점이 발생했는데 yebalja.com의 DB에서 date 형식이 YYYY-MM-DD HH:MM:SS
와 같이 바뀌었다는 점이었다. 애초에 이 형식이 사파리에서 인식되지 않기 때문에 YYYY-MM-DDTHH:MM:SS.000Z
로 바꾼 것이었기때문에 이 부분을 해결해야했다.
mysql github에서 옵션들에 대한 정보를 찾아보니
timezone: '+09:00'
위와 같이 변경해주면 그대로 YYYY-MM-DDTHH:MM:SS.000Z
날짜 형식을 유지한 채로 타임존만 바꿀 수 있었다.
yebalja.com과 localhost:3000도 모두 날짜가 제대로 잘 뜨고 각각의 DB에도 올바른 형식으로 날짜가 입력된다. 문제 해결!