Linux 서버의 시계가 실제 시간과 어긋나면 로그 순서가 뒤집히고, 예약 작업 실행 시각과 인증서 검증에도 문제가 생길 수 있습니다. 시간대만 바꾸는 것으로 시계 오차가 해결되지는 않습니다. 조직에서 허용한 NTP 서버를 chrony에 등록하고, 동기화 원천과 오차를 명령으로 확인해야 합니다.

시간대와 시계 동기화는 서로 다른 설정입니다

시간대는 동일한 순간을 서울·UTC 등 어떤 지역 시각으로 표시할지 정합니다. NTP 동기화는 서버의 실제 시계가 기준 시각에서 얼마나 벗어났는지 보정합니다. 예를 들어 시스템 시간이 9시간 차이나면 시간대 설정 문제일 수 있지만, 분 단위로 계속 밀리거나 재부팅 후 오차가 커진다면 동기화 서비스, 네트워크 또는 가상화 호스트의 시계 상태를 확인해야 합니다.

현재 상태는 먼저 읽기 전용 명령으로 기록합니다. 아래 결과에서 `Time zone`은 표시 기준이고 `System clock synchronized`는 동기화 상태를 나타냅니다. 배포판이나 시간 서비스에 따라 표시 항목은 다를 수 있으므로 chrony를 사용하는 서버에서는 `chronyc` 결과도 함께 확인합니다.

timedatectl status
date --iso-8601=seconds
chronyc tracking
chronyc sources -v

chrony 설치와 기준 서버 등록

chrony가 없다면 배포판 패키지 관리자로 설치합니다. Ubuntu·Debian 계열은 보통 `chrony`, RHEL 계열은 `chrony` 패키지를 사용합니다. 운영망에서 외부 NTP 접속을 막는 경우 공개 서버를 임의로 지정하지 말고 인프라 담당자가 승인한 사내 NTP 주소를 사용해야 합니다.

# Ubuntu / Debian 계열
sudo apt update
sudo apt install chrony

# RHEL 계열
sudo dnf install chrony

설정 파일은 배포판에 따라 `/etc/chrony/chrony.conf` 또는 `/etc/chrony.conf`에 있습니다. 기존 배포판 기본 서버 항목을 확인하고, 승인된 서버 두 대를 예시처럼 지정합니다. `iburst`는 시작 시 빠르게 표본을 모으도록 요청하는 옵션입니다. 아래 호스트명은 예시이므로 실제 환경의 주소로 교체해야 합니다.

server ntp1.example.internal iburst
server ntp2.example.internal iburst

# 부팅 초기에 큰 오차를 빠르게 보정할 필요가 있는 서버에서 검토
makestep 1.0 3

# 지원되는 커널에서 하드웨어 시계를 시스템 시각과 주기적으로 맞춤
rtcsync

`makestep 1.0 3`은 시작 후 처음 세 번의 시계 업데이트에서 오차가 1초보다 클 때 시각을 단계적으로 맞출 수 있게 합니다. 시각이 갑자기 이동하면 업무상 문제가 생기는 시스템에서는 이 설정을 그대로 적용하지 말고 애플리케이션과 운영 정책을 먼저 검토하세요. `rtcsync`는 하드웨어 시계 관리에 관한 지시이며 NTP 서버 연결 자체를 보장하지 않습니다. 설정을 바꾸기 전 파일을 백업하고, 파일 경로와 기존 배포판 주석을 확인하세요.

서비스를 다시 읽히고 동기화 여부 확인하기

서비스 단위 이름은 배포판에 따라 `chrony` 또는 `chronyd`일 수 있습니다. 설치된 단위를 확인한 뒤 해당 이름으로 재시작하고 부팅 시 자동 시작을 설정합니다. 서비스가 실행 중이라는 사실만으로 시각 동기화가 완료된 것은 아니므로 소스와 추적 정보를 추가로 확인해야 합니다.

systemctl list-unit-files '*chrony*'
sudo systemctl enable --now chrony
sudo systemctl restart chrony
systemctl status chrony --no-pager
chronyc sources -v
chronyc tracking

서비스 단위가 `chronyd`로 표시되면 위 명령의 `chrony`를 `chronyd`로 바꿉니다. `sources -v`에서 `^*`는 현재 선택된 동기화 원천, `^+`는 함께 사용할 수 있는 원천입니다. `^?`가 계속 보이거나 선택 원천이 없으면 서버 이름 해석, UDP 123번 아웃바운드 통신, NTP 서버의 응답 및 서버 측 접근 정책을 점검합니다. 운영망 방화벽은 필요한 목적지에 한해 UDP 123을 허용하도록 요청하고, 임의로 방화벽 전체를 비활성화하지 않습니다.

`tracking`의 `Reference ID`와 `Stratum`은 기준 정보, `System time`과 `Last offset`은 보정 상태를 판단하는 값입니다. 숫자 하나만으로 성공 여부를 단정하지 말고, 선택 원천이 생기는지와 오차가 시간에 따라 안정되는지 함께 관찰합니다. 허용 오차는 서비스 요구사항에 맞춰 정해야 합니다. 예를 들어 거래 시각을 밀리초 단위로 대조하는 시스템과 일반 사내 업무 서버는 같은 기준을 적용할 필요가 없습니다.

서울 시간대로 표시하고 운영 점검을 남기기

서버가 서울 기준으로 로그와 운영 화면을 표시해야 한다면 시간대를 별도로 설정합니다. 변경 뒤에는 실제 시계가 동기화됐는지 다시 확인하세요. 시간대 변경은 이미 저장된 UTC 타임스탬프를 일괄 변환하는 작업이 아니므로, 데이터베이스와 애플리케이션의 저장·표시 기준도 구분해야 합니다.

sudo timedatectl set-timezone Asia/Seoul
timedatectl status
date --iso-8601=seconds
chronyc tracking
chronyc sources -v

동기화가 되지 않을 때는 먼저 서비스 상태와 최근 로그를 확인하고, 그 다음 DNS·라우팅·방화벽 순으로 범위를 좁힙니다. 실제 서비스 단위 이름은 앞의 `systemctl list-unit-files` 결과에 맞춥니다.

systemctl status chrony --no-pager
journalctl -u chrony -n 100 --no-pager
getent hosts ntp1.example.internal

운영 기록에는 점검 시각, 시간대, 동기화 서비스 이름, 선택된 NTP 원천, 오차 추이와 조치 결과를 남기면 재부팅이나 배포 후 회귀를 확인하기 쉽습니다. chrony와 systemd-timesyncd처럼 여러 시간 동기화 서비스를 동시에 활성화하지 말고, 서버에서 관리할 단일 서비스를 정해 충돌 여부를 확인하세요. 시간 오차 문제는 표시 시간, 기준 서버 연결, 서비스 동작 상태를 나눠 점검하는 것이 핵심입니다.

소프트모아의 서비스와 포트폴리오는 softmoa.com에서 확인할 수 있습니다.

소프트모아는 해당 시스템을 구축합니다. 문의하기