개발새발 로그

[2023-09-21] TIL - 컴퓨터 시간 원리 본문

TIL

[2023-09-21] TIL - 컴퓨터 시간 원리

이즈흐 2023. 9. 21. 22:38

컴퓨터 시간

우리가 사용하는 컴퓨터의 시간은 어떤 원리로 작동하는 것일까?

컴퓨터의 시간은 현실세계의 시간을 전산화한 것이기 때문에 시간에 대한 개념을 잘 알아야한다.

 

시간은 어떤 기준으로 결정될까?

1. 물리량 

 - 시간은 물리학 관점에서 봤을 때 시각과 시각 사이 간격을 표현하는 단위를 뜻한다.

2. 위치

 - 시간은 위치에 따라 다르게 표현된다.

3. 천문 현상

 - 지구의 자전속도의 불규칙성, 지구의 자전주기와 공전주기 등 천문 현상으로 인한 시간보정이 필요

 

협의에 따른 표현

1. 문화

 -문화에 따라 시간 표현이 다를 수 있다.

 - 태양력, 태음력, 이슬람력

2. 역사

 - 역사적 사건에 의해 시간은 다르게 표현될 수 있다.

 - 1592년 10월 4일 다음날은?(그레고리력을 사용하는 국가는 10월 5일에서 14일이 없다.)

3. 사회

 - 사회적 제도에 의해 시간은 변할 수 있다.

 - 일광 시간 절약제 - 미국

 

이처럼 많은 조건을 고려해야함

즉 문화,역사, 사회와 같이 규칙이 존재하지 않는 경우에는 어떻게 처리할까?

 

협정 세계시(UTC)

- 정밀한 원자시계를 통해 물리적인 조건을 통과하고, 윤초 보정을 기반으로 천문현상을 보정

- UTC라는 기준으로 경도에 따른 시간대를 환산한다.

- 표기법은 ISO 8601을 따른다.

 

 

컴퓨터가 시간을 표현하는 방법

- 하드웨어의 시스템 클럭을 이용

 =>특정시각(Epoch)을 기준으로 시스템 클럭의 틱을 세는 것으로 구현 => 시스템 시간

   -> 값으로 표현 => 타임스탬프

- 타임스탬프는 운영체제마다 기준시간과 단위가 다를 수 있다.

 -> 유닉스 계역 운영체제에서 시간을 표시하는 방법을 Unix Time이라 부름

 

시스템 클럭

- RTC(Real Time Clock)라는 모듈을 사용한다.

- RTC는 메인보드에 붙어있어 전원을 끄더라도 계속 작동한다.

- RTC는 카운터 회로를 통해 클럭을 발생시킨다.

 -> 카운터회로에는 결정진동자가 있다. - 결정진동자가 만드는 정확한 주파수를 이용한다.

 -> 보통 1클럭에 32.768kHz -> 32.768kHz인 이유는 계산하기 편해서

 

Unix Time

- 1970년 1월 1일 0시 0분 0초가 기준 -데니스 리치가 이유없이 정한 날짜

- 초단위로 시간이 증가

 

 

 

컴퓨터를 키면 자동으로 현재 시간을 보여준다. 현재 시간을 어떻게 알아낼까?

- 시스템 시간을 네트워크 타임 프로토콜(NTP)를 통해 동기화 할 수 있다.

- NTP 서버에 네트워크 요청을 하여 현재시간을 받을 수 있다.

- NTP 서버는 계층으로 이루어져 있으며 그 계층을 Stratum이라 부른다.

- 최상위 계층을 PRC(Primary Reference Clock)이라 부른다.

 

 

그러면 시간대를 어떻게 고려해야 할까?

국가 지역별로 시간이 다 다르다.

그리고 물리적 또는 문화적으로 시간대가 다 다르다.

 

이 문제를 해결하기 위해 이 모든 데이터를 DB에 저장해 물리적 또는 문화적으로 고려해야할 상황이 생길때 DB에 기록한다. 우리는 DB에서 데이터를 받아서 처리하기만 하면된다.

 

이 데이터를 Time Zone이라고 한다.

표기법은 대륙과 도시를 쓰는 형태이다. ex) Asiz/Seoul

보통 이 값을 ZoneId라고 부른다.

 

 

그러면 시간을 어떤 기준으로 어떻게 사용해야 할까?

- 글로벌 서비스를 운영한다면 시간이 매우 중요해진다.

예를 들어 한국 생일은 1월 17일인데 미국생일은 1월16일이다. 
이러한 경우 Time Zone을 잘못사용하여 생기는 문제이다.
이 문제를 해결하기 위해서는 시간대나 사회적 합의를 고려하지 않고, 순수하게 시간을 기록해야하는 경우가 있다.

 

순수한 시간

이처럼 시간대와 지역, 문화, 사회를 고려하지 않고 순수하게 시간을 기록해야하는 경우가 있다.

- 생일

- 기업 설립일

- 기념일

- 국경일

 

UTC

만약 Time Zone 없이 UTC로만 기록하는 경우

- 이 경우는 사건이 발생한 시각만을 고려할 대 사용한다.

- 로깅

- 감사

- 시계열 데이터

- 주식

 

TIme Zone이 적용된 시간

- 역사, 사회, 문화를 고려하여 사용자가 이용한 시각을 정확히 알아야할 때 사용한다.

- UI에 표시되는 시간을 사용자 기준으로 보여줄 때 사용

- 결제 시간

- 푸시 알림시간

- UI 시각 표시

- 캘린더

 

 

JavaScript에서는 어떻게 사용할까?

- 간단하게는 Date 객체를 사용

- 가장 유명한 moment.js는 Deprecated되어 지금은 사용할 수  없다.

 - 대체 가능한 라이브러리는 data-fns, luxon

728x90
반응형
LIST

'TIL' 카테고리의 다른 글

[2023-09-21] TIL - 함수형 프로그래밍  (0) 2023.09.21
[2023-09-21] TIL - 암호화  (0) 2023.09.21
[2023-09-21] TIL - 네트워크 기초  (0) 2023.09.21
[2023-09-20] TIL - 스코프와 클로저  (1) 2023.09.20
[2023-09-20] TIL - 메모리 심화  (0) 2023.09.20