<aside>
</aside>
안녕하세요. “그 사람”입니다.
📍 개요
- 제목의 말을 하고 하루 뒤 서버 시간과 달라지는 버그를 겪게 됨
- 처음엔 서버 시간과 동일했으나 나중엔 최대 3초나 차이가 나게 됨
- 로컬 시간을 서버 시간에 동기화하기로 결정!
🎈 현재 상황
- 현재 퀴즈 시작 시간, 종료 시간을 서버의 Date.now()로 결정하고 있습니다.
- 이를 통해 모든 클라이언트를 동기화하고 있습니다.
🕝 Date.now()는 어떤 원리인가
- data.now는 UTC 기준으로 1970년 1월 1일 0시 0분 0초부터 현재까지 경과된 밀리초를 반환합니다.
- 그럼 이 Unix epoch time은 어디서 받아 오는가?
- 내부적으로는 운영 체제(OS)에서 제공하는 시스템 시간 API를 활용
- Windows:
GetSystemTimeAsFileTime
- Linux/Unix:
gettimeofday
또는 clock_gettime
- OS에서는 어떻게 현재 시간을 아는가?
NTP
(Network Time Protocol)
- NTP 서버에 현재 시간을 요청하는 방식입니다.
- NTP 서버는 여러 개입니다(윈도우에서는 NTP를 설정할 수 있습니다)
- 동기 주기
- 최초 클럭 동기는 5~10분 동안 모두 6번의 시간 교환을 합니다.
- 그 후 매 10분 마다 메세지 교환을 통해 클럭 수정합니다.
RTC
(Real Time Clock)
- 컴퓨터에 들어있는 부품입니다.
- 인터넷이 없을 때 사용하는 방식입니다.
- RTC 모듈은 자체적인 배터리가 있어 컴퓨터를 꺼도 돌아갑니다.
- 언제 시간이 달라지는가?
- 간헐적으로 발생하므로 재현하기 어려운 문제입니다.
- 어쨌든 현재 기술로는 완벽한 시간 동기화는 불가능하며,
모든 기기가 실제로는 다른 시간으로 돌아간다는 것입니다.