강남스타일은 어떻게 유튜브 조회수 측정 서버에 문제를 일으켰나
2014년 12월 17일  |  By:   |  경영, 과학  |  2 Comments

싸이의 ‘강남스타일’ 인기는 상상을 초월합니다. 적어도 유튜브 코드에 의하면 확실히 그랬죠. 유튜브 조회수가 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)

원문보기