linux_time_utc_kst_rtc

Linux time UTC KST RTC

이 글은 컴퓨터의 시간 설정에 대한 글입니다.

일단 컴퓨터에는 내장된 시계가 있습니다. 보통 바이오스에 확인 가능하며 RTC(Real-Time Clock) 이라고 불리는 시계입니다.

일반적인 x86 PC에는 메인보드에 내장되어있으며 수은전지 등으로 시간을 유지합니다.

그 다음으로 OS운영체제의 시간입니다.

OS의 시간은 최초 부팅시에 이 RTC에서 시간값을 읽어옵니다.
그리고 해당 시간으로 OS의 시간을 설정 한 이후 NTP 같은 외부 시간동기화 서버로부터 정확한 시간을 받아와서 보정을 하게 됩니다.

기본적인 시간 설정 아키텍처는 이와 같습니다.

이럴때 문제가 되는 부분이 바로 지역 시간 입니다.

세계는 지역별로 시간이 다릅니다. 그래서 표준시 라는게 정해져 있는데 세계 표준 협정시 라고 일컫는 UTC(Universal Time, Coordinated) 입니다.

과거에는 GMT(Greenwich Mean Time) 이라는게 존재했습니다. 그리니치 천문대를 기준으로 하는 태양시 입니다. 지구의 경도가 그리니치 천문대를 기준 0도로 잡고 360도로 나눈것을 시간에 적용한것입니다.

하지만 UTCGMT간에 약간의 차이가 존재하는데 이것은 GMT는 지구자전속도를 기준으로 하루 24시간을 나누기 때문에 발생하는 문제인데 지구 자전속도가 아주 미세하게 조금씩 느려지고 있기 때문에 매일매일 24시간이 조금씩 길어지는 문제가 있습니다.

그래서 세슘원자의 진동수를 기준으로 하는 UTC를 새롭게 정의한것입니다.
사실 UTCGMT 둘간의 시간차이는 정말 미미할정도로 차이나기 때문에 거의 같다고 봐도 무방합니다.

어찌되었든 표준시간은 이렇게 정해졌는데 지역마다 시간은 다를수밖에 없습니다. 지구는 둥글고 해가 들어오는 지역은 시간마다 다르기 때문이죠.
그래서 지구 경도를 기준으로 표준시 + 지역시 형태로 시간을 정하게 되었습니다.

우리나라의 경우 UTC+09:00 이라고 표현하는 KST(Korea Standard Time) 을 사용하는데 표준시에서 9시간 빠른시간이라고 보면 된다.
즉 영국이 0시일때 한국은 아침 9시인것이다.

이렇다 보니 IT기기의 시간설정에도 보통 local time 을 설정하게 된다.
당연한 얘기지만 대한민국에 사는 사람이 쓰는 컴퓨터는 당연히 대한민국시간으로 설정하기 때문이다.

그러나 세계화, 국제화 시대인 요즘엔 이게 살짝 문제가 되기 시작한다.

컴퓨터의 시간은 KST로 셋팅되어있는데 이 컴퓨터에서 제공하는 서비스를 이용하는 사람이 만약 미국에 있는 사람이라면?

즉 보는 사람의 시간을 고려해야하는 상황이 온것이다.

그래서 이제는 대부분의 시스템들이 시간을 표준시인 UTC로 설정을 하고 사용자의 locale 즉, 지역에 따라 보정하여 보여주는 방식을 채택하게 된 것이다.

  • Windows 는 기본적으로 RTC를 사용합니다.
  • Linux는 기본적으로 RTC + local time을 사용합니다.

이 차이는 Linux는 RTCUTC로 인식하기 때문입니다.

즉 대한민국에서 RTC가 00:00 으로 셋팅된 시스템을 윈도우 부팅하면 00:00으로 나오지만
리눅스로 부팅하면 09:00으로 나옵니다. 다만 리눅스 시스템도 부팅후에 NTP서버와 동기화를 수행하므로 다시 제대로 된 시간으로 변경되게 됩니다.

root@server:~# timedatectl 
               Local time: Thu 2021-05-06 00:43:18 KST     # <- 현재 OS에서의 시간
           Universal time: Wed 2021-05-05 15:43:18 UTC     # <- UTC
                 RTC time: Wed 2021-05-05 15:43:19         # <- 메인보드 RTC의 시간
                Time zone: Asia/Seoul (KST, +0900)         # <- OS에 설정된 timezone
System clock synchronized: yes                             # <- RTC와 OS시간을 동기화 할지 여부
              NTP service: active                          # <- NTP 동기화 사용 여부
          RTC in local TZ: no                              # <- RTC를 localtime으로 사용하는지 여부
root@server:~#

그럼 처음부터 RTC를 localtime으로 인식하면 되는게 아닌가 싶습니다.

그래서 그 설정을 변경해주고자 합니다.

변경하는 방법은 아래와 같습니다.

$ timedatectl set-local-rtc yes

RTClocaltime 으로 사용하는 설정입니다.

이렇게 설정하게 되면 이제부터는 반대로 UTC를 계산할때 RTC에서 localtime09:00을 뺀 시간으로 계산하게 됩니다.

root@talk:~# timedatectl set-local-rtc yes
root@talk:~# timedatectl 
               Local time: Thu 2021-05-06 01:38:28 KST
           Universal time: Wed 2021-05-05 16:38:28 UTC
                 RTC time: Thu 2021-05-06 01:38:28
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
         This mode cannot be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

다만 이렇게 셋팅하게 될 경우 여타 다른 프로그램 사용중 문제가 발생할 수 있음을 경고 하는 문구가 나오게 됩니다.

로그인하면 댓글을 남길 수 있습니다.
  • linux_time_utc_kst_rtc.txt
  • 마지막으로 수정됨: 2021/05/05 16:40
  • 저자 koov