오늘은 IT 인프라의 숨은 조력자, NTP(Network Time Protocol) 서버에 대해 초보자도 쉽게 따라할 수 있도록 처음부터 끝까지 살펴보겠습니다.

서버를 운영하다 보면 한 번쯤은 겪게 되는 문제가 있습니다. 바로 “서버 시간이 안 맞는다”는 것이죠. 단순히 시계가 몇 초 틀리는 것 같은데, 이게 왜 그렇게 큰 문제일까요? 특히 금융권이나 거래 시스템을 운영하는 환경에서는 이 몇 초의 차이가 때로는 수억 원의 손실로 이어지기도 합니다.

 

 

1. NTP란 무엇인가요? 서버 시간 동기화가 중요한 이유

NTP의 기본 개념

NTP(Network Time Protocol)는 네트워크에 연결된 장비들의 시간을 동기화하는 데 사용하는 프로토콜입니다. 1985년부터 사용되어 온 매우 오래된 인터넷 프로토콜 중 하나로, RFC 5905로 표준화된 NTPv4가 현재까지 사용되고 있습니다.

NTP의 동작 원리는 의외로 간단합니다. NTP 서버에 현재 시각을 물어보고, 그 응답을 받아서 컴퓨터의 시간을 조정하는 것이죠. 다만, NTP 서버는 항상 UTC(협정 세계시) 기준으로만 동작하며, 각 나라의 타임존에 맞게 변환해서 사용해야 합니다.

왜 서버 시간이 중요할까요?

전산실에 수많은 서버가 있다고 생각해보세요. 만약 각 서버의 시간이 제각각이라면 어떤 일이 벌어질까요?

  • 로그 분석이 불가능해집니다: 장애가 발생했을 때 각 서버의 로그 시간이 다르면 정확한 원인 분석이 어렵습니다
  • Kerberos 인증 실패: Active Directory 환경에서 5분 이상 시간 차이가 나면 인증이 거부됩니다
  • SSL/TLS 인증서 오류: 시간이 맞지 않으면 인증서 유효성 검증에 실패합니다
  • 금융 거래 문제: 주식, 외환 등 시간에 민감한 거래에서 정확한 타임스탬프는 법적 효력을 갖습니다
  • 분산 시스템 오류: 데이터베이스 복제, 파일 동기화 등에서 충돌이 발생합니다

특히 금융권에서는 전자금융감독규정에 따라 거래 기록의 정확한 시간 관리가 필수입니다. 시간 오차로 인한 거래 분쟁이 발생하면 큰 문제가 될 수 있기 때문이죠.

 

 

2. NTP의 계층 구조, Stratum이 뭔가요?

NTP는 피라미드 형태의 계층 구조(Stratum)를 가지고 있습니다. 이 구조를 이해하면 어떤 NTP 서버를 선택해야 하는지 알 수 있습니다.

Stratum 설명 예시
Stratum 0 원자시계, GPS 수신기 등 시간의 원천 세슘 원자시계, GPS 위성
Stratum 1 Stratum 0과 직접 연결된 서버 time.kriss.re.kr (한국표준과학연구원)
Stratum 2 Stratum 1에서 시간을 받는 서버 time.bora.net, ntp.kornet.net
Stratum 3 Stratum 2에서 시간을 받는 서버 기업 내부 NTP 서버
Stratum 16 동기화 실패 또는 접속 불가

실무 팁: 일반 사용자나 기업 내부 서버는 Stratum 2나 Stratum 3 서버를 사용하는 것이 좋습니다. Stratum 1 서버에 직접 접속하면 불필요한 부하를 주게 되고, Stratum 2 서버도 충분히 정확한 시간을 제공합니다.

 

 

3. 한국에서 사용할 수 있는 공용 NTP 서버 목록

국내에서 안정적으로 사용할 수 있는 공용 NTP 서버들을 정리했습니다.

국가 기관 및 Stratum 1 서버

서버 주소 운영 기관 비고
time.kriss.re.kr 한국표준과학연구원 세슘 원자시계 직접 연결
time2.kriss.re.kr 한국표준과학연구원 백업 서버
time.nist.gov 미국 국립표준기술연구소 해외 서버

통신사 및 기업 운영 서버 (Stratum 2)

서버 주소 운영 기관
time.bora.net LG U+
ntp.kornet.net KT
ntp2.kornet.net KT
time1.daum.net 카카오
time2.daum.net 카카오

글로벌 서비스 제공 서버

서버 주소 운영 기관
time.google.com Google
time.cloudflare.com Cloudflare
time.windows.com Microsoft
time.apple.com Apple

NTP Pool Project

특정 서버 하나를 지정하기 어려울 때는 Pool 서버를 사용하면 편리합니다. 자동으로 가장 빠르고 정확한 서버에 연결됩니다.

0.kr.pool.ntp.org
1.kr.pool.ntp.org
0.asia.pool.ntp.org
1.asia.pool.ntp.org

NTP Pool Project 한국 서버 현황에서 현재 등록된 서버들을 확인할 수 있습니다.

 

 

4. Linux에서 NTP 설정하기: ntpd vs chrony

ntpd와 chrony, 뭐가 다른가요?

Linux에서 NTP를 구성하는 방법은 크게 두 가지가 있습니다. 전통적인 ntpd와 최신 chrony입니다. RHEL 8, CentOS 8, Rocky Linux 8 이후로는 ntpd가 기본 제공되지 않고 chrony가 표준으로 채택되었습니다.

특성 ntpd chrony
동기화 속도 느림 (수 분 소요) 빠름 (수 초 내)
네트워크 불안정 대응 취약 강함
리소스 사용 상대적으로 많음 적음
가상머신 환경 시간 드리프트 문제 잘 적응
보안 해시 MD5, SHA1 SHA256, SHA512 지원
권장 환경 레거시 시스템 최신 시스템

결론: 새로운 시스템이라면 chrony를 사용하세요. 네트워크 지연이나 불안정한 환경에서도 더 빠르고 정확하게 동기화됩니다.

Chrony 설치 및 설정 (RHEL/CentOS/Rocky Linux)

Step 1: Chrony 설치

# RHEL/CentOS/Rocky Linux
sudo yum install -y chrony

# Ubuntu/Debian
sudo apt-get install -y chrony

Step 2: 설정 파일 수정

설정 파일을 편집합니다. 배포판에 따라 경로가 다릅니다:

  • RHEL/CentOS/Rocky Linux: /etc/chrony.conf
  • Ubuntu/Debian: /etc/chrony/chrony.conf
# RHEL/CentOS/Rocky Linux
sudo vi /etc/chrony.conf

# Ubuntu/Debian
sudo vi /etc/chrony/chrony.conf

기본 설정된 서버를 주석 처리하고, 한국 NTP 서버를 추가합니다.

# 기존 centos pool 서버 주석 처리
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst

# 한국 NTP 서버 추가
server time.bora.net iburst
server ntp.kornet.net iburst
server time.kriss.re.kr iburst
server 0.kr.pool.ntp.org iburst

# 드리프트 파일 경로
driftfile /var/lib/chrony/drift

# 큰 시간 차이가 있을 경우 즉시 동기화 (처음 3번까지 1초 이상 차이나면)
makestep 1.0 3

# 하드웨어 클럭과 RTC 동기화
rtcsync

# 로그 설정
logdir /var/log/chrony

iburst 옵션은 서버 시작 시 빠른 동기화를 위해 여러 패킷을 연속으로 보내는 설정입니다. 꼭 추가하세요!

Step 3: 서비스 시작 및 활성화

# 서비스 시작
sudo systemctl start chronyd

# 부팅 시 자동 시작 설정
sudo systemctl enable chronyd

# 상태 확인
sudo systemctl status chronyd

Step 4: 동기화 상태 확인

# 연결된 NTP 서버 목록 확인
chronyc sources -v

# 상세 동기화 상태 확인
chronyc tracking

chronyc sources 출력 예시:

210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* time.bora.net                 3   6   377    25   +2696us[+2696us] +/- 204ms
^- time.cloudflare.com           2   6   377    24   +3590us[+3590us] +/- 170ms
^+ ntp.kornet.net                2   6   377    26   +1835us[+1835us] +/- 141ms

chronyc tracking 출력 예시:

Reference ID    : D265E111 (time.bora.net)
Stratum         : 4
Ref time (UTC)  : Thu Nov 27 05:30:15 2025
System time     : 0.000012345 seconds fast of NTP time
Last offset     : +0.000002301 seconds
RMS offset      : 0.000037828 seconds
Frequency       : 15.658 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.046 ppm
Root delay      : 0.012934678 seconds
Root dispersion : 0.005541169 seconds
Update interval : 521.2 seconds
Leap status     : Normal

주요 지표 설명:

  • Reference ID: 동기화 중인 NTP 서버
  • Stratum: 현재 서버의 Stratum 레벨
  • System time: NTP 시간과의 차이
  • Leap status: Normal이면 정상 동기화 (Not synchronized면 실패)

기호 설명:

  • * : 현재 동기화 중인 서버 (가장 좋은 소스)
  • + : 결합 가능한 후보 서버
  • - : 결합에서 제외된 서버
  • ? : 연결 불가

 

 

5. Windows Server에서 NTP 설정하기

Windows Server는 W32Time(Windows Time) 서비스를 사용하여 시간을 동기화합니다.

도메인 환경에서의 NTP 구조

Active Directory 환경에서는 다음과 같은 계층 구조로 시간이 전파됩니다:

외부 NTP 서버 → PDC Emulator → 다른 도메인 컨트롤러 → 일반 서버/클라이언트

중요: PDC Emulator 역할을 가진 도메인 컨트롤러에서 외부 NTP 서버와 동기화를 설정해야 합니다.

PDC Emulator에서 외부 NTP 서버 설정

관리자 권한으로 명령 프롬프트(Command Prompt)를 열고 다음 명령어를 실행합니다:

REM 외부 NTP 서버 지정
w32tm /config /manualpeerlist:"time.bora.net time.windows.com" /syncfromflags:manual /reliable:yes /update

REM Windows Time 서비스 재시작
net stop w32time
net start w32time

REM 즉시 동기화 실행
w32tm /resync /rediscover

현재 동기화 상태 확인

w32tm /query /status

출력 예시:

Leap Indicator: 0(no warning)
Stratum: 3
Source: time.bora.net
Reference ID: 0xD2A5C2A0
Last Successful Sync Time: 2025/11/27 14:30:25

Source가 Local CMOS Clock으로 표시되면 외부 시간과 동기화되지 않고 있다는 의미입니다. 설정을 다시 확인해보세요.

독립형(Workgroup) 서버 설정

도메인에 가입되지 않은 서버는 다음과 같이 설정합니다:

w32tm /config /manualpeerlist:"time.bora.net,0x8 time.windows.com,0x8" /syncfromflags:manual /update
net stop w32time && net start w32time
w32tm /resync

0x8 플래그는 클라이언트 모드로 동기화 요청을 보내도록 설정합니다. 일부 NTP 서버는 이 설정이 없으면 응답하지 않습니다.

 

 

6. NTP 서버 직접 구축하기: 내부 Time Server 만들기

기업 환경에서는 외부 NTP 서버에 직접 연결하기보다 내부 NTP 서버를 구축하는 것이 권장됩니다. 보안과 안정성 측면에서 훨씬 유리하기 때문이죠.

내부 NTP 서버의 장점

  • 네트워크 격리: 내부 서버들이 외부로 NTP 요청을 보내지 않아 보안 강화
  • 트래픽 절감: 수백 대 서버가 개별적으로 외부 접속하는 것보다 효율적
  • 일관성: 모든 내부 시스템이 동일한 시간 소스를 참조

Chrony를 NTP 서버로 설정하기

/etc/chrony.conf 파일에 다음 설정을 추가합니다:

# 외부 NTP 서버 (상위 시간 소스)
server time.bora.net iburst
server ntp.kornet.net iburst
server time.kriss.re.kr iburst

# 클라이언트 접근 허용 (내부 네트워크 대역)
allow 192.168.1.0/24
allow 10.0.0.0/8

# 외부 연결이 끊겼을 때 로컬 시간 제공
local stratum 10

# 드리프트 파일
driftfile /var/lib/chrony/drift

# 로그 설정
logdir /var/log/chrony
log measurements statistics tracking

서비스를 재시작합니다:

sudo systemctl restart chronyd

방화벽 설정

NTP는 UDP 123 포트를 사용합니다. 방화벽에서 해당 포트를 열어줘야 합니다.

# firewalld (RHEL/CentOS)
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload

# iptables
sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT

# Ubuntu UFW
sudo ufw allow 123/udp

 

 

7. 자주 발생하는 NTP 트러블슈팅

문제 1: 동기화가 전혀 되지 않아요

증상: chronyc sources 실행 시 모든 서버가 ? 표시

원인 및 해결:

  1. 방화벽 확인: UDP 123 포트가 열려있는지 확인
    # 포트 테스트
    nc -u -v time.bora.net 123
    
    # 방화벽 상태 확인
    sudo firewall-cmd --list-all
    
  2. 네트워크 연결 확인
    ping time.bora.net
    traceroute time.bora.net
    
  3. DNS 해석 확인
    nslookup time.bora.net
    

문제 2: 시간 차이가 너무 커서 동기화가 안 돼요

증상: 서버 시간이 NTP 서버와 1000초(약 16분) 이상 차이나면 ntpd가 동기화를 포기합니다.

해결 방법:

  1. 수동으로 시간 맞추기
    # chronyd 일시 중지
    sudo systemctl stop chronyd
    
    # 수동 동기화
    sudo ntpdate time.bora.net
    
    # chronyd 재시작
    sudo systemctl start chronyd
    
  2. chrony의 makestep 설정 활용
    # /etc/chrony.conf
    # 처음 3번 동기화에서 1초 이상 차이나면 즉시 조정
    makestep 1.0 3
    

문제 3: Windows에서 “동기화 중 오류 발생” 메시지

원인: W32Time 서비스 문제 또는 방화벽 차단

해결 방법:

REM 서비스 재등록
net stop w32time
w32tm /unregister
w32tm /register
net start w32time

REM 재동기화
w32tm /resync /rediscover

문제 4: 가상머신에서 시간이 자꾸 틀어져요

원인: 하이퍼바이저와의 시간 동기화 충돌

해결 방법 (VMware):

  1. VMware Tools의 시간 동기화 기능 비활성화
  2. Guest OS의 NTP만 사용하도록 설정

해결 방법 (Hyper-V):

# 통합 서비스에서 시간 동기화 비활성화
Disable-VMIntegrationService -VMName "서버명" -Name "Time Synchronization"

 

 

8. NTP 보안 고려사항

NTP 증폭 공격(Amplification Attack) 방지

오래된 NTP 서버의 monlist 명령어는 DDoS 공격에 악용될 수 있습니다. 2025년 5월에는 Cloudflare가 7.3Tbps에 달하는 대규모 DDoS 공격을 차단했는데, 여기에 NTP 증폭 공격이 포함되어 있었습니다.

방지 설정:

chrony와 ntpd의 설정 문법이 다릅니다:

ntpd 사용 시 (/etc/ntp.conf):

# 외부에서의 쿼리 제한
restrict default kod nomodify notrap nopeer noquery

# 로컬호스트 허용
restrict 127.0.0.1
restrict ::1

# 내부 네트워크만 허용
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

chrony 사용 시 (/etc/chrony.conf):

# 기본적으로 모든 접근 차단 (chrony는 기본값이 deny)
# 내부 네트워크만 허용
allow 192.168.1.0/24

# 특정 IP 차단 (필요시)
deny 192.168.1.100

NTP 서버 버전 업그레이드

NTP 4.2.7 이상 버전에서는 monlist 명령어가 기본 비활성화되어 있습니다. 가능하면 최신 버전을 사용하세요.

 

 

9. 금융권 환경에서의 NTP 베스트 프랙티스

금융 시스템은 시간 정확도에 대한 요구사항이 특히 엄격합니다. 다음 사항들을 권장합니다:

이중화 구성

                    ┌─────────────────┐
                    │ 외부 NTP Pool   │
                    │ (Stratum 1/2)   │
                    └────────┬────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
        ┌─────▼─────┐  ┌─────▼─────┐  ┌─────▼─────┐
        │ 내부 NTP  │  │ 내부 NTP  │  │ 내부 NTP  │
        │ Server 1  │  │ Server 2  │  │ Server 3  │
        └─────┬─────┘  └─────┬─────┘  └─────┬─────┘
              │              │              │
              └──────────────┼──────────────┘
                             │
                    ┌────────▼────────┐
                    │   Application   │
                    │     Servers     │
                    └─────────────────┘

최소 3대 이상의 NTP 서버를 구성해야 합니다. 2대만 있으면 하나가 잘못된 시간을 제공할 때 어떤 것이 맞는지 판단할 수 없는 Majority 문제가 발생합니다.

모니터링 설정

Zabbix, PRTG, Nagios 등을 통해 NTP 동기화 상태를 지속적으로 모니터링하세요. 오프셋이 임계값(예: 100ms)을 초과하면 알림이 발생하도록 설정합니다.

로그 보관

거래 시스템의 경우 NTP 동기화 로그를 별도로 보관하여 감사 시 활용할 수 있도록 합니다.

 

 

마무리

NTP는 눈에 잘 보이지 않지만 IT 인프라의 근간을 이루는 중요한 서비스입니다. 한번 제대로 설정해두면 큰 신경을 쓰지 않아도 되지만, 문제가 생기면 전체 시스템에 영향을 줄 수 있어요.

이 글에서 다룬 내용을 정리하면:

  • chrony를 사용하세요 (최신 Linux 표준)
  • 최소 3개 이상의 NTP 서버를 설정하세요
  • UDP 123 포트가 열려있는지 확인하세요
  • 금융권이라면 내부 NTP 서버 이중화를 고려하세요

시간 동기화 문제로 고생하셨다면 이 가이드가 도움이 되었기를 바랍니다!


참고 자료:

 

 

 

댓글 남기기