코로나 재확진을 이기고 돌아온 TIL!
타임존 관련 표준
자바스크립트에서 타임존 다루기 (1) : NHN Cloud Meetup
자바스크립트에서 타임존 다루기(1)
meetup.nhncloud.com
Should servers have their timezone set to GMT/UTC?
This may not be a big deal for smaller shops that only have one or a few site, but for larger organizations this is something I'm curious about. What are the pros and cons have having all/most of ...
serverfault.com
- Are all of your administrators/users in the same timezone? Perhaps their TZ would be appropriate.
👉 관리자와 사용자들이 모두 같은 시간대에 있다면 그 사람들의 시간대를 사용하는게 적합할 수 있다. - Do the machines interact with the local environment? Local TZ might be good.
👉 머신이 현지 환경과 상호작용을 한다면 현지 시간대가 적합하다. - Are all the logs pulled to a central location for analysis? UTC might help there.
👉 로그들이 분석을 위해 중앙으로 수집된다면 UTC(협정 세계시)를 사용하는게 도움이 될 수 있다. - Do the machines communicate with each other in ways where time matters? UTC might help prevent silly mismatch issues.
👉 머신들이 서로 시간이 중요한 상호 통신을 한다면 UTC를 사용하여 시간 불일치 문제를 방지할 수 있다. - Does the OS vendor (more likely for network gear) have a suggestion? Consider that.
👉 운영체제 제조업체 (특히 네트워크 장비)의 권장사항이 있다면 그 사항을 고려해봐야 한다. - Will DST annoy you? Use UTC.
👉 DST(일광 절약 시간제)가 귀찮다면 UTC를 사용하라. - What do you think will make your life easier? Use that.
👉 당신의 삶을 더 편하게 만들 거 같은 방법을 쓰라.
DST(일광 절약 시간제)가 이슈가 되는 경우:
MySQL datetime fields and daylight savings time -- how do I reference the "extra" hour?
I'm using the America/New York timezone. In the Fall we "fall back" an hour -- effectively "gaining" one hour at 2am. At the transition point the following happens: it's 01:59:00 -04:00 then 1
stackoverflow.com
이 문제의 핵심은 MySQL의 날짜와 시간 데이터 타입이 특정한 경우, 특히 시간대가 바뀌는 DST가 적용되는 경우에는 제대로 작동되지 않는다는 것이다. DST가 끝나는 날, 즉 시간이 뒤로 1시간 돌아가는 경우에 문제가 발생한다. 이 시간동안 사실상 한시간이 사라지는데, 이 사라진 한시간 동안의 시간을 제대로 저장하거나 표현하는게 MySQL에서는 어렵다는 뜻이다.
예를 들어, 일광 절약 시간이 끝나는 시간인 '2009-11-01 01:00:00' 이 되었다고 치자
DST가 종료되었으니 '2009-11-01 01:00:01'이 되기 전에 '2009-11-01 00:59:59'로 시간이 돌아간다
그런데 MySQL에서는 이 돌아간 1시간 동안의 시간을 제대로 처리하지 못하고 '2009-11-01 02:00:00'으로 처리한다.
이에 대한 해결책으로는
- 시스템의 시간대를 UTC 등의 일정한 오프셋을 가진 시간대로 설정한다
- 날짜와 시간을 정수형(INT)로 저장한다
- MySQL 외부에서 날짜와 시간을 변환하여 DATETIME 타입으로 저장한다
👉 나의 고민: 오하우스 어플리케이션은 관리자와 사용자가 같은 시간대에 있고, DST도 사용하지 않는다. 그러면 GMT를 사용해도 되지 않을까?
👉 👉 모든 시스템과 사용자가 동일한 시간대를 사용하므로 별도의 시간 변환 과정이 필요하지 않을 것이다. 그러나! 애플리케이션의 사용자가 시간대나 국가 등에 따라 다양해질 수 있는 상황, 또는 향후 확장성을 고려하면 UTC를 사용하는게 좋을 거 같다. 모든 사용자에게 일관성 있는 시간 정보를 제공할 수 있고, 시간대가 변경되거나 다른 시간대의 사용자가 추가되더라도 쉽게 대응을 할 수 있다.
UTC is Enough for Everyone, Right?
Let me tell you a quick story. Do you remember what you were doing on December 30, 2011? You have three seconds. Go. Nope? Nothing? Well then, if you don’t know what you were doing December 30, 2011, then there’s one obvious explanation for this: you m
zachholman.com
중요!! 왜 UTC를 써야하는지에 대한 이유와, timezone을 sting으로 저장하는 방법, 클라이언트에게 올바른 시간을 보여주는 방법을 설명하는 글
ZonedDateTime (Java Platform SE 8 )
static ZonedDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone) Obtains an instance of ZonedDateTime from a year, month, day, hour, minute, second, nanosecond and time-zone.
docs.oracle.com
MySQL은 TIMESTAMP WITH THE TIME ZONE 타입을 지원하지 않는다. 그러므로 주문시간과 타임존 정보를 따로 저장해야 한다. 즉, DATETIME에 UTC 시간을 저장하고 별도의 컬럼에 타임존 정보를 저장하는 방식을 사용해야 한다.