자주자주 공지를 확인하세요!

라이믹스/매뉴얼/표준 시간대 처리 방식

상위 문서: 라이믹스/매뉴얼

개요[편집 / 원본 편집]

라이믹스는 서버 이전이나 일광절약시간제(서머타임) 변경으로 기존 문서의 작성 시각이 달라지는 문제를 줄이기 위해 서버 시간대, 내부 시간대, 표시 시간대를 구분한다.

세 가지 시간대[편집 / 원본 편집]

구분 역할 처리 원칙
서버 자체 시간대 운영체제의 현지 시간 설정 서버의 시각 자체는 정확해야 하며, 라이믹스는 별도의 내부 기준을 사용
내부 시간대 DB 저장과 서버측 날짜 처리 기준 신규 설치·XE에서 전환 시 결정되고 유지
디스플레이 시간대 사용자에게 날짜를 보여 주는 기준 관리자가 바꿀 수 있으며 사용자별로 다를 가능성도 고려

XE는 저장된 날짜가 어떤 서버 시간대를 기준으로 했는지 기록하지 않아, 서버 이전이나 시간대 변경 때 과거 날짜가 어긋날 수 있었다. 라이믹스는 고정된 내부 기준으로 저장한 뒤 표시할 때 변환한다.

내부 시간대[편집 / 원본 편집]

설정 키는 locale.internal_timezone이다. 공식 매뉴얼은 한국어 사이트의 기존 XE 호환을 위해 UTC+9(32400초), 그 밖의 경우 UTC(0초)를 설치·전환 시 정하는 방식으로 설명한다. 실제 사이트의 저장 기준은 해당 설정과 설치 이력을 확인한다.

이미 운영 중인 사이트의 시간을 맞추려고 내부 시간대를 임의로 변경하지 않는다. 저장된 날짜를 해석하는 기준이므로, 화면 표시 설정과 다르다. DB에 날짜를 저장하는 모듈·애드온은 내부 시간대를 사용한다.

getInternalDateTime() 등 라이믹스의 시간 함수를 사용할 수 있다. 흔히 사용하는 저장 문자열은 YmdHis, 즉 YYYYMMDDHHMMSS 형식이다. 유닉스 타임스탬프는 특정 순간을 나타내므로 시간대를 바꾸어 더하거나 빼는 방식으로 저장하지 않는다. 타임스탬프를 DB에 저장하는 새 자료는 범위에 맞는 자료형도 확인한다.

표시 시간대[편집 / 원본 편집]

기본 설정 키는 locale.default_timezone이다. 예를 들어 Asia/Seoul처럼 이름으로 지정하여 서머타임 규칙도 함께 처리한다. 표시 설정을 바꾸는 것은 이미 저장된 날짜의 내부 기준을 바꾸는 작업과 다르다.

화면 출력에는 zdate(), getDisplayDateTime(), 문서·댓글 객체의 getRegdate() 등을 사용한다. 날짜 변환을 이미 수행한 값에 다시 9시간을 더하는 식의 중복 보정을 피한다.

개발 시 선택[편집 / 원본 편집]

작업 사용할 기준
작성·수정 일시를 DB에 저장 내부 시간대
글 목록·본문의 작성 시각 표시 디스플레이 시간대
시간 차이·만료 계산 같은 기준의 타임스탬프 등 일관된 표현
외부 API와 날짜 교환 상대 API의 형식과 시간대를 명시하여 변환

다른 지역의 사용자가 같은 글을 보더라도 같은 순간을 서로 다른 현지 시각으로 표시할 수 있음을 고려한다. 날짜 문자열을 비교하거나 캐시할 때도 시간대 의존 여부를 확인한다.

서버 이전 후 시간이 다를 때[편집 / 원본 편집]

  1. 운영체제의 실제 시각과 동기화를 확인한다.
  2. 라이믹스의 내부 시간대와 표시 시간대를 구분하여 확인한다.
  3. 서드파티 자료가 서버 시간대나 고정된 시차를 직접 사용하는지 확인한다.
  4. DB 값을 일괄 수정하기 전에 백업과 원인 분석을 먼저 수행한다.

같이 보기[편집 / 원본 편집]

관련 운영 문서[편집 / 원본 편집]

출처[편집 / 원본 편집]

최근 바뀜

더 보기