데비안 리눅스 설치 후 필수 설정 4 – NTP 시간 동기화
데비안 리눅스 서버 설치 후 반드시 진행해야 하는 필수 설정 네번째, NTP를 이용한 네트워크 시간 동기화 설정 방법과 timedatectl 사용 방법에 대해 설명한다.
윈도우와 마찬가지로, 데비안 리눅스 역시 설치한 후 필수적으로 해야 하는 설정들이 몇 가지 있다. 그 중, (필자 생각으로는) 마지막인, NTP 설정에 대해 알아보자.
NTP(Network Time Protocol)이란
NTP는 네트워크를 이용해 시간 정보를 주고 받는 프로토콜이다. 컴퓨터의 시간은 컴퓨터 메인보드에 내장된 자체 시계를 이용해 유지되긴 하지만, 시간이 지날수록 실제 시각과 오차가 발생하게 된다. 이를 방치할 경우 간단하게는 로그 분석 등을 진행할 때 귀찮아 지는 것에서 시작해, 어플리케이션에 따라 서버의 동작에도 영향을 줄 수 있는 문제가 발생할 수 있다.
이 때문에, NTP를 이용해 신뢰할 수 있는 타임서버로부터 시간 데이터를 받아, 로컬 시계를 계속 동기화 해 주는 작업이 꼭 필요하다.
NTP 클라이언트 설치 절차
데비안 리눅스의 많은 패키지들 중에서 시간과 관련된 기능들을 제공하는 ntpdate
라고 하는 패키지가 있다. 이 패키지를 이용해 NTP를 사용할 수 있도록 설정해 보겠다.
newuser@debian:~$ sudo apt-get install ntpdate 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다... 완료 상태 정보를 읽는 중입니다... 완료 The following additional packages will be installed: ntpsec-ntpdate ntpsec-ntpdig python3-ntp 다음 새 패키지를 설치할 것입니다: ntpdate ntpsec-ntpdate ntpsec-ntpdig python3-ntp 0개 업그레이드, 4개 새로 설치, 0개 제거 및 0개 업그레이드 안 함. 172 k바이트 아카이브를 받아야 합니다. 이 작업 후 599 k바이트의 디스크 공간을 더 사용하게 됩니다. 계속 하시겠습니까? [Y/n] Y 받기:1 http://deb.debian.org/debian bookworm/main amd64 python3-ntp amd64 1.2.2+dfsg1-1+deb12u1 [88.9 kB] 받기:2 http://deb.debian.org/debian bookworm/main amd64 ntpsec-ntpdig amd64 1.2.2+dfsg1-1+deb12u1 [31.9 kB] 받기:3 http://deb.debian.org/debian bookworm/main amd64 ntpsec-ntpdate amd64 1.2.2+dfsg1-1+deb12u1 [29.0 kB] 받기:4 http://deb.debian.org/debian bookworm/main amd64 ntpdate all 1:4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1 [22.0 kB] 내려받기 172 k바이트, 소요시간 0초 (2,247 k바이트/초) Selecting previously unselected package python3-ntp. (데이터베이스 읽는중 ...현재 33821개의 파일과 디렉터리가 설치되어 있습니다.) Preparing to unpack .../python3-ntp_1.2.2+dfsg1-1+deb12u1_amd64.deb ... Unpacking python3-ntp (1.2.2+dfsg1-1+deb12u1) ... Selecting previously unselected package ntpsec-ntpdig. Preparing to unpack .../ntpsec-ntpdig_1.2.2+dfsg1-1+deb12u1_amd64.deb ... Unpacking ntpsec-ntpdig (1.2.2+dfsg1-1+deb12u1) ... Selecting previously unselected package ntpsec-ntpdate. Preparing to unpack .../ntpsec-ntpdate_1.2.2+dfsg1-1+deb12u1_amd64.deb ... Unpacking ntpsec-ntpdate (1.2.2+dfsg1-1+deb12u1) ... Selecting previously unselected package ntpdate. Preparing to unpack .../ntpdate_1%3a4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1_all.deb ... Unpacking ntpdate (1:4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1) ... python3-ntp (1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... ntpsec-ntpdig (1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... ntpsec-ntpdate (1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... ntpdate (1:4.2.8p15+dfsg-2~1.2.2+dfsg1-1+deb12u1) 설정하는 중입니다 ... Processing triggers for man-db (2.11.2-2) ...
NTP 설정
정상적으로 설치가 됐으면 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: 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'.
정상적으로 설치가 되긴 했으나 아직 몇가지 설정을 더 해주어야 한다. 먼저, 아래에 나타난 경고 메시지 부터 없애보도록 하겠다. (경고 메시지가 나타나지 않았다면 넘어가도 무방하다.)
RTC 기준 시간 설정
sudo timedatectl set-local-rtc 0이 명령은 시스템의 하드웨어 시계의 기준을 UTC로 변경해 주는 명령이다. 이를 통해 리눅스 시스템은 설정된 표준 시간대를 하드웨어 시계를 기준으로 사용하게 된다. timedatectl
을 입력해서, 경고 메시지가 사라졌는지 확인해 보자.
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
경고 메시지가 사라진 것이 보인다. 이제 나머지 NTP 설정을 진행 하도록 한다.
사용자의 표준 시간대 설정
위의 예에서는 Time zone
이 Asia/Seoul (KST, +0900)
로 표시되고 있다. 만약 다른 시간대를 사용하고 싶다거나, 원하는 시간대가 아닐 경우 시간대를 변경 해 주어야 한다. 사용 가능한 시간대 목록을 확인하기 위해 다음과 같이 입력해 보자.
시스템에서 사용 가능한 시간대의 목록이 좌라락 펼쳐진다. (이 문서에서는 목록이 너무 길어 표시하지 않는다.) 이 중 원하는 시간대를 찾아 아래의 명령과 같이 적용시켜 주면 된다.
sudo timedatectl set-timezone Asia/Seoul이렇게 하면 사용자 시간대가 대한민국 표준시로 변경 된다. 다른 시간대를 원할 경우, list-timezones을 통해 확인한 시간대 이름을 Asia/Seoul
자리에 대신 넣어주면 된다.
NTP 동기화 설정 및 NTP 서버 추가
시간 동기화에 사용할 NTP 서버주소와 기타 설정 정보는 아래의 파일에 저장 되어 있다.
/etc/systemd/timesyncd.conf
이 파일의 내용을 에디터를 이용해 수정해 주면 된다. 필자는 nano를 이용해 파일을 수정해 보겠다.
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 서버에서 시간정보를 수신하는데 걸리는 시간 제한 값. 5의 의미는, 시간 정보를 받아오는데 5초 이상이 걸린다면, 해당 NTP 서버를 사용하지 않겠다는 의미이다.
- PollIntervalMinSec
- NTP 서버에 시간을 요청하는 최소 시간 간격
- PollIntervalMaxSec
- NTP 서버에 시간을 요청하는 최대 시간 간격
- ConnectionRetrySec
- NTP 서버에 연결이 실패했을 경우 재 시도하는 간격
- SaveIntervalSec
- 현재 시간 상태를 디스크에 저장하는 주기
[Time]
항목 내부의 모든 #
을 삭제해 준다. 마지막으로 Ctrl+X를 눌러 파일을 저장해 주면 되겠다.
# 수정된 timesyncd.conf의 예
# 어쩌고.....
# 저쩌고.....
# 주저리.....
# .....
[Time]
NTP=192.168.256.257
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 서비스 활성화
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.servicetimesyncd 서비스의 동작상태가 표시되며, 마지막으로 시간을 가져온 시각과 가져온 서버 정보들이 표시된다. 해당 내용이 있다면, 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를 사용해야 하는 이유는?
- 컴퓨터 메인보드에 내장된 시계의 정확도는 배터리와 온도등의 영향을 받는다. 때문에 실제 시간과의 오차가 계속해서 발생하게 된다. 이를 방치할 경우 여러가지 문제점이 발생할 수 있다.
- 하드웨어 시계를 UTC로 맞춰야 하는 이유는?
- OS에서 설정된 시간대는 가변적이다. 때문에 하드웨어 시간을 UTC에 맞추고 OS에서 사용자 시간대로 변환해서 표시하는 방식이 혼동을 방지할 수 있다.
- 시간 갱신 간격은 짧을 수록 좋은가?
- 필자는 약 1시간 정도를 권장한다. 너무 짧으면 네트워크와 시스템의 부하가 상승한다.
- 하드웨어 시계의 정확도가 너무 나쁠경우 조치 방법은?
- 하드웨어 시계에 클럭을 공급하는 수정발진자는 온도에 영향을 많이 받는다. 시스템의 온도를 일정하게 유지시켜 주어야 한다. 또한, 메인보드의 백업 배터리의 전압이 낮을 경우에도 문제가 발생한다. 배터리를 교체해 본다.
- 해외의 NTP 서버는 부정확한가?
- 해외에 위치한 서버와 통신을 위해서는 국내 서버에 비해 시간이 더 걸린다. 하지만 NTP는 시간 보정을 위한 프로토콜로, 전송지연에 대해서도 대응할 수 있도록 설계되었다. 때문에 해외의 NTP 서버를 사용해도 문제는 없다. 하지만 시간이라는 특성 상 조금이라도 빠른 응답을 원한다면 국내의 서버를 사용할 것을 권한다.
- NTP보다 더 정밀한 시간 보정이 필요할 경우 방법은
- NTP의 정확도를 향상시켜 좀 더 정밀한 시간 정보를 받아오기 위한 PTP(Precision Time Protocol) 프로토콜을 사용한다. 마이크로초 이하의 정확도를 가지며, 방송장비들의 싱크를 맞추는 데에도 사용한다.