컴퓨터 시간

Jun 2k (Jun2)·2023년 9월 21일

CS공부

목록 보기
2/8
post-thumbnail

컴퓨터 시간은 어떻게 동작하는 걸까?

시간의 다양한 정의 방법

  • 물리법칙

    1. 물리량
      시간은 물리학 관점에서 시각 간 간격을 표현하는 단위를 뜻함
      예) 어제보다 오늘은 24시간이 더 흘렀다

    2. 위치
      시간은 위치에 따라 다르게 표현됨
      예) 미국과 한국은 시차가 존재

    3. 천문 현상
      지구자전속도의 불규칙성, 지구 자전주기와 공전주기로 시간 보정 필요
      예) 윤초, 윤달, 윤년

  • 문화적표현

    1. 문화
      문화에 따라 시간표현이 다름
      예) 태양력 태음력 이슬람력

    2. 역사
      역사적 사건에 의해 시간은 다르게 표현
      예) 1592년 10월 4일 다음날? 그레고리력으로 인해 날짜 삭제 => 15일

    3. 사회
      사회적 제도에 의해 시간은 변함
      예) 일광 시간 절약제(써머타임)


표준화된 시간

협정 세계시(UTC)

원자 시계와 윤초 보정을 기반으로 표준화한 시각
모든 시간대는 UTC+0을 기준으로 환산, 대한민국은 UTC+9
예) 영국(UTC+0)이 오전 1시면 대한민국은 오전 10시
표기법은 ISO 8601을 따름


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

시스템시간

하드웨어가 시스템 클럭을 이용
특정 시각(Epoch)을 기준으로 시스템 클럭의 틱을 세는 것으로 구현

타임스탬프

시스템 시간을 값으로 표현한 것
타임스탬프는 운영체제마다 기준 시간과 단위가 다를 수 있음
유닉스 계열 운영체제에서 시간을 표시하는 방법은 Unix Time이라고 부름

시스템 클럭의 원리

RTC(Real Time Clock)이라는 모듈을 사용
이것은 메인보드에 붙어있어 전원을 끄더라도 계속 작동
RTC는 카운터 회로를 통해 클럭을 발생
=> 결정 진동자가 만드는 정확한 주파수를 사용
1클럭에 32.768kHz이 발생, 왜 이 주파수일까?

Unix Time

1970년 1월 1일 0시 0분 0초가 기준 시각
기준을 잡은 이유는 개발자 데니스 리치 자기 마음대로 지은 것
1970년 이전 시간은 음수 표현
초 단위로 시간 증가


그럼 현재 시간을 어떻게 알아낼까?

네트워크 타임 프로토콜(NTP)

시스템 시간을 네트워크 타임 프로토콜을 통해 동기화
NTP 서버에 네트워크 요청을 하여 현재 시간을 받음
이 서버는 Stratum이라는 계층으로 이루어져 있음
최상위 계층을 PRC(Primary Reference Clock)이라 부름


시간대를 어떻게 고려할까?

순수한 시간

시간대와 지역, 문화, 사회를 고려하지 않고 순수하게 시간을 기록해야 하는 경우
ex) 생일, 기업 설립일, 기념일 등

Time Zone

역사, 사회, 문화를 고려하여 사용자가 이용한 시각을 정확히 알아야 할 때 사용
UI에 표시되는 사용자 시간을 표시할 때 사용
ex) 결제 시각, 푸시 알림 시간, UI 시각 표시, 캘린더

현실 세계에 이벤트가 발생되면 업데이트가 됨
표기법은 대륙/도시 형태를 따름
ZoneId라고 부름

UTC

역사, 사회, 문화와 관계없이 사건이 발생한 시각만 고려할 때 사용
ex) 로깅, 감사, 시계열 데이터(주식)


JavaScript에서 시간 사용법

간단하게 사용하면 Date 객체로 표현 가능
유명했던 moment.js는 Deprecated되어 대체로서 date-fns, luxon을 사용 가능


😅 해당 내용은 공부하면서 정리한 글입니다. 틀린 부분이나 오해하고 있는 부분이 있다면 피드백 부탁드립니다.

관련 레퍼런스

[이선협 강사님 글]
https://kciter.so/posts/deep-dice-into-datetime

profile
유리프트 프론트엔드

0개의 댓글