Architecture Decision Record

Active theme: Light

← 의사결정 기록 예시

타임스탬프 형식

목차:

요약

이슈

우리는 타임스탬프와, 모든 우리 시스템 및 서드파티 시스템에서 잘 작동하는 일관된 타임스탬프 형식을 사용하여 일이 언제 일어나는지 추적할 수 있기를 원합니다.

우리는 서로 다른 타임스탬프 형식을 가진 시스템과 상호작용합니다:

  • JSON 메시지에는 네이티브 타임스탬프 형식이 없으므로 타임스탬프를 문자열로 변환하고 문자열을 타임스탬프로 변환하는 방법, 즉 직렬화/역직렬화 방법을 선택해야 합니다.

  • 일부 애플리케이션은 UTC 시간이 아니라 현지 시간을 사용하도록 설정되어 있습니다. 이는 현지 시간에 기반한 이벤트를 트리거하는 프로젝트처럼 현지 시간에 맞춰야 하는 프로젝트에 편리할 수 있습니다.

  • 일부 시스템은 초 대 밀리초 대 나노초 같은 서로 다른 시간 정밀도 요구와 기능을 가지고 있습니다. 예를 들어 Linux 운영 체제의 date 명령은 기본 시간 정밀도로 초를 사용하는 반면, Nasdaq 증권 거래소는 기본 시간 정밀도로 나노초를 원합니다.

결정

우리는 나노초 정밀도의 ISO 8601 표준 타임스탬프 형식, 구체적으로 “YYYY-MM-DDTHH:MM:SS.NNNNNNNNNZ”를 선택합니다.

이 형식은 연, 월, 일, 시, 분, 초, 나노초, 그리고 Zulu 시간대 즉 UTC, GMT를 나타냅니다.

상태

결정됨.

세부 사항

가정

타임스탬프에서 문자열로 변환(직렬화)하고 문자열에서 타임스탬프로 변환(역직렬화)하기 위해 이러한 타임스탬프 텍스트 문자열을 처리해야 합니다.

우리는 일반적으로 사용하기 쉽고, 변환하기 쉽고, 사람이 읽기 쉬운 형식을 원합니다.

우리는 분석 시스템, 데이터베이스 시스템, 금융 시스템처럼 우리가 통제할 수 없는 광범위한 외부 시스템과의 호환성을 원합니다.

제약

일부 시스템에는 시간 정밀도 제한이 있습니다. 예를 들어 macOS 운영 체제의 date 명령은 시간 정밀도를 초 단위로 출력할 수 있지만 나노초 단위로는 출력할 수 없습니다.

입장

우리는 다양한 선택지를 검토했습니다:

  • Unix 에포크, 즉 하나의 증가하는 숫자.

  • 간결한 텍스트 형식 “YYYYMMDDTHHMMSSNNNNNNNNN”.

  • 현지 시간대 대 UTC 시간대 사용.

논거

일반적인 사용에서는 순수한 속도/크기보다 사람이 읽고 쓰기 쉬운 것을 중시합니다.

일반적인 사용에서는 기계 시스템에서 잘 작동하면서도 샘플 데이터 작성, JSON 출력 읽기, 로그 파일 grep 같은 수작업에도 잘 작동하는 형식을 원합니다.

고성능 컴퓨팅 같은 비전형적인 사용에서는, 선택한 어떤 텍스트 형식이든 텍스트를 프로그래밍 언어의 내장 날짜 객체 타입 같은 더 빠른 형식으로 변환하여 최적화하고자 할 것으로 예상합니다. 따라서 HPC에서는 텍스트 형식이 그다지 중요하지 않습니다.

영향

우리의 다양한 텍스트 시스템과 시간 시스템이 이 형식으로 수렴할 것입니다.

관련 항목

관련 결정

시간 차이, 즉 지속 시간을 추적하는 빠르고 쉬운 방법도 원할 수 있습니다. 이는 Unix 에포크 타임스탬프로 쉽습니다.

관련 요구사항

Splunk, Sumo, ELK 등을 위한 특정 종류의 로깅 메시지 스탬프에 대한 관련 요구사항이 있는 경우처럼, 결정을 조정하고자 할 수 있습니다.

관련 산출물

언어별 포매터와 파서:

Rosetta Code 예제:

SixArm 예제:

관련 원칙

쉽게 되돌릴 수 있음. Unix 에포크 같은 다른 형식으로 꽤 쉽게 바꿀 수 있습니다.

섣부른 최적화를 미룸. 일반적인 사용에서는 대시와 콜론을 사용하는 형식처럼 몇 글자 더 늘어나는 것은 그다지 신경 쓰지 않습니다.

메모

여기에 메모를 추가하십시오.