나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-07-13 13:59:24

유닉스 시간

유닉스 타임에서 넘어옴
1. 개요2. 여담
2.1. 의미 있는 숫자2.2. 나무위키2.3. 비트코인의 타임 스탬프
3. 관련 문서4. 외부 링크

1. 개요

유닉스 시간(Unix time, Unix time stamp, POSIX time, Epoch time)은 유닉스 계열의 운영체제를 사용하는 컴퓨터에서 시간을 표시하는 방법이다. 정확히는 UTC 기준 1970년 1월 1일 자정(0시 0분 0초)[1]에서부터 현재까지 몇 가 지났는지를 정수 형태로 표시한다. 그레고리력을 따르지만 윤초는 무시한다.

엔터프라이즈 시장은 물론이고 요즘은 소비자 시장에도 유닉스 계열의 운영체제가 워낙 많이 쓰이다 보니 알게 모르게 여기저기 많이 쓰인다. 웬만한 사람들이 손 안에 유닉스 시간이 째깍째깍 흐르는 물건들을 하나씩 들고 다니고 있다.

초를 정수 단위로 저장하다 보니 밀리초 이하의 세밀한 값은 저장하지 못한다는 단점이 있다. 데이터가 밀리세컨드, 심지어는 마이크로세컨드 단위로 움직이는 DBMS등 대형 시스템에서는 이를 해결하기 위해 독자적인 해결책을 사용한다.[2]

2. 여담

2.1. 의미 있는 숫자

아래에 제시된 시각은 모두 UTC 기준이다.

2.2. 나무위키

최초 생성일이 1970년 1월 1일로 되어 있는 문서들이 꽤 많이 존재한다.[3] 또는 2009년 1월 1일도 꽤 존재한다.

무기한 차단된 상태에서 차단 소명 게시판을 제외한 모든 나무위키 게시판에 글 작성을 시도할 시 차단 해제 일시가 1970년 1월 1일로 나온다.[4]

2.3. 비트코인의 타임 스탬프

사토시 나카모토가 처음 비트코인을 만들때부터 타임 스탬프의 기준을 유닉스 시간으로 규정해 놓았다. 타임 스탬프는 비트코인을 포함한 퍼블릭 오픈소스 블록체인에서 "사토시 나카모토 정신"을 대표하는 "상대적 시간" 개념의 상징이다. 각 블록이 유닉스 시간으로 몇초에 생성되었나를 표기하여, 블록의 전후관계를 분명히 하며, 블록의 p2p 전송 후 각 노드가 그 유효성을 검증하는데 중요한 역할을 한다.

또한 비트코인의 트랜잭션(거래)에서도 유닉스 시간은 중요한 기준점이 된다. 트랜잭션을 요청할때 필수항목 중에 timelock(잠금시간)이 있는데, 이것을 작성할때 5억보다 작은 값일때는 "블록 높이"(몇번째 블록부터 거래되길 원하는가)로 인식되어 거래희망시점을 인식하게 하고, 5억 이상일때는 "유닉스 시간"(몇 년 몇 월 며칠 몇 분 몇 초부터 거래되길 원하는가)으로서의 거래희망시점을 인식하게 한다. 실제 비트코인은 유닉스 시간으로 10억초가 훨씬 넘고 나서 생겼으므로, 입력된 잠금시간값이 5억을 훨씬 넘더라도 유닉스 시간상 과거가 될 수 있다. 진짜 시간을 조절하려고 현재 생성된 블록보다 훨씬 미래로 설정해서 요청해도 된다.

대신 비트코인은 2038년 문제로부터는 상대적으로 자유롭다. 비트코인의 트랜잭션 체계는 절대적 시간으로 인식하는 게 아니라, 그냥 블록 헤더의 데이터(숫자)로서 상대적 시간[5]만 인식하는 것에 불과하기에 문제가 발생하지 않는다. 그전에 비트코인을 다루는 컴퓨터들만 바꾸면 된다. 채굴자들의 노드용 컴퓨터 운영체제만 바꾸면 해결되는 문제라서, 비트코인 체계를 바꿀 필요가 없다.

3. 관련 문서

3.1. 10억 초 문제

파일:상세 내용 아이콘.svg   자세한 내용은 10억 초 문제 문서
번 문단을
부분을
참고하십시오.
2038년 문제와 비슷한 오버플로 문제이다.

3.2. 2038년 문제

파일:상세 내용 아이콘.svg   자세한 내용은 2038년 문제 문서
번 문단을
부분을
참고하십시오.
32비트 시스템에서는 정말 심각한 문제이다. 유닉스 시간이 32비트 시스템에서 표시할 수 있는 최대의 정수인 2,147,483,647(0x7FFFFFFF)에 도달하는 2038년 1월 19일 3시 14분 07초(UTC)가 지나면, 온 세상의 유닉스 시간을 쓰는 장비들의 유닉스 시간이 모조리 -2,147,483,648 또는 0으로 돌아간다.

이와 관련하여 64비트 프로세서를 사용하고 iOS 9 이후 버전을 탑재한 아이폰(5s, 6/6+, 6s/6s+)에서 시간을 수동으로 1970년 1월 1일로 설정 후 재부팅하면 벽돌이 되는 버그가 있었다. 유닉스 시간이 0과 같거나 보다 작은 값에 대한 예외 처리를 잘못 한 것으로 보인다. 버전 9.3에서 해결되었다.

4. 외부 링크

영문 위키피디아의 유닉스 시간
현재 유닉스 시간 보기


[1] 책이나 여러 자료에 따라 1970년 1월 1일 9시로 나와 있는 경우도 있는데, 이는 대한민국 표준시(KST, UTC+9)로 환산한 시간이다.[2] 일례로 MongoDB는 시스템 내부에서 사용할 '고유한(primary)' 타임스탬프를 위해 64비트 저장공간을 사용하며 앞의 32비트에는 일반 유닉스 시간(time_t)을, 뒤의 32비트는 같은 초 내에서 여러 값이 생성되었을 경우 그 순서(ordinal)대로 숫자를 저장한다.[3] 나무봇의 가입일도 1970년 1월 1일로 설정되어 있다.[4] 2038년 문제를 피하기 위함인 듯 하다.[5] 비트코인 백서에도 비트코인 블록의 전후관계에는 절대적 시간 필요없이 상대적 시간만으로 충분하다는 내용이 써 있다. 타임 스탬프를 써야 함에도 불구하고 유닉스 타임으로 인한 문제를 간단히 넘길 수 있게 만든, 사토시 나카모토의 압도적인 통찰력을 쉽게 엿볼 수 있는 내용.