스파게티 코드 속의 사투

32025년 08월 18일4

맷은 결국 롤백(Rollback)을 결정했다. 자신이 야심 차게 수정했던 코드를 원래대로 되돌리는, 개발자에게는 패배 선언과도 같은 조치였다. 메시지 시스템은 정상으로 돌아왔지만, 유령 같던 알림 아이콘 버그는 다시 고개를 들었다. 제자리로 돌아온 것이다. 아니, 더 깊은 절망의 구렁텅이로 빠진 기분이었다.

그날 밤, 페이스북 엔지니어링 팀의 분위기는 어느 때보다 무거웠다. 맷의 실패는 단순히 한 개인의 실수가 아니었다. 그것은 팀 전체, 아니 페이스북 프론트엔드 개발 방식 전체가 마주한 거대한 벽을 상징하는 사건이었다.

“이게 지금 우리 코드의 현실이야.”

팀 리더인 톰이 회의실 화이트보드에 복잡한 그림을 그리기 시작했다. 동그라미 몇 개를 그리고는, 그것들을 실선으로 마구잡이로 연결했다. 마치 아이의 장난 같은 낙서였지만, 그 자리에 있는 개발자들은 그것이 무엇을 의미하는지 정확히 알았다.

하나의 동그라미는 ‘뉴스피드’ 기능. 또 다른 동그라미는 ‘채팅창’. 다른 하나는 ‘알림’ 기능이었다. 그리고 그것들을 잇는 실선들은 각 기능의 자바스크립트 코드들이 서로의 HTML 구조를 얼마나 침범하고, 데이터를 훔쳐보고, 상태를 멋대로 바꾸는지를 나타내는 의존성의 거미줄이었다.

“뉴스피드에 새 글이 올라오면, 알림 카운터를 업데이트하는 스크립트가 돌지. 채팅창에 새 메시지가 도착해도 알림 카운터 스크립트가 돌아. 그런데 문제는, 알림 카운터 스크립트도 가끔 채팅창의 상태를 확인해서 자기 숫자를 바꾼다는 거야. 서로가 서로의 발목을 잡고 있는 거지.”

톰의 설명은 개발자들의 가슴을 답답하게 짓눌렀다. 그들이 매일 마주하는 코드였다. 한 줄을 고치기 위해 열 줄을 읽어야 하고, 그 열 줄 때문에 다른 스무 줄의 코드가 영향을 받을까 봐 전전긍긍해야 하는 현실. 그들은 이 복잡하게 얽히고설킨 코드 뭉치를 ‘스파게티 코드’라고 불렀다. 한번 포크로 집어 올리면, 어디가 시작이고 끝인지 모르게 모든 면발이 딸려 올라오는 스파게티처럼, 한 부분을 건드리면 어디까지 문제가 번질지 예측할 수 없었기 때문이다.

“우리가 만든 괴물이야.”

누군가 자조 섞인 목소리로 말했다. 페이스북의 성공이, 폭발적인 기능 추가가, 빠른 개발 속도에 대한 집착이 결국 거대한 기술 부채(Technical Debt)가 되어 그들의 발목을 잡고 있었다.

이 사태의 근본적인 원인은 명확했다. 바로 데이터와 화면 표시(View)가 한데 뒤섞여 있다는 것. 데이터는 특정 HTML 태그의 속성값이나 텍스트 안에 숨어 있기도 했고, 어떤 자바스크립트 파일의 지역 변수에 저장되기도 했다.

데이터가 변경되면, 개발자는 jQuery를 이용해 그 데이터를 표시하는 모든 HTML 요소를 직접 찾아내 일일이 수정해 줘야 했다.

$('#notification_badge_count').text('2');
$('#chat_window_title').addClass('unread');
$('#user_profile_link').css('font-weight', 'bold');

이런 명령형 코드들이 수백, 수천 줄 쌓여갔다. 문제는 이 명령들이 ‘언제’, ‘어떤 순서로’ 실행되어야 하는지 관리하는 중앙 통제 시스템이 없다는 점이었다. 모든 코드가 제멋대로 화면의 각 부분을 조작했고, 그 결과는 예측 불가능한 혼돈뿐이었다.

회의 내내 침묵을 지키던 조던 워크가 조용히 입을 열었다.

“우리가 직접 화면의 특정 부분을 찾아가서 바꾸기 때문에 문제가 생기는 겁니다.”

모두의 시선이 그에게 쏠렸다.

“알림 아이콘에 숫자를 ‘쓰라’고 명령하는 대신, 그냥 ‘표시해야 할 알림 개수는 2개다’라고 선언만 하면 어떨까요? 그러면 시스템이 알아서 그 숫자를 화면에 그려주는 겁니다. 우리는 그 숫자가 화면 어디에, 어떻게 그려지는지 신경 쓸 필요 없이요.”

‘명령’이 아닌 ‘선언’.

그것은 당시 웹 개발의 패러다임을 정면으로 거스르는 생각이었다. 개발자가 모든 것을 통제하고 지시해야 한다는 믿음이 팽배하던 시절, 조던의 말은 너무나 이상적으로 들렸다.

“시스템이 어떻게 ‘알아서’ 그걸 하죠, 조던? 그 시스템은 누가 만듭니까?” 톰이 현실적인 질문을 던졌다.

조던은 잠시 말을 고르더니, 나지막하지만 단호한 목소리로 대답했다.

“우리가 만들어야죠.”

그 순간, 회의실의 공기가 미묘하게 변했다. 누군가는 허무맹랑한 소리라 여겼고, 누군가는 절망 속에서 희미한 빛 한 줄기를 본 듯한 표정을 지었다. 그 누구도 확신할 수 없었지만, 한 가지는 분명했다. 기존의 방식으로는 더 이상 나아갈 수 없다는 것. 그리고 조던 워크는 그 너머를 보고 있다는 사실이었다.