모든 날짜는 가게의 시계를 따릅니다
· StorM · 2분 읽기 · BYTHECLOUD ENT
StorM Web Engine의 쇼핑 기능이 날짜와 시각을 읽는 방식, 그리고 서버나 방문자의 시계가 아니라 가게의 시계에 맞는지 릴리스마다 확인하는 방법을 정리했습니다.
가게마다 시계는 하나
가게는 설정에 자기 시간대를 적고, 엔진은 날짜와 시각을 그 시간대로 읽습니다. 픽업·배송 날짜, 마감 시각, 영업시간, 할인 날짜, 메일과 영수증에 찍히는 시각, 하루 합계, 예약된 작업이 그렇습니다. 기본값은 없습니다. 시간대가 없으면 모듈 점검이 실패하고, 날짜 계산은 돌기를 거절하고, 날짜 표시는 비어 있습니다. 짐작한 시간대는 누군가에게는 틀린 시간대이기 때문입니다.
쉽게 쓰고 싶어지는 시계 세 가지는 피합니다. 서버의 시간대는 운영에서 대개 UTC입니다. 방문자 기기의 시간대는 여행하는 사람마다 달라집니다. 마이너스 일곱 시간 같은 고정 오프셋은 시계가 바뀌는 지역에서 한 해의 절반은 틀리고, 지역이 규칙을 바꾸면 그 뒤로는 계속 틀립니다.
시계 규칙은 어디서 오나
일광 절약 시간과 규칙 변경은 엔진이 지닌 시간대 표에서 읽습니다. 이 표는 시간대 데이터베이스의 공식 릴리스에서 만든 것이며, 호스트 기기나 방문자의 브라우저에서는 읽지 않습니다. 그 사본은 지역의 최신 규칙보다 오래됐을 수 있기 때문입니다. 실행 환경의 데이터는 교차 확인에만 쓰고, 다르면 그 시간대에 대해 한 번 알립니다. 기기 자체의 데이터를 아직 읽는 곳은 매장 TV 화면 하나뿐이고, 그것도 페이지에 그 순간을 덮는 가게 시계가 없을 때만입니다.
릴리스는 이렇게 확인합니다
엉뚱한 시계로 계산한 날짜는 가게를 만드는 기기에서는 보이지 않습니다. 그 기기의 시간대가 가게의 시간대인 경우가 많기 때문입니다. 날짜는 운영에서, 매일 저녁에, 해외에서 접속하는 방문자에게만 틀립니다. 그래서 릴리스 전에 운영과 같은 방식으로 가게를 돌려 확인합니다.
- 서버는 같은 빌드를 UTC로, 움직일 수 있는 시계와 함께 돌립니다.
- 방문자는 여러 기기 시간대에서 동시에 가게를 열고, 각 브라우저의 시계를 같은 순간에 맞춥니다.
- 검사는 가게의 점검 파일이 적어 둔 순간을 찾아갑니다. UTC 자정 전후, 현지 자정, 월말, 주말, 시계가 바뀌는 날, 마감 시각의 앞뒤 오 분 같은 순간입니다.
- 순간마다 가게가 보여 주고, 받고, 저장하는 값을 가게 시계가 말하는 값과 맞대어 보고, 메일에 찍히는 날짜는 가게의 점검 파일이 적어 둔 시험 주문으로 확인합니다.
차이가 하나라도 있으면 릴리스는 통과하지 못합니다.