Background Image
나머지...
2017.12.07 14:19

Y2K38, "UNIX Millennium Bug"

조회 수 1055 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

시작하며

당신은 소프트웨어 엔지니어 입니까.  정보시스템 매니저 입니까, 아니면 평범한 회사원 입니까?

당신이 무엇을 하던지간에 50세 이하라면 당신은 Y2K Millennium Bug를 만나실 수 있습니다.


1990년대 후반의 Y2K 이슈

1990년대 후반에 전 세계가 떠들석했던 이슈가 있었는데 연도를 2자리로 표기해서 생긴 “Y2K”입니다. 

1997-12-23이 아니라 97-12-23 형태로 말입니다. 

90년대 이전 대부분의 정보시스템은 연도를 ‘1997’과 같이 4자리로 표기하지 않고 ‘97’과 같이 2자리로 표현했는데, 

이런 관행이 정보시스템이 2000년과 1900년을 구분을 못하는 문제의 원인이 되었던 것이지요. 

2000년 10월 23일에 태어난 신생아의 주민등록번호는 001023로 시작되는데 이것은 1900년에 태어난 100살의 노인도 마찬가지 입니다, 

주민번호가 고유하지 않을 가능성이 생긴 것입니다. 

정보시스템에서는 치명적이라 할 수 있지요. 

온 세계의 정보 시스템 관리자가 자기의 시스템에서 사용하는 날짜가 4자리로 되어있는지 검사하고 감리하느라고 분주했고 “Y2K 비즈니스”라는 사업분야가 생길 정도였습니다. 

Y2K의 위력에 버금가는 아니 그것보다 클 수 있는 이슈가 Y2K38 Unix Millennium Bug라고  할 수 있습니다. 물론 20년이나 남았지만 말입니다. 


Linux의 시간 정보 보관 방법

32bit 정수를 시간을 표현하기 위한 자료구조(time_t)로 사용하는 Linux 시스템에서, 시간 정보는 ‘2017-12-07 09:11:24’과 같은 문자열 형태로 보관하기도 하지만 

정보시스템 내부 용도로 ‘1512605484’과 같은 정수형 숫자를 많이 사용합니다. 

이 정수형 숫자의 의미는 ‘1970-01-01 00:00:00’부터 현재까지 경과된 초(seconds)를 의미합니다. 

1970-01-01 자정에서 ‘1512605484’ 초가 경과한 날짜는 ‘2017-12-07 09:11:24’라는 의미입니다. 

날짜 계산을 많이 하는 정보시스템은 시간을 정수로 보관하는 것이 저장 용량이나 처리 시간을 고려할 때 훨씬 유리하기 때문에 내부의 자료구조등에서 이러한 방법을 많이 사용합니다.


Y2K38 소개

32bit time_t를 사용하는 Linux 시스템은 32bit 정수에 시간 정보를 보관하는데 

32bit의 정수의 최대치는 2,147,483,647이고 1970-01-01 자정에서 ‘2,147,483,647’초가 경과된 날짜는 ‘2038-01-19 03:14:07’입니다. 

이것이 32bit로 표현할 수 있는 날짜의 한계입니다. 

그러면 여기서 1초가 지나면 정보시스템은 어떻게 될까요? 

2038-01-19 03:14:08 이 정상이나 32bit 연산의 오버플로우가 발생되어 ‘-2,147,483,648’ 이 되고, 

이것을 그대로 문자열 형의 날짜로 바꾸면 1901-12-13 20:45:52가 된다는 것입니다.


아래는 일본의 어느 강좌에서 사용한 Sample C 프로그램 입니다. 

seq가 2까지는 정상 시간을 출력하다가 seq가 3일때, 정수의 최대치를 초과하면서 예상 못한 결과가 출력됩니다. 

Code를 이해할 필요는 없으나 우리가 예상하지 못하는 결과가 발생한다는 것은 알 수 있습니다.

#include <stdio.h>
#include <time.h>

void main()
{
        int seq;
        time_t tx;
        struct tm *tp;

        for (seq = 0; seq < 6;seq++)
          {
             tx = 2147483645+seq;
             tp = gmtime(&tx);
             printf ("seq: %d, Date Time: %d-%02d-%02d %02d:%02d:%02d\n",
                seq,
                tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday,
                tp->tm_hour, tp->tm_min, tp->tm_sec);
           }
}


실행결과

seq: 0, Date Time: 2038-01-19 03:14:05
seq: 1, Date Time: 2038-01-19 03:14:06
seq: 2, Date Time: 2038-01-19 03:14:07
seq: 3, Date Time: 1901-12-13 20:45:52
seq: 4, Date Time: 1901-12-13 20:45:53
seq: 5, Date Time: 1901-12-13 20:45:54

Y2K38 Unix Millennium Bug 효과
당신의 정보시스템은 2038-01-19 03:14:07 이후에도 안전하게 작동하려는지요? 
2038-01-19 아침 9시 당신의 교통카드는 거절될 수 있습니다.
당신의 신용카드도 유효 기한 경과로 거부 당할 수 있습니다. 
네비게이션은 엉뚱한 곳으로 당신을 안내할 수도 있습니다. 
ATM/주식거래도 중단될 수 있습니다. 항공 관제 혼란 등의 대란이 올 수도 있습니다. 
물론 과장이지만.

현대는 정보화 시대이고 정보시스템이 일상 생활에 미치는 영향이 크기때문에 Y2K38 버그가 영향을 줄만한 분야는 매우 방대합니다. 
아래를 포함한 거의 모든 분야가 대상이 될 수 있습니다.
  • 수도/전기/교통 등의 공공 인프라

  • 은행/증권 등의 금융 시스템

  • 위성을 포함한 유무선 통신 시스템

  • 의료

  • 정부 서비스

  • 군사 분야

Y2K38 해결하기

해결 방법 중 하나는 시간을 32비트 정수가 아니고 64비트 정수에 보관하는 것입니다. 

이런 경우 290 Billion Year 이전에는 문제가 없습니다. 

당신이 IT 시스템 관리자라면 당신이 사용하고 있는 정보시스템의 OS/DBMS와 같은 시스템 소프트웨어, 플랫폼/Compiler와 같은 개발 도구 뿐만 아니라 

응용 소프트웨어까지 광범위하게 Y2K38 bug free인지 체크해봐야 합니다.


CUBRID와 Y2K38
CUBRID에서는 날짜 시간을 보관하기 위한 여러가지 데이터 타입 (column type)을 제공하는데 
어떤 TYPE이 Y2K38 free인지 아래의 표를 참조하면 됩니다.


 Type

  Bytes  

  Y2K38 Bug Free   

 TIMESTAMP

 4

NO 

 DATETIME

 8

YES 

     TIMESTAMPLTZ    

 4

NO 

 TIMESTAMPTZ

 8

NO 

 DATETIMELTZ

 8

YES 

 DATETIMETZ

 12

YES 



위의 표를 고려할때 다음과 같은 SQL 문은 오류를 발생합니다.

insert into TBL1 values (timestamp'2038-02-01 01:15:45');
insert into TBL1 values (timestampltz'2038-02-01 01:15:45');
insert into TBL1 values (timestamptz'2038-02-01 01:15:45');


다음과 같은 SQL문은 정상 동작합니다.

insert into TBL1 values (datetime'2038-02-01 01:15:45');
insert into TBL1 values (datetimeltz'2038-02-01 01:15:45');
insert into TBL1 values (datetimetz'2038-02-01 01:15:45');


CUBRID에서 제공하는 날짜 관련 여러 data type이 있는 만큼, 정확히 알고 사용하는 것이 좋습니다. 자세한 것은 매뉴얼을 참조하세요 


맺음말

Y2K와 마찬가지로 Y2K38도 사회적 이슈가 되는 문제가 될 것은 명확한 일입니다. 2038년, 당신의 정보시스템은 안전하십니까

올바르게 알고 미리 미리 대처하는 것이 현명한 방법입니다. 검색엔진에 ‘Y2K38’을 입력하세요 


  1. No Image

    실패하지 않는 마이그레이션을 위해서 고려해야 될 사항

    실패하지 않는 마이그레이션을 위해서 고려해야 될 사항 클라우드 전환에 따라 기존 유지보수 비용이 높은 UNIX 체계에서 Linux 체계로 전환하면서 오픈소스 유형의 SW로 전환하는 사례가 많아졌다. 도입단가, 비용문제로 고객과 SW밴더간의 이견을 좁히지 못해서 대체 SW로 전환하는 사례도 있다. 그 이외에도 노후장비 교체시기에 SW까지 함께 교체하는 경우도 있는데 OS 및 WAS, 그리고 Database System과 같은 기업 서비스의 근간이 되는 Package SW들이 주 대상이 된다. 위 3가지 중에 대체 SW로 변환하는데 있어 어려움이 발생하는 영역으로 WAS 및 Database System 부분이 될 수 있는데 그 중에서도 Database System이 난위도가 높으며 성공여부를 가늠하는 핵심적인 부분이기도 하다. 다른 대체 SW로 전환하는 작업을 Win-Back 마이그레이션이라는 용어를 사용하기도 하는데 성공적으로 수행하기 위해서 꼼꼼하게 대비해야하는 사항들이 있다. 다수의 DBMS 전환작업을 해오면서 성공과 실패를 통해 경험한 내용을 기반으로 Win-Back 마이그레이션 프로젝트를 수행하는데 고려되어야 할 사항들에 대해서 공유하고자 한다. 1. 제품선정(RDB) DBA또는 그에 준하는 역할을...
    Date2018.12.31 Category나머지... By김창휘 Views3616 Votes0
    Read More
  2. CMT(CUBRID Migration Tool) 활용

    CMT를 이용하여 데이터 마이그레이션 작업하면서 여러가지의 팁이 있겠지만 4단계에서 유용하게 사용할 수 있는 팁중 PK가 없는 테이블에 대해서 데이터 수행전에 PK 선택하거나 또는 테이블 생성 후 PK 컬럼을 추가하여 데이터 마이그레이션하면 되는 팁을 알려 드리겠습니다. 1) PK가 없는 테이블에 대해 이관전 PK 컬럼 선택 후 데이터를 이관하는 방법 2) PK가 없는 테이블 정보를 그대로 생성하고 데이터를 이관전에 seq 컬럼을 추가하여 그 컬럼에 대해 PK로 만들어 주므로 PK에 대한 재작업이 안해도 되는 방법 위 두가지를 병행하여 데이터 이관 작업을 진행하면 좀 더 쉽게 데이터 이관 작업을 할 수 있다. 1단계 - 원본과 대상 유형을 선택한다. - 다음버튼을 클릭한다. 2단계 - 편집버튼을 클릭하여 "원본 정보"를 등록하여 접속이 되는지 테스트버튼을 클릭하여 확인한다. (연결이름 : 임의로 작성, 호스트 주소 : IP주소, 연결 포트 : 사용하는 접속 포트, 데이터베이스 이름 : SERVICE_NAME, 사용자 이름 : 실제사용자ID, 비밀번호 : 실제비밀번호) - 테스트버튼을 클릭하여 접속이 안되는 경우는 연결포트 또는 데이터베이스 이름, 사용자이름, 비밀번호가 틀리...
    Date2018.12.31 Category제품 여행 By엄기호 Views901 Votes0
    Read More
  3. No Image

    CUBRID 매니저 가져오기 마법사 유용한 팁!

    CUBRID 매니저 가져오기 마법사 유용한 팁! 다량의 데이터를 엑셀로 작성해서 넣는 경우가 많으실 텐데요 CUBRID 매니저에서 UI로 간단하고 쉽게 데이터를 넣을 수 있습니다. 바로 가져오기라는 기능인데요 가져오기는 스키마, 데이터를 파일로부터 데이터베이스 서버로 import를 하는 기능 입니다. (스키마는 SQL 파일만 지원하며, 데이터는 SQL, CSV, XLS, TXT를 지원합니다.) 가져오기 마법사는 아래의 3단계로 구성되어 있습니다. •가져오기 유형 선택 • 가져오기할 데이터 소스 및 옵션 선택 • 가져오기 옵션 확인 여기서 팁 한가지! XLSX 파일은 엑셀 2007부터 추가된 파일 포맷이며 CUBRID 매니저는 XLSX 파일을 지원하지 않으므로, XLSX 파일을 원본으로 하여 데이터 가져오기 작업을 수행하는 경우 정상적인 데이터 입력을 보장할 수 없습니다. 따라서, XLSX 파일은 "다른 이름으로 저장" 메뉴를 통해 반드시 XLS 파일로 변환한 후에 사용해야 합니다. 그리고 XLS 파일로 저장 시 파일 문자집합을 신경 써 주셔야 합니다. 엑셀 한글 버전에서는 따로 문자집합을 설정 안 할 경우 기본 인코딩이 EUC-KR로 되어 있어 파일의 문자집합 옵션을 맞지 않게 데이터를 가져오...
    Date2018.12.31 Category제품 여행 By강주원 Views910 Votes0
    Read More
  4. Docker, Kubernetes 환경에서 CUBRID 컨테이너 서비스 해보기

    Docker, Kubernetes 환경에서 CUBRID 컨테이너 서비스 해보기 최근에 여러 기업에서 Docker, Kubernetes를 사용하여 컨테이너로 서비스 하는 사레들을 많이 보았습니다. CUBRID도 컨테이너로 만들어서 Docker, Kubernetes 환경에서 서비스 해보려고 합니다. Docker는 '가장 빨리 만나는 Docker: 클라우드 플랫폼 어디서나 빠르게 배포하고 실행할 수 있는 리눅스 기반 경량화 컨테이너'라는 책으로 처음 접하였습니다. 책을 구매해서 보는 것을 권장드리지만 'http://pyrasis.com/docker.html' 페이지에서 책의 내용을 공개하고 있습니다. 책이 너무 길다면 Slideshare, 'https://www.slideshare.net/pyrasis/docker-fordummies-44424016' 페이지에서 슬라이드로 요약된 내용을 볼 수 있습니다. Docker는 Docker라는 회사에서 OS에서 제공하는 가상화 기술을 사용하여 만든 오픈소스 Container 프로젝트의 결과물입니다. 컨테이너는 호스트에 게스트 환경을 구성한다는 점에서는 가상머신과 비슷하지만 OS를 별도로 설치해 줄 필요가 없고, 호스트와 동일한 성능을 낼 수 있다는 장점이 있습니다. 이외에도 여러가지 장점이 많지만 가장 큰 장점은 배...
    Date2018.12.31 By주영진 Views8257 Votes0
    Read More
  5. No Image

    기술지원 중 자주받는 질문들을 살펴보자 !

    큐브리드 엔지니어로 기술지원을 수행하면서 자주 받는 질문들을 크게 10개 단락으로 나누어 모아 보았습니다. 큐브리드를 사용해주시는 많은 분들에게 작게나마 도움이 되기를 바라는 마음으로 작성해 보았습니다. 자세한 내용은 하단에 매뉴얼 링크를 달아 두었으니 참조 부탁 드립니다 1. DB 백업/복구 1) 백업 명령어를 알고 싶어요. ① $ cubrid backupdb -D <백업 경로> -z --no-check <DB명> 2) 증분 백업도 지원하나요? ① 큐브리드는 1차, 2차 증분 백업을 지원합니다. ② 증분 백업을 하기 위해서는 백업 옵션 중 -l 옵션을 사용하면 됩니다. 백업수준은 0,1,2 3가지로 나뉘어 지며 각각 전체 백업, 1차 증분 백업, 2차 증분 백업을 의미합니다. ③ 예시 : cubrid backupdb -D <백업 경로> -z --no-check -l 1 <DB명> 3) 복구는 어떻게 해야 하나요? ① $ cubrid restoredb -B <백업 파일 경로> <DB명> 4) 시점 복구도 지원하나요? ① 큐브리드는 어떠한 옵션도 지정되지 않은 경우 기본적으로 마지막 커밋 시점까지 데이터베이스가 복구됩니다. 시점 복구를 하기 위해서는 -d 옵션으로 시간을 지정할 수 있으나, 지정한 복구 시점까지 복구하기 위한 활성로그/보관 로그 ...
    Date2018.12.30 Category제품 여행 By허서진 Views1121 Votes0
    Read More
  6. DBMS? 힐끗 다른 쪽을 바라봤다

    시스템 소프트웨어 개발자로 딱 60살까지만 이런저런 시스템, 특히 대용량 데이터를 다루는 시스템을 직접 설계하고 만들어보고 싶은 마음은 지금도 여전하다. 그리고 그러한 미련에 들어온 DBMS 개발바닥이다. 원래 우직하니 한 우물만 파는 스타일은 아닌데.. 어찌어찌 하다보니 10년째 데이터 처리 엔진쪽으로만 일하고 있는 자신을 바라보며 기특하단 생각도 든다. 하지만 최신 유행하는 다른 분야로 발빠르게 움직이지 못한 것이 못내 아쉬울 때도 종종 있다. 이런 내 마음에는 아랑곳 없이 데이터환경이 휙휙 바뀌면서 하루가 멀다하고 새로운 모양의 시스템, DB들이 마구 쏟아져 나온다. 이런 추세속에서 여전한? 것들을 하고 있는 내 자신을 바라보고 있자면 old school에서 벗어나지 못하고 있는 듯 느껴져 왠지 마음이 급해진다. 이 글을 쓰고 있는 지금도 어디에선가는 새로운 DB(용어따지기 좋아하는 사람들을 위해 여기서 'DB'는 데이터베이스 자체가 아니라 DBMS혹은 DMS를 의미한다는 것을 밝힌다)가 글로벌 DB시장에 런칭하는 소리가 들리는 듯 하니 말이다. 그러나 이쪽 분야에서 일을 하면 할수록 데이터를 다루는 일에 신구라는 것이 없다는 생각이다. 다...
    Date2018.12.28 Category나머지... By조성룡 Views590 Votes0
    Read More
  7. CUBRID 10의 새로운 기능 "문자열 압축"

    CUBRID 10은 새로운 기능이 추가 되었습니다. 그 중에서 문자열 압축기능이 추가되었습니다. 지금부터 문자열 압축 기능에 대해서 알아보도록 하겠습니다. 문자열 압축 기능은 아래의 표와 같습니다. CUBRID 문자열 압축은 255byte 이상에서만 실행되고, 압축이 효율적이지 않으면 압축을 실행하지 않습니다. 문자열 압축률이 얼마나 좋은지 테스트하기 위해서 문자열 압축 기능이 없는 CUBRID 9.3과 10.1에서 테스트 데이타 10만건을 입력하고, 테이블 크기를 확인하는 방법으로 진행하였습니다. “케이스 #1”은 중복 되지 않는 문자열 데이타를 입력하고 압축률을 확인하였고, “케이스 #2”는 중복 된 데이타를 입력하고 압축률을 확인하였습니다. 각 케이스별로 데이타 10만건을 생성한 방법은 아래 표와 같습니다. 먼저 테스트 데이타 1건을 입력하고, “insert 테이블 select ...” 구문에서 카탈로그 테이블과 카테시안 곱(Cartesian Product)을 활용하여 테스트 데이타를 생성하였습니다. 위 표의 SQL문으로 데이타 10만건을 입력하고 테이블 크기를 확인하였습다. 테이블 크기는 “show heap capacity of 테이블명;” 명령을 실행하고 Num_pages 값을 확인하였고, 결과는 아...
    Date2018.12.26 Category제품 여행 By권호일 Views337 Votes0
    Read More
  8. GitHub Desktop을 활용한 소중한 소스 코드 관리

    1) 소중한 자신의 소스 코드가 손상 되거나 손실 되는 경우 2) 외부에서 자신의 소스 코드를 열람해야할 경우 3) 소스 코드의 변경 된 부분을 찾아야 하는 경우 소스 코드를 사용하다 보면 위와 같은 문제로 업무의 연속성이 끊어지는 경우가 발생 합니다. 이러한 문제를 GitHub Desktop을 통해 아주 간단하고 편리하게 사용 및 관리 하는 기능을 소개 하려 합니다. - 비용 : 무료 단, 소스 코드를 비공개하려면 과금 필요 - GUI 프로그램으로 git bash(커맨드 라인) 보다 편리하며, 손 쉽게 사용할 수 있습니다. [1 : GitHub 회원 가입] - 회원 가입 URL : https://github.com/ - IMAGE #1 GitHub 공식 홈페이지 접속 화면 사용할 정보 입력 : Username, Email, Password - IMAGE #2 STEP 1 : 계정 생성 동의 하기 - IMAGE #3 STEP 2 : 계정 유형 선택 - IMAGE #4 사용자 유형 선택 (Skip 해도 무관) - IMAGE #5, 6, 7 STEP 3단계 모두 마치면, Email 확인 후 계정 사용 가능 [2 : GitHub Desktop 설치] - 설치 URL : https://desktop.github.com/ - 지원 OS : Windows, OS X(MAC) - IMAGE #1 공식 홈페이지에서 GitHub Desktop 설치 파일을 받으 실 수 있습니다. (약 80MB) ...
    Date2018.12.03 Category나머지... By윤준수 Views9561 Votes0
    Read More
  9. 오픈소스 DBMS 10년의 여정

    10년 전인 2008년 11월 22일 NHN(현, 네이버)의 첫번째 개발자 행사인 DEVIEW 2008을 통해 CUBRID 오픈소스 버전이 첫 선을 보였습니다. 사용자 확산을 위해 2006년 5월 무료 라이선스를 선언을 한 이후 2008년 초부터 1년 가까이 오픈소스 전환을 위한 준비 과정을 거쳐 결국 오픈소스 DBMS로 변신을 한 것입니다.   -> CUBRID 2008 신제품이 출시되던 날…   오픈소스 DBMS 전환에 대한 사용자들의 인식을 제고하기 위해 버전 표기는 기존 숫자(CUBRID 6, 7) 중심에서 연도 체계 방식으로 변경하여 “CUBRID 2008”로 명칭을 했으며(2013년 3월 출시한 CUBRID 9부터 다시 숫자 표기로 변경), 라이선스의 경우 많은 논의 과정을 통해 엔진은 소스 코드 수정/배포 시 공개 의무가 있는 GPL v2 or higher, 인터페이스와 도구는 자유롭게 수정/배포가 가능한 BSD 라이선스를 채택했습니다.   CUBRID 2008 출시 후 초기 2년 동안의 미션은 개발자 및 사용자 확산이었습니다. CUBRID Inside라는 개발자 중심의 커뮤니티 행사를 통해 내부 개발자와 외부 개발자간에 만남의 장을 마련했고, 닉네임 Pcraft님 같은 경우에는 CUBRID Manager에 컨트리뷰션을 하시다가 추후 CUBRID 개발팀...
    Date2018.11.30 Category오픈소스 이야기 By정병주 Views898 Votes0
    Read More
  10. 2018년 CUBRID 정기교육을 마무리 하며..

    큐브리드에서는 매년 정기적으로 정기교육을 실시하고 있습니다.   금년도에는 공개SW개발자센터에 공개SW커뮤니티를 등록하여 커뮤니티 활성화 및 큐브리드를 사용자를 위한 교육을 진행했습니다. 정기교육이 어떻게 진행되고 있는지, 커리큘럼, 자주 듣는 궁금증 등에 대해 알아보겠습니다. 『2018년 정기교육 일정』 일시 장소 참석인원 03월 20일 ~ 21일 공개SW역량프라자(상암) 23명 05월 29일 ~ 30일 공개SW개발자센터(선릉) 06명 09월 04일 ~ 05일 공개SW역량프라자(상암) 24명 10월 16일 ~ 17일 공개SW역량프라자(상암) 13명       정기교육은 2일 과정으로 4회 진행되며, 교육에 참여해주신 분들에게 교육 교재와 자료를 나눠드리고, 점심식사도 제공하고 있습니다. 『신청방법』      http://www.cubrid.com/education에서 일정을 확인할 수 있으며, 교육일정 1개월 전에 온라인 신청을 오픈합니다. 『커리큘럼』      다음과 같이 1일차, 2일차로 교육내용이 다르며, 2일동안 교육을 참여해주시는 것이 도움이 됩니다. 또한 실습과정도 포함되어 있습니다.       2일 과정을 수료해주신 분들에게는 큐브리드에서 발급한 수료증을 나눠드립니다. 1일차 CUBRID 소개 ...
    Date2018.11.15 Category알려요~ By정훈 Views262 Votes0
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2147 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales