컴퓨터는 인간의 언어를 이해하지 못한다는 사실을 알고 계셨나요? 우리가 입력하는 모든 명령어는 CPU가 읽고 처리하기 전에 이진수(바이너리) 코드로 변환되며, 처리된 결과 역시 다시 사람이 읽을 수 있는 언어로 바뀝니다. 이진 코드는 오직 0과 1, 단 두 개의 숫자로만 구성되어 있습니다. 다소 복잡하게 들리지만, 프로세서 입장에서는 단순한 0과 1로 변환할 수 없는 '날짜'를 읽어야 하는 상황이 올 때까지 큰 문제가 되지 않았습니다.
이 문제를 해결하기 위해 컴퓨터 과학자들은 특정 날짜를 하나의 공통 기준점으로부터 경과한 초(second) 수로 변환하는 방식을 고안했고, 이 기준점은 전 세계적인 표준으로 채택되었습니다. 컴퓨터에 날짜를 입력하면 해당 날짜를 초 단위로 환산하여, 컴퓨터 시간의 시작점부터 지금까지 몇 초가 경과했는지 계산합니다. 이때 컴퓨터에게 있어 '시간의 첫 번째 초'를 가리켜 에포크 타임(Epoch Time)이라고 부릅니다.
재미있는 사실
Hello라는 단어를 이진 코드로 변환하면 다음과 같습니다.
Hello = 01001000 01100101 01101100 01101100 01101111
에포크 타임스탬프란?
메리엄-웹스터 사전(Merriam-Webster)은 '에포크(Epoch)'를 '기준점으로 삼는 시각 또는 날짜'로 정의합니다. 위키백과는 컴퓨팅 분야에서의 에포크를 '컴퓨터가 시스템 시간을 측정하는 기준이 되는 날짜와 시간'으로 설명합니다.
흥미롭게도 운영체제마다 서로 다른 시점을 에포크 타임으로 삼고 있습니다. 그 차이의 정확한 이유는 알려져 있지 않지만, 에포크 시간에 대한 통일된 표준이 정해졌다면 훨씬 단순했을 것입니다. 아래는 널리 사용되는 에포크 시간 기준점의 예시입니다.
| 운영체제 | 에포크 시간 시작점 | |
| 1 | 현실 세계 | 00:00:00 UTC |
| 2 | 애플 macOS | 1904년 1월 1일 |
| 3 | 마이크로소프트 윈도우 | 1601년 1월 1일 |
| 4 | 유닉스 및 리눅스 시스템 | 1970년 1월 1일 |
유닉스 에포크 타임스탬프란?
유닉스(Unix) 운영체제가 에포크 타임스탬프 개념을 처음 도입했기 때문에, 이를 흔히 '유닉스 에포크 타임스탬프'라고 부릅니다. 최초의 유닉스 시스템은 1960년대 데니스 리치(Dennis Ritchie)와 켄 톰슨(Ken Thompson)에 의해 개발되었으며, 유닉스 시스템의 '에포크' 순간은 1970년 1월 1일 00:00:00 UTC로 설정되었습니다.
유닉스 에포크 타임스탬프 확인 방법
유닉스 사용자라면 간단한 명령어 몇 가지로 현재 시간과 1970년 1월 1일부터 경과한 초 단위의 유닉스 에포크 타임스탬프를 손쉽게 확인할 수 있습니다.
현재 유닉스 에포크 타임스탬프를 확인하려면 터미널에 다음 명령어를 입력하세요.
date "+%s"
유닉스 에포크 타임스탬프를 사람이 읽을 수 있는 날짜로 변환하려면 아래 명령어를 입력합니다.
date -r (에포크 시간)
날짜를 사람이 읽기 쉬운 형식으로 확인하려면 다음 명령어를 사용하세요.
date
유닉스 에포크 타임스탬프의 효율성과 2038년 문제란?
유닉스 에포크 타임스탬프의 개발자들은 당시 기준으로 충분히 크다고 판단되는 32비트 부호 있는 정수(signed integer) 값을 할당했습니다. 하지만 시간이 흐를수록 매초마다 유닉스 에포크 타임스탬프의 값은 계속 증가합니다. 32비트 정수 값이기 때문에 2038년 1월 19일 03시 14분 07초에 저장 용량의 한계에 도달하게 됩니다. 그 직후의 다음 초에서 오버플로우가 발생하여 시계가 1901년 12월 13일로 초기화되는 현상이 일어납니다.
이는 전 세계 유닉스 사용자에게 혼란을 야기하고, 유닉스 시스템의 작동을 교란하며, 소프트웨어 라이선스나 백업 작업 등에서 각종 오류를 일으킬 수 있습니다. 이것이 바로 '2038년 문제(Year 2038 Problem)'로, 새천년이 시작될 때 윈도우 운영체제에서 발생했던 Y2K 문제와 유사한 사례입니다.
다만 2038년이 되기 전까지 32비트 시스템은 더 이상 사용되지 않을 것으로 예상되므로, 이 문제가 심각한 장애로 이어지지는 않을 것으로 보입니다. 그러나 일부 자동차의 엔진 제어 장치(ECU)에 내장된 32비트 유닉스 시스템에는 여전히 우려가 남아 있습니다. 이러한 차량들은 2038년까지만 정상적으로 작동할 것으로 예상됩니다.
32비트 유닉스 에포크 타임스탬프의 해결책
새롭게 개발되는 유닉스 시스템에는 유닉스 에포크 타임스탬프를 저장하기 위해 64비트 부호 있는 정수 값이 할당되었습니다. 이는 타임스탬프가 초기화되는 다음 문제가 무려 140억 년 후에야 발생한다는 의미입니다. 놀랍게도 이는 우주의 추정 나이인 138억 년보다도 긴 시간입니다. 다만 새로운 유닉스 시간을 처리할 수 있는 것은 64비트 시스템뿐이며, 기존의 구형 시스템은 64비트로 전환이 불가능합니다.
윈도우 10에서도 에포크 시간을 구할 수 있을까?
마이크로소프트는 서로 다른 에포크 타임스탬프를 사용하지만, 날짜를 지정하고 이후 경과한 초를 계산하는 방식으로 윈도우 10에서도 유닉스 에포크 타임스탬프를 구할 수 있습니다. 윈도우 10의 PowerShell 앱에서 명령어를 입력하면 되는데, 아래 명령어 텍스트를 복사해서 사용하세요.
PowerShell -command "(New-TimeSpan -Start (Get-Date "01/01/1970") -End (Get-Date)).TotalSeconds"
참고: 여기서 지정한 날짜는 유닉스 에포크 타임스탬프의 기준일인 1970년 1월 1일입니다.
무료 온라인 에포크 시간 변환기가 있을까?
온라인 변환기를 활용해 유닉스 에포크 타임스탬프를 일반 날짜로 변환하고 싶다면, 아래와 같은 웹사이트들이 매우 유용합니다.
- Epoch Converter
이 웹사이트는 무료 서비스를 제공하며, 에포크 및 유닉스 타임스탬프를 사람이 읽을 수 있는 일반 날짜로 변환해 줍니다. 텍스트 상자에 에포크 타임스탬프를 입력한 뒤 Timestamp to Human date 버튼을 클릭하기만 하면 됩니다.
- Unix Timestamp
이 웹사이트는 실시간 기준의 현재 에포크 시간을 보여주며, 페이지를 새로고침(F5)할 때마다 초 단위 숫자가 변하는 것을 확인할 수 있습니다. 또한 임의의 유닉스 타임스탬프를 사람이 읽을 수 있는 날짜로 변환하는 기능도 제공합니다. 실제로 2 뒤에 0을 아홉 개 붙여 입력해 본 결과, 13년 뒤의 미래 날짜가 출력되었습니다.
유닉스 에포크 타임스탬프에 대한 생각 공유하기
조사하기 전에는 유닉스 에포크 타임스탬프가 꽤 복잡한 개념처럼 느껴졌습니다. 인터넷과 여러 자료를 통해 얻을 수 있는 정보를 최대한 정리해 공유했습니다. 결국 유닉스 에포크 타임스탬프란 대부분의 컴퓨터가 오늘 날짜를 초 단위로 계산할 때 출발점이 되는, 초 단위로 표현된 하나의 기준 날짜에 불과합니다.
저희는 Facebook, Twitter, YouTube, Instagram, Flipboard, Pinterest에서도 만나볼 수 있습니다.