Recent Posts
Recent Comments
게으른개발너D
컴퓨터 시간 본문
컴퓨터 시간은 어떤 원리로 동작할까?
시간이 결정되는 법칙은 세 가지가 있다.
1. 물리량
- 시간은 물리학 관점에서 봤을 때 시각과 시각 사이 간격을 표현하는 단위를 뜻한다.
- ex) 지금 이 순간 (Instant)은 빅뱅 (Epoch) 이후 시간이 얼마나 흘렀는가?
2. 위치
- 시간은 위치에 따라 다르게 표현될 수 있다.
- ex) 경도 0도(UTC)가 정오일 때 동경 135도의 시각은? (경도상 위치)
- ex) 런던이 정오일 때 미국의 시각은? (국가, 지역)
3. 천문 현상
- 지구자전속도의 불규칙성, 지구의 자전주기와 공전주기 등 천문 현상으로 인한 시간 보정이 필요하다.
- ex) 윤초, 윤달, 윤년
물리 법칙이 아닌 협의에 따른 표현도 있다.
1. 문화
- 문화에 따라 시간 표현이 다를 수 있다.
- ex) 태양력, 태음력, 이슬람력, 에티오피아력 등
2. 역사
- 역사적 사건에 의해 시간은 다르게 표현될 수 있다.
- ex) 1582년 10월 4일 다음날은? 그레고리력을 사용하게 됨으로써 10월 5일부터 14일을 달력에서 삭제함
3. 사회
- 사회적 제도에 의해 시간은 변할 수 있다.
- ex) 일광 시간 절약제 (Summer Time)
이처럼 6가지나 되는 조건을 고려하여 시간을 표시해야 한다.
역사적 사건이나 사회적 제도같이 갑자기 규칙이 생기는 경우엔 어떻게 대응해야할까?
세계는 UTC라는 표준 시간을 정해놨다.
✨ 협정 세계시 (UTC)
- 원자 시계와 윤초 보정을 기반으로 표준화한 시각
- 모든 시간대는 UTC+0을 기준으로 확산한다.
- 대한민국의 시간은 UTC+9
- 예를들어 영국(UTC+0)이 오전 1시라면 대한민국은 오전 10시가 된다.
- 표기법은 ISO 8601을 따른다.
- 2021-03-20T09:00:00.000Z // UTC+0 기분 2021년 3월 20일 9시
- 2021-03-20T09:00:00.000+09:00 // UTC+9 (한국 시간) 기준 2021년 3월 20일 9시
- 가운데 T는 Time을 의미하고 시간 뒤 Z는 Zulu Time을 뜻한다.
- 경도 0(Zero)의 앞글자 z를 나타내고 z는 무선 통신 용어로 Zulu라고 표현된다.
참고로 경도상 시간과 국가 시간은 다를 수 있다.
예를들어 아이슬란드의 경우 경도상 위치가 -1이지만 실제론 UTC+0 타임을 사용하고 있다.
✨ 컴퓨터가 시간을 표현하는 방법
- 하드웨어의 시스템 클럭을 이용한다.
- 특정 시각(Epoch)을 기준으로 시스템 클럭의 틱을 세는 것으로 구현된다.
- 이를 시스템 시간이라 부른다.
- 시스템 시간을 값으로 표현한 것을 타임스탬프(Timestamp)라고 부른다.
- 타임스탬프는 운영체제마다 기준 시간과 단위가 다를 수 있다.
- 유닉스 계열 운영체제에서 시간을 표시하는 방법을 Unix Time이라 부른다.
시스템 클럭의 원리
- RTC(Real Time Clock)라는 모듈을 사용한다.
- RTC는 메인보드에 붙어있어 전원을 끄더라도 계속 작동한다.
- RTC는 카운터 회로를 통해 클럭을 발생시킨다.
- 카운터 회로의 핵심 부붐인 결정 진동자가 만드는 정확한 주파수를 이용한다.
- 보통 1클럭에 32.768kHz가 발생한다.
- 32.768kHz인 이유는 1초를 계산하기 편해서.
- https://noel-embedded.tistory.com/423
Unix Time
- 1970년 1월 1일 0시 0분 0초가 기준 시각이다.
- 1970년 1월 1일인 이유는 유닉스를 개발한 데니스 리치가 그냥 이유 없이 정한 날짜이다.
- 1970년 이전 시간은 음수로 표현된다.
- 초 단위로 시간이 증가한다.
✨ 컴퓨터가 어떻게 현재 시간을 알아낼까?
- 컴퓨터를 키면 자동으로 현재 시간을 보여준다. 어떻게 알아낼까?
- 시스템 시간을 네트워크 타임 프로토콜(NTP)를 통해 동기화 할 수 있다.
- NTP 서버에 네트워크 요청을 하여 현재 시간을 받을 수 있다.
- NTP 서버는 계층으로 이루어져 있으며 그 계층을 Stratum이라고 부른다.
- 최상위 계층을 PRC(Primary Reference Clock)이라 부른다.
즉, 인터넷이 없으면 현재 시간을 받아낼 수 없다.
✨ 컴퓨터에서 시간대를 어떻게 고려해야 할까?
- 국가, 지역별로 시간이 다를 수 있다.
- 프랑스, 러시아, 미국처럼 시간대가 여러 개거나 시간대가 바뀐다면?
- 일광 시간 절약제가 실행된다면?
- Time Zone 데이터를 이용할 수 있다.
- 현실 세계에 이벤트가 발생되면 데이터베이스에 업데이트 된다.
- 표기법은 다음과 같다.
- Asia/Seoul
- America/New_York
- 대륙/도시 형태를 따른다.
- 이 값은 ZoneId라고 부른다.
✨ 시간을 어떤 기준으로 사용해야 할까?
- 글로벌 서비스를 운영한다면 시간이 매우 중요해진다.
- "그냥 전부 Time Zone 적용하면 되는 것 아냐?"
- 서비스에서 사용되는 시간을 용도에 맞춰서 기록할 필요가 있다.
1. 순수한 시간
- 나의 생일은?
- 8월 21일
- "내가 한국에서 8월 21일에 태어났지만 미국 시간으론 8월 20일이니 미국 생일은 8월 20일이야!"
- 시간대와 지역, 문화, 사회를 고려하지 않고 순수하게 시간을 기록해야하는 경우가 있다.
- 생일
- 기업 설립일
- 기념일
- 국경일
2. UTC
- 역사, 사회, 문화에 대한 맥락 없이 사건이 발생한 시각만을 고려할 때 사용한다.
- 로깅
- 감사
- 시계열 데이터
3. Time Zone이 적용된 시간
- 역사, 사회, 문화를 고려하여 사용자가 이용한 시각을 정확히 알아야할 때 사용한다.
- UI에 표시되는 시간을 사용자 기준으로 보여줄 때 사용한다.
- 결제 시각
- 푸시 알림 시간
- UI 시각 표시
- 캘린더
{
"userId": 1,
"name": "이장우",
"zoneId": "Asia/Seoul", // Time Zone을 위한 Zone Id
"birthdate": "1986-06-01", // 순수한 시간
"createdAt": "2021-03-20T04:59:25Z", // 기준 시간 UTC
"updatedAt": "2021-03-20T05:12:38Z",
"posts": [
{
"postId": 1,
"pubLishedAt": "2021-03-20T06:00:00Z", // 기준 시간 오전 6시에 발행됨
//publishedAt은 user의 zondId에 따라 다르게 보일 수 있다.
}
]
}
✨ JavaScript에서 사용법
- 간단하게 사용하면 Date 객체를 사용할 수 있다.
- 좀 복잡하게 사용하거나 Time Zone을 적용해야하는 경우 가장 유명한 moment.js을 사용하면 되지만 지금은 Deprecated 되었다.
- 대체 라이브러리로 date-fns, luxon을 사용할 수 있다.
'CS' 카테고리의 다른 글
RESTful API (0) | 2024.01.21 |
---|---|
HTTP 상태 코드 (0) | 2024.01.18 |
[Design Pattern] Flux 패턴 (1) | 2023.09.02 |
[Design Pattern] Atomic 패턴 (0) | 2023.09.02 |
네트워크 기초 (0) | 2023.08.04 |
Comments