코드의 미궁, 페이스북 (2011)

12025년 08월 16일4

2011년, 캘리포니아 팰로앨토. 페이스북의 심장부라 불리는 '해커 웨이(Hacker Way)' 1번가. 축제처럼 자유분방한 분위기와는 달리, 엔지니어링 팀의 공기는 무겁게 가라앉아 있었다. 모니터 불빛만이 어두운 실내를 밝히는 가운데, 키보드를 두드리는 소리마저 신경질적으로 날카로웠다.

문제의 발단은 사소해 보이는 아이콘 하나에서 시작되었다.

“젠장, 또야!”

프론트엔드 개발자, 맷이 마른세수를 하며 중얼거렸다. 그의 모니터에는 ‘버그 리포트’이라는 붉은색 태그가 선명했다. 내용은 지겨울 정도로 익숙했다.

[버그] 알림 아이콘: 새로운 알림이 없는데도 숫자 ‘1’이 사라지지 않는 문제.

이 버그는 유령과도 같았다. 잡았다고 생각하면 어느새 다른 곳에서 고개를 내밀었고, 고치면 멀쩡하던 다른 기능이 말썽을 부렸다. 메시지 창이 갑자기 닫히거나, 친구 요청 목록이 엉뚱하게 표시되는 식이었다.

“이건 저주야.”

옆자리의 동료가 넋두리처럼 내뱉었다. 누구도 부정하지 않았다. 그들은 지금 거대한 미궁 속을 헤매고 있었다. 자신들이 한 줄 한 줄 쌓아 올린 코드의 미궁이었다.

당시 페이스북의 웹페이지는 PHP라는 언어로 만들어지고 있었다. 서버에서 PHP 코드가 실행되면, 최종적으로 사용자의 웹 브라우저에 보여질 거대한 HTML 문서 덩어리를 만들어 보낸다. 문제는 그 다음이었다.

페이지가 화면에 그려지고 나면, 수십, 수백 개의 자바스크립트 파일들이 깨어났다. 그 중심에는 당시 웹 개발의 제왕, jQuery가 있었다. jQuery는 강력했다. ‘알림 아이콘에 빨간 점을 찍어라’, ‘채팅창을 부드럽게 열어라’, ‘사진을 클릭하면 확대해라’ 같은 명령을 내리면 웹페이지의 특정 부분(DOM)을 귀신같이 찾아내 조작했다.

하지만 페이스북의 규모는 jQuery가 감당하기엔 너무나 거대해져 버렸다.

‘좋아요’ 버튼을 관리하는 스크립트.
실시간 채팅을 담당하는 스크립트.
뉴스피드를 갱신하는 스크립트.

각기 다른 팀에서, 다른 시기에 만든 수많은 코드 조각들이 사용자의 눈에는 보이지 않는 HTML 구조를 두고 서로 싸우는 것과 같았다. 알림 팀이 ‘알림 숫자’를 바꾸려고 특정 태그를 수정하면, 그 태그를 함께 사용하던 메시지 팀의 기능에 예기치 못한 문제가 터졌다. 마치 한 지붕 아래 사는 가족들이 서로 말 한마디 없이 각자 자기 방의 벽지를 바꾸고, 가구를 옮기는 혼돈과도 같았다.

상태(State)는 도처에 널려 있었지만, 그 누구도 전체 그림을 보지 못했다. 지금 알림 숫자가 ‘1’인 이유가 새로운 메시지 때문인지, 친구 요청 때문인지, 아니면 3분 전에 실행된 다른 스크립트가 지우는 것을 ‘깜빡’한 탓인지 추적하는 것은 불가능에 가까웠다.

그 혼돈의 현장에서 조금 떨어진 곳, 조던 워크(Jordan Walke)는 고요했다.

그의 눈은 버그 리포트가 아닌, 코드 그 자체의 근원을 향해 있었다. 그의 머릿속에는 지금 동료들이 씨름하는 PHP와 jQuery의 방식과는 전혀 다른 그림이 그려지고 있었다.

‘문제는 버그가 아니야. 방식 자체가 잘못됐어.’

그는 생각했다. 지금의 방식은 마치 수백 명의 요리사가 하나의 거대한 냄비에 각자 다른 재료를 아무 때나 쏟아붓는 것과 같았다. 처음에는 그럭저럭 맛이 났을지 몰라도, 이제는 정체 모를 죽이 되어버린 것이다.

조던은 직감했다. 이 미궁을 탈출하기 위해서는 길을 찾는 것을 포기해야 한다고. 지도를 불태우고, 미궁 자체를 무너뜨린 뒤, 완전히 새로운 법칙으로 된 도시를 세워야만 했다.

그의 시선이 동료들의 모니터에 가득한 복잡한 코드의 정글을 스쳐 지나갔다. 그리고 그는 조용히 자신만의 에디터를 열었다. 아직 이름도, 형태도 없는 아이디어의 첫 문장을 적기 위해서였다.

지금의 페이스북을 구원하고, 나아가 웹의 역사를 바꿀 새로운 질서의 시작이었다.