일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 백준
- 리액트
- 다이나믹프로그래밍
- 자바스크립트
- 포이마웹
- 익스프레스
- JS
- 코딩테스트
- HTML5
- 리액트댓글기능
- 안드로이드 스튜디오
- 백준알고리즘
- 프로그래머스JS
- css기초
- 백준구현문제
- 프로그래머스코테
- 프로그래머스
- 알고리즘
- 리액트커뮤니티
- dp알고리즘
- HTML
- 백준nodejs
- 몽고DB
- 백준골드
- JS프로그래머스
- js코테
- 백준구현
- 코테
- CSS
- 백준js
- Today
- Total
개발새발 로그
[2023-09-21] TIL - 컴퓨터 시간 원리 본문
컴퓨터 시간
우리가 사용하는 컴퓨터의 시간은 어떤 원리로 작동하는 것일까?
컴퓨터의 시간은 현실세계의 시간을 전산화한 것이기 때문에 시간에 대한 개념을 잘 알아야한다.
시간은 어떤 기준으로 결정될까?
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
'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 |