흥미로운 현상을 발견했습니다. 여러 리눅스 배포판과 함께 Windows 10을 멀티부팅으로 사용하는 Lenovo G50 노트북에서, Microsoft 운영체제를 실행할 때마다 시간이 정확히 1시간씩 어긋나는 것이었습니다. 시간대(Timezone) 설정은 분명히 올바른데도, 화면 우측 하단의 시계가 60분씩 차이가 나는 것이죠.
여러 자료를 찾아보고 확인한 끝에, 이 문제를 다룬 짧은 튜토리얼을 작성하게 되었습니다. 이 문제는 다른 운영체제와 무관하게 Windows 10만 단독으로 사용하는 사용자에게도 발생할 수 있습니다. 어느 경우든 이 글에서는 Windows 쪽에서 문제를 해결하고 우회하는 방법에 초점을 맞추겠습니다.
문제의 원인은 무엇일까?
Windows 10의 시간이 틀어지는 데에는 여러 가지 이유가 있습니다. 많은 사람들이 이것을 일반적인 문제로 생각하고 자신의 사례가 보편적이라고 가정하지만, 실제로는 그렇지 않습니다. 방화벽 문제, Windows 시간 서비스 오류, 시간 동기화 실패 등 다양한 시나리오가 존재합니다. 모든 원인을 미리 알 수는 없지만, 다행히 모두 해결할 수는 있습니다.
특히 듀얼부팅 환경에서는 몇 가지 개념을 이해해야 합니다. Ubuntu 도움말 문서에서도 이 주제를 상세히 설명하고 있는데, 핵심은 다음과 같습니다. 모든 최신 컴퓨터는 소위 '하드웨어 클럭(Hardware Clock)'이라 불리는 곳에 시간을 저장하며, 이것은 칩셋의 일부로 작은 배터리로 전원이 공급됩니다. 덕분에 컴퓨터는 전원이 차단된 상태에서도(수개월 정도까지) 켤 때 올바른 날짜와 시간을 유지할 수 있습니다. 운영체제는 보통 종료 명령을 받았을 때 이 값을 갱신하거나, 또는 하드웨어 클럭의 값을 직접 참조하여 사용합니다.
대부분의 리눅스 배포판은 하드웨어 클럭을 UTC(협정 세계시)로 설정합니다. 반면 Windows는 일반적으로 로컬 시간, 즉 사용자가 선택한 '현지' 시간대를 기준으로 시간을 사용합니다. 서머타임(DST) 등으로 시간대가 변경되면 로컬 시간에는 1시간의 오프셋(앞당김 또는 뒤로 밀림)이 생기지만, UTC는 서머타임이나 시간대 변경의 영향을 받지 않고 항상 일정하게 유지됩니다. 따라서 한 운영체제에서 다른 운영체제로 재부팅할 때, 예를 들어 리눅스에서 Windows로 넘어오면 Windows가 클럭을 동기화하기 전까지 시간이 1시간씩 어긋나게 되는 것입니다. 이것이 바로 우리가 겪고 있는 문제의 실체입니다.
Windows 시간 오프셋 수정하기
해결 방법 중 하나는 리눅스가 하드웨어 클럭에 저장하는 시간 값의 형식을 변경하는 것입니다. 대부분의 배포판은 UTC를 사용하는데, 이를 변경할 수 있습니다. 하지만 여기서는 그렇게 하지 않고, 대신 Windows 쪽에서 동작하도록 만들어 보겠습니다.
따라서 대안은 Windows가 로컬 시간을 사용하지 않도록 하는 것입니다. 이를 달성하는 방법은 두 가지입니다. 첫 번째는 레지스트리를 수정하고 Windows 시간 서비스를 중지하는 방법으로, 단점은 Windows가 더 이상 클럭을 자동 갱신하지 않게 된다는 점입니다. 두 번째는 Windows가 기본 주기보다 더 자주 클럭을 동기화하도록 만드는 것입니다. 기본 동기화 주기는 Windows 7/8에서는 일주일이었고, Windows 10에서는 하루로 줄었습니다. 두 가지 방법을 모두 소개할 테니, 선호하는 방식을 선택하시면 됩니다. 개인적으로는 두 번째 방법이 더 우아하다고 생각합니다.
방법 1: Windows를 UTC로 설정
레지스트리 수정이 필요합니다. 다음 경로로 이동하세요.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Control\TimeZoneInformation
그런 다음 RealTimeIsUniversal 키를 찾아 값을 1로 변경합니다. 해당 키가 없다면 새로 DWORD 값으로 생성하면 됩니다.
재부팅 후 문제가 해결되었는지 확인합니다. 만약 효과가 없다면, 시간 서비스를 비활성화해야 할 수도 있습니다. services.msc를 실행하여 Windows Time 서비스를 찾아 중지하고 시작 유형을 '사용 안 함'으로 설정하세요.
방법 2: 예약 작업으로 시간 동기화 자동화
이 방법에는 여러 가지 접근 방식이 있으며, 하지 말아야 할 방식도 있습니다. 로그온 시 실행되어 시간을 동기화하는 예약 작업을 만들면 문제가 해결됩니다. 구체적인 설정 방법을 살펴보겠습니다.
작업 스케줄러(Task Scheduler)를 열고 '작업 만들기(Create Task)'를 선택합니다. 작업은 원하는 위치에 배치할 수 있습니다. 예약 작업 설정은 다소 복잡하지만 충분히 achievable 합니다. '일반' 탭에서 작업 이름과 설명을 입력한 후 사용자 계정을 선택합니다. 여기서 흥미로운 점은, 제 경우 제한된 권한의 계정으로 실행 중이었기 때문에 이 작업을 수행하려면 관리자(Administrator) 계정을 선택해야 했다는 것입니다. 이는 사용자가 로그온했는지 여부와 관계없이 작업이 실행된다는 의미이기도 한데, 암호를 저장하지 않아도 괜찮습니다. 로컬 리소스에만 접근하면 되기 때문입니다. '다음 운영 체제 버전용으로 구성' 항목은 Windows 10으로 지정합니다.
다음으로 새 트리거(Trigger), 즉 언제 실행될지를 설정해야 합니다. '로그온할 때(At log on)'로 지정합니다.
이제 두 개의 동작(Action)을 설정해야 합니다. 첫 번째는 Windows 시간 서비스가 아직 실행되지 않은 경우 이를 시작하는 것입니다. 프로그램은 %windir%\system32\sc.exe이고, 인수는 start w32time task_started 입니다. 두 번째 동작은 시간을 다시 동기화하는 것입니다. 프로그램은 %windir%\system32\w32tm.exe이고, 인수는 /resync 입니다.
마지막으로, 이 예약 작업의 조건에서 AC 전원이나 배터리 중 어느 것을 사용하든 실행되도록 설정하고, 네트워크 연결이 가능한 모든 상태에서 동작하도록 지정합니다. 확인을 누르면, 다음 로그온부터는 시간 문제 없이 깔끔하게 동작할 것입니다.
수동 동기화 방법
물론 언제든지 수동으로 시간을 동기화할 수도 있습니다. 시스템 설정, 제어판을 통해 '날짜 및 시간' 애플릿을 열거나, 시스템 트레이의 시계를 마우스 오른쪽 버튼으로 클릭한 후 '날짜/시간 조정'을 선택하세요. '인터넷 시간' 탭으로 이동한 뒤 '지금 업데이트' 버튼을 클릭하면 즉시 동기화됩니다.
마무리
이것으로 끝입니다. 실제 운영 환경이 어떻든 — 싱글 부팅, 듀얼 부팅, 멀티 부팅 — 우리는 다른 시스템에는 관심이 없고 오직 Windows 10에만 집중합니다. 올바른 시간을 유지하도록 만드는 방법은 두 가지가 있습니다. 시스템이 UTC를 사용하도록 강제하거나, 로그온 시 실행되어 클럭을 다시 동기화하는 예약 작업을 만드는 것입니다. 두 방법 모두 큰 부담이 없지만, 전반적으로 후자가 시스템에 덜 침입적인 방법입니다.
이 튜토리얼이 도움이 되기를 바랍니다. 사소하지만 결코 무시할 수 없는 문제로 인한 성가신 골칫거리를 덜어드릴 수 있을 것입니다. 대부분의 사람들은 이 문제를 자주 겪지 않겠지만, 만약 겪게 된다면 해결책은 모두 여기에 있습니다. 이상으로 마치겠습니다.