‘싸이’의 2012년 곡 ‘강남스타일’이 유튜브에서 또 한 번 기록을 세웠다. ‘세계신기록’, ‘최다조회수’와 같은 평범한 타이틀은 아니다. ‘강남스타일’ 뮤직비디오의 조회수가 컴퓨터의 표현 한계를 넘었다. 구글은 싸이의 동영상 덕분에 유튜브의 조회수 기록 방법을 바꿨다. 2진법 세상의 컴퓨터 프로그래밍 영역에서만 보면, 기념비적인 사건이다.

gangnam_2_800
▲ gangnam_2_800

싸이의 동영상 조회수와 구글의 대응을 이해하려면, 컴퓨터가 숫자를 표현하는 방식을 알아야 한다. 컴퓨터는 정보를 저장할 때 숫자 0과 1을 쓴다. 이를 2진법이라고 부른다. 2진법은 숫자가 들어갈 각 자리를 마련하고, 각 자리에 0과 1을 채워 숫자를 만든다. 자리를 하나만 쓰면 1비트, 4개를 쓰면 4비트다. 예를 들어 4비트가 표현하는 2진법 ‘1010’은 우리가 쓰는 숫자 10이다.

유튜브의 동영상 조회수는 원래 32비트로 개발됐다. 2진법의 0과 1이 채워지는 자리가 총 32개라는 뜻이다. 32비트 환경에서 표현할 수 있는 숫자의 범위는 2,147,483,647(21억4748만3647)이다. 이는 양수의 범위고, 음수의 범위까지 더하면 -2,147,483,648에서 2,147,483,647까지다. 싸이의 동영상은 12월1일 32비트로 표현할 수 있는 최대 양수 범위인 2,147,483,647을 넘었다.

이 숫자를 초과하면 어떤 일이 발생할까. 숫자가 돌연 음수로 바뀐다. 2,147,483,647에서 1명이 더 ‘강남스타일’을 재생했을 때 현실 세계에서는 2,147,483,648이 돼야 하지만 컴퓨터 세상에서는 -2,147,483,648이 나온다. 이를 ‘정수(인티저) 오버플로우’라고 부른다.

2진법의 32비트 자릿수를 모두 독립된 그릇이라고 생각해보자. 맨 앞자리 그릇부터 마지막 그릇까지 총 32개의 그릇이 있다. 이 중 맨 앞의 그릇은 숫자가 음수인가 혹은 양수인가를 판별할 때 쓴다. 2,147,483,647까지 맨 앞자리 그릇은 양수를 표현하는 0이 담긴다. 즉, 01111111111111111111111111111111 까지 도달한 이후 1이 더해지면 맨 앞자리에 담긴 2진법 숫자 0이 1로 바뀐다. 그릇에 담기게 되는 숫자는 10000000000000000000000000000000으로 바뀐다. 이 2진법을 컴퓨터는 -2,147,483,648로 읽는다. 음수, 양수를 판별하기 위한 맨 앞자리 그릇이 음수를 뜻하는 1로 바뀌었으니 ‘강남스타일' 동영상의 조회수가 음수로 바꿔 표기되기 시작한다. 컴퓨터 처지에서는 정상이지만, 현실에서는 있을 수 없는 일이다.

구글은 이 현상을 해결하기 위해 32비트로 표현해오던 유튜브 조회수를 64비트로 바꿨다. 64비트는 그릇이 총 64개 있다는 뜻이다. 64비트가 표현할 수 있는 숫자의 한계는 9,223,372,036,854,775,808까지다. 우리말로 읽으면 922경3372조368억5477만5808이다. 까마득한 숫자다.

싸이 ‘강남스타일’ 유튜브 동영상이 12월1일, 21억4748만3647건에서 갑자기 -21억4748만3648건으로 바뀌었다.

구글은 유튜브의 동영상 조회수 시스템을 어떻게 32비트에서 64비트로 바꿨을까. 구글이 직접 밝히지 않는 한 정확한 소스코드나 변환 과정을 알 수는 없지만, 이미 알려진 사실을 바탕으로 추측해볼 수 있다. 시스템 구조를 전문으로 다루는 <하이스케일러빌리티>가 공개한 정보를 따르면, 구글은 유튜브 운영에 웹서버와 콘텐츠 딜리버리 네트워크(CDN), MySQL을 함께 쓴다. CDN은 사용자가 올린 동영상이 저장되는 장소를 말하고, MySQL은 동영상에 담긴 각종 메타데이터를 저장하는 데이터베이스(DB) 서버를 뜻한다. 동영상 제목과 조회수, 구독자 수 등 영상에 딸린 각종 정보가 바로 메타데이터에다.

사용자가 유튜브에서 동영상을 고르면, 이 요청이 웹서버로 전달된다. 웹서버는 사용자의 요청에 따라 MySQL 서버의 DB에서 메타데이터를 참조한다. 이때 참조하는 요소 중에는 동영상이 CDN의 어디에 저장돼 있는지도 포함된다. 사용자의 요청이 웹서버를 거쳐 CDN의 동영상과 MySQL의 메타데이터를 웹브라우저에서 출력하는 것이 유튜브의 기본 구조다.

동영상 조회수 정보는 메타데이터다. 다시 말하면 구글이 기존 32비트에서 64비트로 업그레이드한 영역이 MySQL일 가능성이 높다는 뜻이다. MySQL 서버는 정보를 ‘테이블’과 테이블 속의 ‘칼럼’으로 구분해 저장하는데, 구글이 32비트에서 64비트로 업그레이드 했다고 밝힌 것으로 미루어보아 조회수 칼럼 영역을 32비트에서 64비트로 바꾼 것으로 추정된다.

조회수 시스템을 바꾸는 방법도 여러 가지가 있다. 하나는 싸이의 ‘강남스타일’처럼 2,147,483,647번을 넘어서는 특정 동영상만 바꾸는 방법이고, 다른 하나는 유튜브의 모든 동영상 조회수 기록을 64비트로 기록하는 방식이다. 특정 동영상만 64비트로 표현하도록 하면 서버 자원을 아낄 수 있다. 다른 동영상은 기존처럼 32비트로 저장하면 된다. 모든 동영상의 조회수를 64비트로 저장하도록 시스템을 바꾸면, 조회수를 기록하는 데 필요한 서버 자원이 2배로 늘어난다. 구글은 어떻게 했을까. 구글에 직접 문의했다.

“(이번 업그레이드는)모든 사이트에 해당하는 내용으로 전세계에 적용됐습니다. 우리는 이것(조회수)을 정의하는 모든 소스코드를 업그레이드했습니다.”

구글의 답변을 따르면, 이번 조회수 시스템의 64비트 업그레이드는 유튜브에 등록된 모든 동영상에 해당하는 것으로 보인다.

gangnam_1_800
▲ gangnam_1_800

싸이의 강남스타일 동영상이 64비트의 숫자 표현 한계를 넘어서는 날이 올까. 계산해보자. 싸이의 뮤직비디오가 유튜브에 등록된 것은 지난 2012년 7월15일. 2,147,483,647 조회까지 870일이 걸렸다. 하루에 평균적으로 246만8372번 동영상이 재생된 셈이다. 앞으로도 이 같은 속도로 ‘강남스타일' 뮤직비디오가 재생된다면, 조회수가 64비트의 표현 한계를 넘는 날은 앞으로 약 100억년 뒤의 일이다.

유튜브의 구글플러스 공식 계정은 “싸이를 만나기 전 우리는 비디오 재생 횟수가 32비트 정수보다 클 것이라고는 생각하지 못했다”라며 “‘강남스타일'이 너무 많이 재생된 덕분에 64비트로 업그레이드 할 수밖에 없었다”라고 밝히기도 했다.

922경에 이르는 숫자와 100억년이라는 세월은 지금 생각하면 아득하다. 하지만 2005년 유트브가 탄생할 당시 누구도 동영상 조회수가 21억건이 넘을 것이라고는 상상하지 못했다. 100억년이라는 세월도 마찬가지 아닐까. 유튜브가 아닌 다른 곳에서, 또 다른 콘텐츠가 64비트의 벽을 허물 날도 분명 오리라. 9년 전의 유튜브가 2014년의 12월1일의 ‘강남스타일’을 예상하지 못한 것처럼 말이다.

저작권자 © 블로터 무단전재 및 재배포 금지