Y2K 문제

  • 상위 문서 : 컴퓨터 관련 정보
  • 정식 명칭 : Year 2000 Problem. 2000년 문제.
  • 별칭 : 밀레니엄 버그(Millennium Bug)
  • 약칭 : Y2K(와이-투-케이). Y2K Problem(와이-투-케이 문제).

Y2K의 K는 엄밀히 말해 10의 3제곱수(1000)를 나타내는 킬로(kilo)를 의미하기 때문에 소문자 k로 써야 한다고 서술되어 있었는데, 단위와 함께 쓰지 않는 k, m 등은 오히려 대문자로 쓰는 경우가 더 많다. KB나 MB 등에, 특수한 경우엔 단위에 쓰이더라도 대문자로 쓰임을 알 수 있다.m은 밀리고 M은 메가 아닌가?메가바이트인 MB는 대문자로 쓰는 게 맞을텐데? 재단/케테르 KETER

1 개요

가장 유명한 컴퓨터 버그이자, 20세기 말 전세계를 공포로 몰아넣은 떡밥

2 배경

1999년 지구노스트라다무스가 뿌려놓은 떡밥과 함께 세기말적인 분위기로 전체적으로 흉흉했었다. 온갖 사이비 종교들은 휴거가 오네마네하면서 혹세무민하고 있었고, 미디어 매체 역시 세기말적 분위기의 암울한 작품을 메인으로 내놓았다.

이 때 터진 사건이 바로 Y2K 문제다. 본격적으로 20세기 말기에 접어들며 인류사회에서 컴퓨터는 없어선 안 될 필수요소로 자리잡은 지가 오랜데, 그 컴퓨터가 문제인 것이었다. 컴퓨터의 날짜 표기 방식은 일반적으로 MM-DD-YY로 표기된다. M은 Month, D는 Day, Y는 Year로, 1988년 5월 26일을 컴퓨터식으로 표기하면 05-26-88이 되는 것이다. 이는 과거(대체로 1970년대 이전) 컴퓨터의 기억장치 값이 비쌌고 데이터 처리에 오랜 시간이 든다는 이유로 년도를 4바이트가 아닌 2바이트만 할당해 처리했던 것에 기원한다.

사실 2바이트로도 연도를 제대로 표현할 수 있다. unsigned인 경우 0~65535, signed는 -32768 ~ +32767까지 표기 가능. 하지만 이 경우는 문자 처리이므로 1바이트로는 0부터 9까지, 2바이트로는 00부터 99까지밖에 표현이 안된다. 이는 당시 상황을 좀 이해해야 하는데 기억장치 가격도 가격이지만 데이터 처리의 어려움 등으로 BCD나 EBCDIC 같은 10진수 표현법이 많이 쓰였기 때문이다.

한마디로, 1900년과 2000년은 똑같이 뒤가 00이므로 구분이 안 돼 대혼란이 일어난다는 문제. 예를 들어 금액을 산정할 때 원래는 며칠분이 돼야 할 것이 몇백 년치가 계산된다든가. 물론 한국도 예외는 아니어서 20대 예비역들이 미필자로 분류돼 꿈만 꿔도 소름끼치는 그 일이 일어난다든지... 일단 여기까지는 애교로 봐 줄 만한 문제다. 심지어 전 세계의 금융망이 정지한다든가, 원자력 발전소에서 방사능이 누출된다든가, 까딱하면 핵미사일 제어 컴퓨터가 오류를 일으켜 핵미사일이 발사될지도 모른다는 괴담마저 나돌아서 가뜩이나 흉흉한 세기말을 더욱 흉흉하게 만들어줬으며 전세계의 IT업계엔 비상사태가 일어났다.

현 시점에서 본다면 호들갑처럼 보이겠지만 1999년 당시에는 꽤 문제 있는 상황이었다. 금융권 등에선 오랫동안 사용해서 안정성이 입증된 기기를 계속 쓰는 경우가 많은데, 컴퓨터 초창기에 개발된 기기들은 제조회사도 지금보다 꽤 많았고[1] 운영체제 또한 타 회사의 기기에는 맞지 않았으며[2] 응용프로그램 또한 하드웨어마다 제각각이고 무엇보다 사용된 컴퓨터 언어도 코볼, 포트란, 알골 등 매우 다양했다. 이미 망해 없어진 기업이나 관련 엔지니어가 더이상 배출되지 않아 뭐가 문제인지도 정확히 모르는 상황에서 수년간 이상 없이 잘 돌아간다는 이유로 계속 쓰고 있는 기기도 많았다. 이런 상황이다 보니 어떤 프로그램에서 어떤 일이 생길지는 모르는 상황이었고 이미지에 대한 공포가 패닉을 낳은 것이다.

3 전개

위와 같이 당시 수많은 컴퓨터 및 프로그램, 데이터들이 이런 문제를 안고 있었기 때문에 이 문제는 큰 시한폭탄이나 마찬가지였고 년도의 천단위 숫자가 오랜만에 바뀌는데다(=밀레니엄) 세기말 종말론까지 겹쳐져서 엄청나게 떠들썩했다. 따라서 2000년이 오면 세상이 망하네 마네 떠들썩했으며 이를 소재로 한 여러 문화상품들이 쏟아지기도 했다. 장사 잘 하네 개인으로서는 천단위 자릿수가 바뀌는 역사적인 해넘이었음에도 불구하고, 이를 걱정한 수뇌부의 지시로 수많은 은행원들은 가족은 커녕 동료들과 긴장한 채 은행에서 밀레니엄을 맞이했다.

이 문제를 해결하기 위해 수많은 회사들이 엄청난 돈을 들여야 했다. 특히 수십년 전에 짠 코볼 프로그램들을 수정하기 위해 이미 은퇴한 코볼 프로그래머들을 비싼 값을 주고 부르는 기현상이 벌어지기도 했다. 이렇게 된 이유는 예전이나 지금이나 기업에서는 이미 잘 돌아가고 있는 시스템은 어지간해서는 교체하려 하지 않기 때문인데 심지어 수십년 전에 짠 프로그램을 그대로 돌리는 경우도 종종 있다.

다행히 이러한 노력이 성공을 거두어서인지 2000년이 지났음에도 불구하고 현재 인류가 멸종하거나 전세계 경제 시스템이 붕괴하거나 하는 큰 사고는 터지지 않았다. 물론, 문제가 전혀 없었던 것은 아니기에, 어느 지방에서 100년치 요금이 발급된 사례가 나오거나, 한국의 어느 동사무소에서 컴퓨터가 1900년이라고 공문을 잘못 작성하는 등 제대로 오류를 수정하지 못한 사례도 있다. 지금도 가끔 인터넷 사이트 중 현재 날짜를 20xx년 대신 1xx년으로 표시하는 곳이 있으며, 도스용 한컴타자연습(한글 97)에서도 기록 날짜가 1xx년으로 나오는 현상이 일어났다.

심지어 15년이 지난 2014년에 문제가 일어나기도 했다. 미국 정부 희대의 병크

Y2K 문제를 정리하면 다음과 같다.

  • 영향범위가 방대하고 복잡함.
  • 응용프로그램이 현재 시스템에 영향을 주지 않도록 2000년 이행 프로젝트를 수행해야 함.
  • 많은 시간과 노력이 필요.
  • 제한된 기간 안에 문제 해결이 필요.

4 진실[3]

그러나 486정도의 구식 컴퓨터라도 바이오스에선 연도값을 19XX 형태의 네 자릿수로 저장한다. 2000이 넘는 값을 주는 것도 아무런 문제 없었다. 2000년이 된다고 해서 1900으로 인식하는 기기는 그다지 많지 않았다.[4]

사실 이는 사람들이 공문 양식에 간편화를 위해 연도를 두자릿수로 표기하거나, '19 년 월 일' 이런 식으로 19를 앞에 붙여준 문서를 보고 나서야 이게 2000년도에 가면 쓰레기가 된다고 생각했을 가능성이 매우 크다. 즉 밀레니엄 버그는 인간의 귀차니즘이 발생시킨 문제.

당연히, 막상 2000년이 되자 별 일 안 일어났다.

이는 윈도우즈를 비롯한 대부분의 운영체제에서 Y2K용 핫픽스가 보급됐기 때문이기도 하고, 이 문제가 사전에 널리 알려졌으므로 컴퓨터를 활용하는 대형 기관은 이미 방비를 해두었다. 그리고 PC 이외의 컴퓨터를 운용하는 곳에선 당연히 알아서 해결했다. 예를 들면 사이언 오거나이저 유저 그룹 등. 몇몇 개인이나 소규모 기관에서 문제가 생기긴 했지만, 그리 큰 문제는 아니었다.

그렇게 2000년 문제는 별 탈 없이 지나가나 했더니만, 이번엔 1년이 지난 2001년에 일부 시스템에서 이를 1901년으로 인식해 뒤늦게 문제가 또 발생했다. 이런 예상치 못한 일에 손해를 본 곳들도 있긴 하지만, 이것도 그냥 그 때만 잠깐 문제가 됐을 뿐 별 탈 없이 지나갔다.

Y2K의 문제는 인류가 10진수를 사용하기 때문에 큰 문제로 보였던 것일 뿐. 2진수 혹은 16진수를 사용하는 전자기기의 특성 때문에 프로그램 상으로 문제될 것은 없었으며, Y2K가 기계 및 프로그램의 오작동을 야기한다는 이야기는 사실무근이다.

특히 2000년을 1900년으로 인식한다는 문제는, 사람이나 그렇게 인식하지 기계는 그렇게 인식하지 않으므로 괜한 호들갑. 이는 전자기기(특히 모든 유닉스 기반 시스템)가 날짜를 인식하는 매커니즘이 현 날짜는 yy년mm월dd일ss초부터 몇(밀리)초 이후기 때문이다.(이를 timestamp라고 한다) 예를 들면, 1970년을 기준으로 날짜 계산을 하는 전자기기라면, 2000년 1월 1일 0시 0분 0초는 1970년 1월 1일 0시 0분 0초를 기준으로 946706400초 이후로 인식한다. 2000년 1월 1일을 1900년 1월 1일로 인식한다는건 전자기기가 -2208967200 이라고 인식한다는 말인데, 이건 그냥 전자기기의 작동방식을 알지 못한 사람들이 눈에 보이는 것만 다분히 인위적으로 해석한 병크일 뿐이다.[5]

따라서 이 문제가 일으키는 문제는 오작동 따위가 아니라, 단순히 디스플레이 되는 00, 1, 1 이 네 숫자 때문에 사람이 헷갈리는 것으로, 프로그램 알고리즘 수정은 그다지 필요하지 않고 디스플레이 형식 및 출력방식만 바꿔주면 해결되는 일이었다. 이는 10억 초 문제로 다시 한 번 나타나는데, 이 역시 등장하자 마자 바로 해결됐다.
아래에 언급할 1만년 문제 역시 같은 맥락이다. 다만 Y2K가 가진 문제가 '글자 하나가 변화' 되어 일어나는 디스플레이 문제였다면, 1만년 문제는 '연도의 자릿수가 4자리에서 5자리로 증가하기 때문에' 나타나는 디스플레이 문제. 물론, 이 역시 프로그램 상으로 연도가 음수로 인식해 나타나는 오류가 아니므로 오작동의 걱정은 하지 않아도 된다.

다만, 컴퓨터 프로그램이란게 모두 똑같이 작동한다는 보장이 없다. 프로그래머들이 꼼수를 쓴다고 항상 1900년대라고 가정해 프로그램을 짰다면, 어떤 꼼수를 썼느냐에 따라 그 결과는 천차만별이 된다. 이렇게 프로그램마다, 혹은 프로그램 내에서도 내부적으로 각 부분에서 같은 숫자를 가지고도 다른 결과를 낸다면 그 결과는 헬게이트가 된다. 예를 들어, 하나의 프로그램 내에서 a라는 모듈은 두 자리 연도를 만들기 위해 1900을 빼고[6], b라는 모듈은 항상 뒤의 두 자리만을 취하며, c라는 모듈은 항상 앞에서부터 세 번째, 네 번째만을 취한다. A라는 모듈은 두 자리 연도에서 네 자리 연도로 바꾸기 위해 1900을 더하고, B라는 모듈은 50보다 작은 연도에는 2000을 더하고 50보다 큰 연도에는 1900을 더하며, C라는 모듈은 주어진 연도 앞에 무조건 19를 붙인다고 해 보자. 그리고, 이 여섯 가지 모듈들이 하루에도 수십번씩 상호작용을 하면서 자료를 저장하고 불러온다고 해 보자. 저장된 자료들은 사람도 읽을 수 있게 연도가 기록되며 두 자리로 저장될 수도 있고 네 자리로 저장될 수도 있다. 1999년 12월 31일까지는 분명 이 프로그램은 아무런 문제 없이 잘 작동될 것이다. 하지만 2000년 1월 1일에는 과연 무슨 일이 일어날까? 연도를 읽고 쓰기만 하는 게 아니고 날짜순으로 정렬하거나 기간을 계산하는 등의 작업이 행해진다면? 그리고 이 기계가 안전에 직결된 기계라면?

5 비슷한 문제들

비슷한 문제들로 2010년 문제, 2038년 문제, 10000년 문제, 10억 초 문제, 497일 문제가 있다.
2010년 문제는 사소한 버그 하나로 끝났으나, 프로그래머의 실수로 인한 문제가 실제로 터져나온 것이므로 Y2K로 인한 문제가 실제로 있을 수 있었음을 증명하는 사례라고 할 수 있다. 2038년 문제는 Y2K문제의 교훈으로 차차 해결되어 가는 중이나 원격으로 업데이트하기 힘든 임베디드 시스템, 특히 한 번 만들어져 오랫동안 작동하는 기기에선 문제를 고치기가 쉽지 않다고 한다. 10000년 문제는 워낙 머나먼 미래라 그 때쯤이면 이미 해결책은 있을 것이고, 10억 초 문제는 큰 문제는 발생하지 않았다.

또한, 1999년엔 Y2K 문제의 유사품(?)으로 '99버그'란 것도 있었다고 한다. 코볼 언어로 만들어진 응용 프로그램 등에서 99나 9999 등을 관행적으로 오류코드나 종료코드로 설정했던 탓에 벌어진 문제였다.

6 기타

물론, 실제로 전자기기의 한계로 인해 프로그램 상으로 날자가 -로 인식되는 문제가 실제로 존재하는데, 이것이 바로 2038년 문제로...

1) Y2K 문제, 10억 초 문제, 1만년 문제
2) 2038년 문제, 497일 문제

이 두 분류는 영역이 완전히 다른 문제지만, 다분히 인간본위적인 해석에 의해 하나의 카테고리에 묶여있다.

1번 문제들은 전자기기 및 프로그램의 알고리즘과 전혀 상관없는 인간본위의 십진수 표현 때문에 오류가 나는 것(처럼 인식되는 문제).

2번 문제들은 프로그램의 알고리즘 수정이 필요한 전자기기 자체의 문제. 실제로 문제가 심각한 건 2번 문제들인데, 직관적으로 다가오는 1번 문제들이 오히려 더 심각하게 받아들여지고 있다...

다만, 예의 "인간 본위적인 표현"에 의한 프로그래머의 실수로 문제가 생길 수 있는 만큼 1번도 문제가 없다고는 할 수 없다. 위의 문단의 내용도 그렇고, 2010년 문제 항목 또한 참고.

당시 전 세계적으로 이 문제를 세기말적인 분위기와 엮으면서 호들갑을 상당히 많이 떨었다. 1999년에 주요 방송사 메인 뉴스에는 매주 빠지지 않는 단골 소재였고, 전산관련 문제만 터지면 Y2K와 엮기도 했다. 이 사건을 대비하기 위해 집에 라면이나 생수 등을 준비해 놓고, 현금을 미리 뽑아놓아라는 등의 설레발을 정규 뉴스시간에 떨기도 했다. 이 때문에 백화점이나 대형 마트 등이 생수나 라면 사재기 등으로 IMF로 신음하던 유통업계에 간만에 호재로 작용했다. 이에 유통업체에서 아예 Y2K 재난 대비 용품 세트를 제작해 파는 등의 공포심 마케팅을 펼쳐 쏠쏠한 재미를 보기도 했다.

이 문제를 한국에 제일 처음 소개한 것은 1990년대에 주간조선에 연재하고 있던 이원복의 시사만화 현대문명진단이다. 다시 말해 당시 신문기자들이 일개 만화가(대학교수이기도 하지만)보다도 정보력이 뒤졌던 셈.

7 매체에서의 등장

  • 딜버트 애니메이션 시즌 1의 10화가 Y2K를 다루고 있다. 밀레니엄 버그가 없도록 회사의 메인 서버인 Black Berry를 고쳐야 하는데 워낙 구식인 데다 머리도 안 빠지고 잘 나갔던 입사 초기의 월리가 메인 서버의 작업을 전담해서 했지만 이미 그는 너무 옛날 일이라며 다 까먹은 상황. 어떻게든 이 상황을 타개하고자 최면까지 동원해서 월리의 정신을 입사한지 얼마 안 됐던 그 시절로 되돌리며 애쓴다... 참고로 월리는 그 시절에 Y2K를 미리 예견하고 대비하면 어떻겠냐고 했지만 웃음거리만 됐다.
  • 숀 코너리, 캐서린 제타존스 주연의 1999년작 영화 엔트랩먼트는 밀레니엄 버그 방지를 위해 몇 초 사이 은행의 시스템이 꺼지는 순간을 써 거액을 계좌이체하려는 도둑들의 이야기이다. 영화 내에서 새천년 기념 행사 도중 2000년 1월 1일이 되자마자 거리 전체가 정전이 돼 시민들과 행사 진행자가 당황하는 장면이 나오는데, 그냥 행사 진행자의 장난이었고 별 재난은 일어나지 않았다.
  • 토치우드에서 밀레니엄 버그를 언급했는데, 다리가 18개 달린 진짜 벌레였다.
  • PSI FACTOR3기에서 Y2K해결 과정을 실제로 그린다. 그 과정은 복잡하지만...
  • Y2K를 소재로 한 영화도 있다. 냉전 시절에 미국이 남미에 비밀리에 설치한 아주 오래된 핵미사일 기지에서 Y2K버그가 일어나 핵미사일이 발사 직전이라는 상황이라 해당 기지 개발자인 노인과 미군 특수부대가 핵미사일 기지를 정지시키러 간다는 내용. 결론부터 말하면 여기서도 Y2K는 뻥이다. 마약 밀매업자이자 현지 군벌의 리더가 핵미사일을 수중에 넣어 팔아 먹으려고 가짜로 Y2K가 벌어진 척하고 주인공의 도움으로 핵미사일 벙커를 열었다. 참고로 이 영화에 출연한 배우들 중 하나가 바로 맬컴 맥다월이다.
    • 같은 소재의 동명 원제인 영화가 한 편 더 있다. 여기선 진짜로 y2k문제가 일어나는 바람에 나온 충격과 공포의 대재앙으로 세계 전체가 엄청난 혼란에 휩싸이면서 종말의 위기를 맞자, 주인공들이 그걸 막으러 고군분투한다는 내용이다. 이 영화는 국내에서 카운트다운 1999라는 제목으로 출시했고, 뒷날 KBS에서 1999년 12월 26일 특선영화로 더빙 방영한 적도 있었다.
  • 90년대 SBS 간판예능 기쁜우리토요일의 인기코너 가슴을 열어라에서, 당시 어떤 고등학생이 밀레니엄 버를 밀레니엄 버로 잘못 알아들어 새로나온 햄버거인 줄 알고 패스트푸드점에서 달라 했다가 망신을 겪었다.
  • 국내 드라마에서도 Y2K를 다룬 적이 있는데, 카이스트에서도 Y2K를 소재로 한 에피소드가 나왔다. 1999년 연말에는 Y2K를 소재로 한 특집극도 방영되었는데, Y2K로 위장한 바이러스를 이용하 국내 주식시장을 공격하여 막대한 이익을 챙기려는 음모를 주인공들이 막아낸다는 내용.[7] 카이스트나 이 특집극 모두 이민우가 출연했다.

8 관련 문서

  1. 물론 IBM의 마켓셰어가 압도적으로 높았지만 그 외에도 지금은 없어진 수많은 컴퓨터 제조사들이 있었다. UNIVAC, SPERRY-LAND, DIGITAL(DEC), CONTROL-DATA, WANG 등
  2. IBM 메인프레임용 OS를 FACOM(Fujitsu)이나 UNIVAC 기기에서 운용할 수는 없다. UNIXSolarisAIX, HP/UX처럼 이름만 바꿔 여러 회사의 기기에서 운용되는 것과는 대조적이다.
  3. 다시 한 번 말하지만 Y2K 문제는 1970년대 이전에 주로 개발된 메인프레임급 기기 및 중, 대형 컴퓨터 및 그 응용프로그램이 1999년에도 그대로 쓰이는 것 때문에 생긴 문제이지, 이후에 개발된 UNIXNT머신 및 PC를 두고 이야기한 것은 아니다. 참고로 UNIX도 Y2K 문제가 있어서 1998~1999년 사이 해당 OS 제조사에서 버전별로 Y2K patch를 만들어 적용했다.
  4. 1999년 당시 486은 사무용에 한정하면 아직 현역인 기종이다. 당시 Y2K 문제를 이야기해야 할 엄청난 구식 컴퓨터는 PC에 한정한다면 8비트 PC 정도를 이야기해야 한다. 년도 앞자리를 19로 강제하는 구형 전자수첩이 여기 해당된다. 이런 경우 대부분은 표시할 때 'XX 형태로 표시하므로 큰 문제는 없다.
  5. 하지만 Y2K 문제는 70년대부터 등장한 유닉스 기기가 아니라 더 오래전에 도입되어 사용하는 메인프레임급이나, 주요 서버 제조사마다 달랐던 유닉스 이전의 운영체제(이를테면 VAX의 VMS 등)에서 이야기되는 것이다. 당장 위에서 보더라도 코볼 이야기가 나오는 것을 보면. 이들 운영체제는 주요 컴퓨터 회사마다 달랐고 1999년 당시 기준으로 해당 기기(및 OS)가 오래전에 단종됨은 물론 아예 제조사가 사라진 곳들도 많아서 관련 엔지니어를 구하기 어려워서 해결하는 데 힘이 들었다. 괜히 금융권에서 그 시절 난리법석을 떤 게 아니다.
  6. 실제 C 기반 프로그램들과, C 기반 언어들(예를 들어 Java) 까지도 이런 식으로 계산을 했다고 한다.
  7. IMF 외환위기 시대에 방영되다 보니 당시 해지펀드에 대한 비판적 여론이 반영된 듯