데비안 리눅스 필수 설정 4: NTP 시간 동기화 설정

컴퓨터의 시계는 실제 시각과 차이가 발생한다. 데비안 리눅스에서 NTP 서버와 시간 동기화를 구성하기 위해 timesyncd.conf를 수정하는 방법과 timedatectl 명령으로 시스템 시각과 표준 시간대 정보를 확인·관리하는 방법을 알아본다.

NTP(Network Time Protocol)란

NTP는 네트워크에 연결된 컴퓨터와 서버가 서로 시간 정보를 주고받아 시스템 시계를 동기화하는 프로토콜이다. NTP 클라이언트는 타임 서버와 타임스탬프를 교환하고, 이 과정에서 측정한 시간 차이와 네트워크 왕복 지연을 바탕으로 시스템 시계를 보정한다.

컴퓨터의 시계는 메인보드의 클럭 발생기를 통해 시간의 흐름을 측정한다. 하지만 컴퓨터에 내장된 클럭 발생기는 원자시계 수준의 정밀도를 가지고 있지는 못하다. 때문에 실제 시각과 컴퓨터의 시각에 차이가 발생하게 된다.

시간 오차를 방치하면 간단하게는 로그 분석이 귀찮아지는 것부터 시작해 인증서 검증, 예약 작업, 데이터베이스 처리와 같이 정확한 시각을 전제로 동작하는 기능에 문제가 발생할 수 있다.

이 때문에 NTP 클라이언트를 이용해 신뢰할 수 있는 타임 서버로부터 시간 정보를 주기적으로 받아 시스템 시계를 계속 동기화해 주는 작업이 반드시 필요하다.

timedatectl 설정

데비안 리눅스 시스템을 관리하는 systemd에는 시스템의 시각과 시간대 설정을 관리하는 timedatectl이 포함된다. 때문에 보통 timedatectl을 별도로 설치할 필요는 없다.

콘솔에서 timedatectl을 입력하면 현재 시스템 시각과 표준 시간대, RTC 설정 및 네트워크 시간 동기화 상태를 확인할 수 있다.

newuser@debian:~$ timedatectl
                       Local time: 수 2024-11-06 00:03:33 KST
                   Universal time: 화 2024-11-05 15:03:33 UTC
                         RTC time: 수 2024-11-06 00:03:33
                        Time zone: Asia/Seoul (KST, +0900)
       System clock synchronized: yes
                     NTP service: inactive
                 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'.

만약 timedatectl을 입력했을 때 명령을 찾을 수 없다는 메시지가 나타난다면, 다음 명령으로 systemd 패키지를 재설치한다.

sudo apt-get install --reinstall systemd

일단 보기에는 잘 돌아가는 듯 보여도 몇 가지 설정을 더 해 주어야 한다. 먼저 아래에 나타난 경고 메시지부터 없애 보도록 하겠다. 경고 메시지가 나타나지 않았다면 다음 과정으로 넘어가도 무방하다.

RTC 기준 시간 설정

sudo timedatectl set-local-rtc 0

이 명령은 RTC(시스템 하드웨어 시계)를 UTC(국제 표준시) 기준으로 저장하도록 한다. 명령을 실행하면 현재 시스템 시각을 기준으로 RTC도 UTC 시각에 맞춰진다. 이후 사용자에게 표시되는 현지 시각은 시스템에 설정된 표준 시간대(Time zone)를 RTC 시각을 기준으로 계산해 표시한다.

timedatectl을 입력해 RTC 설정과 경고 메시지가 사라졌는지 확인해 보자.

newuser@debian:~$ sudo timedatectl set-local-rtc 0
	newuser@debian:~$ timedatectl
						   Local time: 수 2024-11-06 11:11:22 KST
					   Universal time: 수 2024-11-06 02:11:22 UTC
							 RTC time: 수 2024-11-06 02:11:22
							Time zone: Asia/Seoul (KST, +0900)
		   System clock synchronized: yes
						 NTP service: inactive
					 RTC in local TZ: no

Universal timeRTC time이 같은 UTC 시각으로 표시되고, RTC in local TZno로 변경되었다. 이전에 나타났던 경고 메시지도 사라진 것을 확인할 수 있다. 이제 나머지 NTP 설정을 진행하도록 한다.

현지 표준 시간대 설정

위의 예에서는 Time zoneAsia/Seoul (KST, +0900)로 표시되고 있다. 만약 다른 시간대를 사용하고 싶다거나, 원하는 시간대가 아닐 경우 시간대를 변경해 주어야 한다. 사용 가능한 시간대 목록을 확인하기 위해 다음과 같이 입력해 보자.

timedatectl list-timezones

시스템에서 사용 가능한 시간대의 목록이 좌라락 펼쳐진다. (이 문서에서는 목록이 너무 길어 표시하지 않는다.) 이 중 원하는 시간대를 찾아 아래의 명령과 같이 적용시켜 주면 된다.

sudo timedatectl set-timezone Asia/Seoul

이렇게 하면 현지 시간대가 대한민국 표준시로 변경된다. 다른 시간대를 원할 경우, list-timezones를 통해 확인한 시간대 이름을 Asia/Seoul 자리에 대신 넣어주면 된다.

NTP 동기화 설정 및 NTP 서버 추가

시간 동기화에 사용할 NTP 서버 주소와 기타 설정 정보는 아래의 파일에 저장되어 있다.

/etc/systemd/timesyncd.conf

이 파일의 내용을 에디터를 이용해 수정해 주면 된다.

sudo nano /etc/systemd/timesyncd.conf
...(생략)...
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60

파일의 끝부분 정도에 위치한 [Time] 부분에 설정을 적어 주면 된다. 참고로 #으로 시작하는 줄은 주석 처리되어 무시되는 줄이다. 각각의 항목은 다음과 같다.

NTP
주로 사용할 NTP 서버의 주소를 적어 준다.
FallbackNTP
주로 사용할 NTP 서버와 통신에 문제가 생겼을 경우 사용할 예비 NTP 서버의 주소들을 적어 준다.
RootDistanceMaxSec
NTP 서버가 보고하는 누적 지연과 오차를 바탕으로 계산한 root distance의 최대 허용값
PollIntervalMinSec
NTP 서버에 시간을 요청하는 최소 시간 간격
PollIntervalMaxSec
NTP 서버에 시간을 요청하는 최대 시간 간격
ConnectionRetrySec
NTP 서버에 연결이 실패했을 경우 재시도하는 간격
SaveIntervalSec
현재 시간 상태를 디스크에 저장하는 주기

[Time] 항목 내부의 모든 #을 삭제해 준다. 마지막으로 Ctrl+X를 눌러 파일을 저장해 주면 되겠다.

# 수정된 timesyncd.conf의 예
...(전략)...
[Time]
NTP=192.168.123.123
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048
ConnectionRetrySec=30
SaveIntervalSec=60

NTP 서비스 활성화

아래의 명령을 입력해 NTP 서비스를 활성화시키고 자동으로 시간 정보를 받아오게 한다.

sudo timedatectl set-ntp true

서비스 재시작

sudo systemctl restart systemd-timesyncd.service

서비스를 재시작해 주면 된다. 작업이 완료된 후, timedatectl을 입력해서 상태를 확인해 본다.

newuser@debian:~$ timedatectl
                       Local time: 수 2024-11-06 00:03:33 KST
                   Universal time: 화 2024-11-05 15:03:33 UTC
                         RTC time: 수 2024-11-06 00:03:33
                        Time zone: Asia/Seoul (KST, +0900)
       System clock synchronized: yes
                     NTP service: active
                 RTC in local TZ: no

위와 같이 표시된다면, NTP 서비스 설정이 정상적으로 이루어진 것이다.

NTP 동작 확인

마지막으로, NTP가 실제로 잘 동작하고 있는지를 확인해 보기로 한다.

sudo systemctl status systemd-timesyncd.service

timesyncd 서비스의 동작 상태가 표시되며, 마지막으로 시간을 가져온 시각과 가져온 서버 정보들이 표시된다. 해당 내용이 있다면, NTP가 정상적으로 동작하며 시간을 동기화하고 있다는 뜻이다.

newuser@debian:~$ sudo systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-11-06 12:29:07 KST; 7min ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 1650 (systemd-timesyn)
     Status: "Contacted time server 121.174.142.82:123 (0.debian.pool.ntp.org)."
      Tasks: 2 (limit: 19041)
     Memory: 1.4M
        CPU: 33ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─1650 /lib/systemd/systemd-timesyncd

FAQ

NTP를 사용해야 하는 이유는?
NTP는 컴퓨터의 시스템 시계를 정확한 기준 시각에 맞추기 위해 사용한다. 컴퓨터의 클럭은 소자 자체의 오차와 온도 등의 영향으로 실제 시각과 조금씩 차이가 벌어질 수 있다. 이를 방치하면 여러 장비의 로그 순서가 어긋나고, 인증서 검증이나 예약 작업, 데이터베이스 처리처럼 정확한 시각을 전제로 동작하는 기능에도 문제가 발생할 수 있다.
데비안 리눅스에서 NTP 동기화를 활성화하는 방법은?
sudo timedatectl set-ntp true를 실행하면 systemd가 인식한 네트워크 시간 동기화 서비스를 활성화할 수 있다. 사용할 수 있는 서비스가 없다는 오류가 발생한다면 sudo apt-get install systemd-timesyncdsystemd-timesyncd를 설치한다.
NTP 동기화가 정상적으로 이루어졌는지 확인하는 방법은?
timedatectl을 실행했을 때 System clock synchronizedyes, NTP serviceactive로 표시되는지 확인한다. systemd-timesyncd를 사용한다면 timedatectl timesync-status를 입력해 현재 접속한 NTP 서버와 시간 오차, 네트워크 지연 및 폴링 간격을 확인할 수 있다.
하드웨어 시계를 UTC로 설정해야 하는 이유는?
OS의 표준 시간대는 사용 지역과 설정에 따라 달라질 수 있으며, 일광 절약 시간제를 적용하는 지역에서는 현지 시각도 변할 수 있다. RTC를 UTC 기준으로 유지하고 운영체제가 설정된 표준 시간대를 적용해 현지 시각을 계산하도록 하면 시간대 변경으로 인한 혼동을 줄일 수 있다.
RTC와 시스템 시계는 무엇이 다른가?
RTC는 컴퓨터가 꺼진 동안에도 배터리를 이용해 시각을 유지하는 하드웨어 시계다. 시스템 시계는 컴퓨터가 동작하는 동안 운영체제 커널이 하드웨어 카운터를 바탕으로 관리하는 시계다. 부팅할 때 RTC의 시각을 시스템 시계의 초기값으로 사용할 수 있지만, 두 시계가 항상 같은 클럭을 이용하는 것은 아니다.
NTP 시간 갱신 간격은 짧을수록 좋은가?
반드시 그렇지는 않다. 동기화 간격이 지나치게 짧으면 정확도 향상은 크지 않은 반면 NTP 서버와 네트워크에 불필요한 요청을 늘릴 수 있다. systemd-timesyncdPollIntervalMinSecPollIntervalMaxSec 사이에서 상태에 따라 요청 간격을 자동으로 조절하므로 일반적인 서버에서는 기본값을 사용해도 충분하다. 필자는 1시간 간격을 권장한다.
하드웨어 시계의 오차가 너무 크면 어떻게 해야 하는가?
컴퓨터를 껐다가 다시 켤 때마다 시각이 초기화되거나 크게 어긋난다면 먼저 메인보드의 RTC 백업 배터리를 점검하고 필요하면 교체한다. 온도와 습도의 변화도 수정 발진자의 오차에 영향을 줄 수 있다.
해외 NTP 서버를 사용하면 시간이 부정확해지는가?
해외 NTP 서버라고 해서 반드시 부정확한 것은 아니다. NTP는 서버와 클라이언트 사이의 왕복 지연을 측정해 시간 차이를 계산한다. 다만 통신 경로가 길고 지연의 비대칭이나 변동이 크면 오차가 증가할 수 있으므로, 서버의 품질이 비슷하다면 네트워크 지연이 짧고 안정적인 서버를 우선 사용하는 것이 좋다. 하나의 서버만 지정하기보다 신뢰할 수 있는 여러 서버를 함께 지정하는 편이 안전하다.
국내에서 사용할 수 있는 NTP 서버가 있는가?
국내에서 운영되는 서버를 선택하려면 NTP Pool Project의 한국 풀인 kr.pool.ntp.org를 사용할 수 있다. 개별 서버의 주소와 운영 상태는 바뀔 수 있으므로 특정 IP 주소를 직접 고정하기보다 풀 도메인을 사용하는 것이 관리에 유리하다. 필요에 따라 0.kr.pool.ntp.org, 1.kr.pool.ntp.org와 같은 주소를 여러 개 지정할 수도 있다. 국내 타임서버 리스트는 http://time.ewha.or.kr/domestic.html에서 확인할 수 있다.
NTP보다 정밀한 시간 동기화가 필요하면 어떻게 해야 하는가?
NTP보다 높은 정밀도가 필요한 로컬 네트워크에서는 PTP를 사용할 수 있다. PTP는 NTP의 정확도를 단순히 높인 방식이 아니라 정밀한 시각 동기화를 위해 별도로 설계된 프로토콜이다. 하드웨어 타임스탬프와 PTP를 지원하는 네트워크 장비를 함께 사용하면 마이크로초 이하의 정확도를 구현할 수 있으며, 방송 장비의 영상·음향 동기화와 산업 제어 시스템 등에도 사용된다.

갱신 내역

  1. 최초 게시
  2. 1차 수정
  3. 2차 수정 및 주소 이전 (https://www.EQMaker.kr/)