목록으로
'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선 읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.

인간 사건의 저장 시간

문제점

이벤트는 특정 날짜와 시간에 발생합니다. 이 시간의 정확한 정보는 매우 중요합니다. 예를 들어, 이벤트 시작 시간을 오후 7시로 알려줬는데 실제로는 오후 6시에 시작된다면 참석자들은 한 시간을 놓치게 됩니다. 이벤트 웹사이트에서 가장 심각한 버그 중 하나는 사용자가 예상했던 시간에 이벤트가 열리지 않아 현장에 도착하는 경우입니다. 그렇다면 이벤트 시간을 어떻게 저장해야 할까요?

일반적인 “베스트 프랙티스”과 그 한계

데이터베이스 엔지니어와 날짜 및 시간에 대해 이야기할 때 보통 듣게 되는 조언은 모든 시간을 UTC(협정 세계시)로 저장하라는 것입니다. UTC는 시간대나 일광 절약 시간제를 신경 쓸 필요 없이 이벤트가 발생하는 정확한 순간을 기록할 수 있어 명확한 저장 방식으로 여겨집니다. 사용자의 현재 시간대로 변환하여 보여줄 수 있기 때문입니다.

PostgreSQL을 사용하는 경우, TIMESTAMP WITH TIME ZONE 또는 줄인 timestamptz 타입을 사용할 것을 권장받기도 합니다. 이는 UTC 값을 저장하지만, 실제 시간대 정보는 저장하지 않습니다. 따라서 중요한 이벤트 발생 시점의 세부 정보가 손실됩니다.

발생할 수 있는 문제들

이벤트의 정확한 UTC 시간을 계산하여 저장하는 경우, 이벤트 생성자의 원래 의도 정보를 잃어버리게 됩니다. 예를 들어, 특정 지역의 오후 6시에 이벤트를 계획했다면, 이를 UTC로 변환하면 지역에 따라 다른 시간이 될 수 있습니다. 이는 참석자들이 잘못된 시간에 도착하게 만들어 혼란을 초래할 수 있습니다.

사용자 오류

사용자가 시간을 입력할 때 실수할 가능성이 큽니다. 특히 여러 시간대를 사용하는 경우, 시간 입력 과정에서 오류가 발생하기 쉽습니다. 이는 이벤트 시간이 잘못 저장되거나 표시되는 원인이 됩니다.

국제적인 시간대 문제

세계 각지에서 이벤트를 개최할 때, 각기 다른 시간대를 고려해야 합니다. 이는 시간대 간의 변환 과정에서 복잡성을 증가시키고, 잘못된 시간대 정보를 저장할 경우 큰 혼란을 초래할 수 있습니다.

마이크로소프트 익스체인지와 DST 업데이트

2007년 일광 절약 시간제(DST) 업데이트와 관련된 마이크로소프트 익스체인지의 문제는 시간대 정보 저장의 중요성을 강조합니다. 잘못된 DST 적용은 이벤트 시간의 불일치를 초래할 수 있습니다.

추천사항: 사용자 의도 시간과 위치/시간대 저장

이벤트 시간을 저장할 때는 사용자의 의도 시간(Local Time)과 위치 또는 시간대 정보를 함께 저장하는 것이 좋습니다. 이를 통해 정확한 지역 시간을 유지하면서 시간대 변환의 복잡성을 줄일 수 있습니다.

시간대 UI 문제점

시간대를 선택하고 입력하는 사용자 인터페이스는 대체로 사용하기 어렵습니다. 사용자들이 시간대를 올바르게 선택하지 못하면 이벤트 시간이 잘못 저장될 위험이 큽니다.

함께 읽으면 좋은 참고 자료

  • 시간대 관리의 복잡성 이해하기
  • 데이터베이스에서 시간 처리의 베스트 프랙티스
  • 국제 이벤트 계획 시 고려해야 할 사항들

[출처] Storing Times for Human Events