싸이의 ‘강남스타일’ 인기는 상상을 초월합니다. 적어도 유튜브 코드에 의하면 확실히 그랬죠. 유튜브 조회수가 2,147,483,647 (21억) 을 넘어가면서 조회수를 64비트 숫자로 바꾸어 9,223,372,036,854,775,808(922경)까지 평가할 수 있게 바꾸었죠. 유튜브는 왜 조회수를 21억 이상 셀 수 없었던 걸까요?
답은 컴퓨터가 정보를 계산하는 방법에 있습니다. 숫자가 반도체에 저장되던 하드디스크에 저장되던 모든 숫자는 이진법으로 바뀌어 저장됩니다. 십진법에서는 모든 숫자는 0에서 9까지 10개의 숫자를 써서 나타납니다. 이진법에서는 0과 1 두 숫자를 가지고 숫자를 나타내죠. 십진법에서 세 자리는 각각 100, 10, 1을 나타냅니다. 십진법 세 자리에서 가장 큰 숫자는 999입니다. 이진법에서 세 자리는 각각 4,2,1을 뜻합니다. 세 자릿수로 가장 큰 숫자인 111은 7을 뜻하죠. 8자리 이진법 숫자는 0에서 255까지를 표기할 수 있고, 바이트라고 불립니다. 바이트부터는 각각 제곱수로 올라갑니다. 2바이트 (16비트) 는 0에서 65,535까지, 4바이트(32비트)는 0에서 4,292,967,295까지 표기할 수 있는 식이죠. 유튜브가 처음 만들어졌을 때 프로그래머들은 조회수를 나타내는 숫자에 32비트를 할당하기로 했고, 당시에는 합리적인 결정으로 보였죠.
여기서, 유튜브의 가능한 조회수가 2,147,483,647로 4,294,967,295가 아니라는 데 주목할 필요가 있습니다. 이건 왜 다른 걸까요? 32비트가 양수가 아니기 때문이다. 음수를 표기하기 위해서는 절반인 2,147,483,647을 음수에 할당한 것이죠. 유튜브의 32 비트 숫자는 0에서 4,294,967,295까지 표기하는 대신 -2,147,483,648에서 2,147,483,647까지 표기합니다. 유튜브의 조회는 음수가 될 일이 없지만 일반 데이터베이스나 프로그래밍을 할 때는 음수를 써야 될 때가 있습니다. 따라서 첫 자리는 음수인지 양수인지 판별하는 부호로 읽고 32비트 숫자는 -2,147,483,648로 2,147,483,647 읽는 것이 컴퓨터의 표준 언어지요. 유튜브의 조회수가 20억을 넘어가면서 32비트가 표현할 수 있는 최고 숫자를 넘어가자 더 이상 컴퓨터는 제대로 숫자를 읽을 수가 없었습니다. 결국 유튜브는 조회수를 64비트로 만들고 9,223,372,036,854,775,808(922경)까지 읽게 변환하였죠.
이런 문제를 안고 있는 건 유튜브만이 아닙니다. 수년 전에 지어진 프로그램들은 숫자가 넘쳐흘러 감당하지 못하곤 하죠. 유닉스 시스템이나 이에 기반한 안드로이드, 애플폰, 맥킨토시, 대부분 인터넷 서버는 2038년 1월 19일 03:14:07 시가 되면 더 이상 시간을 계산할 수 없게 됩니다. 유닉스는 1970년 1월 1일부터 모든 시간을 1초 단위로 계산하는데 32비트만 할당하여 2,147,483,647초가 지나면 더 이상 숫자를 읽지 못하는 것이죠. 이는 “2038 버그” 라 하여 밀레니엄 버그에 버금가는 문제로 뽑힙니다. 새로운 버젼들은 시간을 계산하는 숫자를 64로 비트로 바꾸었으나, 오래된 소프트웨어나 기기는 문제를 일으킬 겁니다. 그때가 되면 유튜브 조회수도 922경을 넘어설지도 모르죠. (Economist)
뉴스페퍼민트는 SBS의 콘텐츠 플랫폼 스브스프리미엄(스프)에 뉴욕타임스 칼럼을 한 편씩 선정해 번역하고, 글에 관한 해설을 쓰고…
* 비상 계엄령 선포와 내란에 이은 탄핵 정국으로 인해 한동안 쉬었던 스브스프리미엄에 쓴 해설 시차발행을…
우리나라 뉴스가 반헌법적인 계엄령을 선포해 내란죄 피의자가 된 윤석열 대통령을 탄핵하는 뉴스로 도배되는 사이 미국에서…
윤석열 대통령에 대한 탄핵 소추안 투표가 오늘 진행됩니다. 첫 번째 투표는 국민의힘 의원들이 집단으로 투표에…
윤석열 대통령의 계엄령 선포와 해제 이후 미국 언론도 한국에서 일어나는 정치적 사태에 큰 관심을 보이고…
트럼프 2기 행정부가 출범하면 미국과 중국의 관계가 어떻게 될지에 전 세계가 촉각을 곤두세우고 있습니다. 안보…
View Comments
사소한 번역오류 발견했습니다. 원문과 감당하는 범위가 1만큼 다르네요. 원문에서는 "from -2,147,483,648 to 2,147,483,647, rather than 0 to 4,294,967,295." 라고 했죠. 컴퓨터 공학도한테는 쉬운 기초 개념입니다 ㅎㅎ..