동료들의 첫 반응: 미친 짓이야

372025년 09월 21일4

조던 워크는 지난 몇 주간의 연구와 개발 결과를 정리하여 팀 전체 앞에서 발표를 준비했다. 그의 손에는 ‘FaxJS’의 개선된 프로토타입과 버추얼 DOM, 그리고 Diffing 알고리즘에 대한 상세한 설명 자료가 들려 있었다. 그는 자신의 아이디어가 가진 기술적 우아함과 논리적 타당성에 대해 자신이 있었다.

발표는 차분하게 시작되었다. 그는 단방향 데이터 흐름의 장점부터 시작해, 개발자가 UI = f(data)라는 단순한 모델에만 집중할 수 있게 되는 이상적인 개발 환경을 설명했다. 여기까지는 대부분의 팀원이 고개를 끄덕이며 동의했다.

문제는 그 ‘어떻게’를 설명하는 부분에서 시작되었다.

“...그래서, 데이터가 변경될 때마다 우리는 메모리상에서 전체 UI에 대한 새로운 버추얼 DOM 트리를 생성합니다.”

그가 이 말을 하는 순간, 회의실 곳곳에서 미세한 술렁임이 일었다.

“그리고 이 새로운 버추얼 DOM 트리와 이전 버추얼 DOM 트리를 비교하여 변경점 목록을 찾아냅니다. 마지막으로 이 목록을 실제 DOM에 한 번에 적용하는 거죠.”

설명이 끝나자, 잠시 무거운 침묵이 흘렀다. 침묵을 깬 것은 성능 전문가 데이빗이었다. 그의 목소리에는 노골적인 의구심이 가득했다.

“조던, 그러니까 당신 말은… ‘좋아요’ 숫자 하나 바꾸려고, 뉴스피드에 있는 수천 개의 컴포넌트에 대한 자바스크립트 객체를 전부 새로 만들고, 그걸 또 이전 객체 트리랑 일일이 비교하겠다는 겁니까? 제정신으로 하는 소리예요?”

‘제정신이냐’는 말은 다소 과격했지만, 회의실에 있는 대부분의 엔지니어들이 속으로 하고 있던 생각이었다. 그들의 상식으로는 도저히 받아들일 수 없는 방식이었다. 그것은 우아한 해결책이 아니라, 성능을 무시한 채 CPU와 메모리를 낭비하는 가장 어리석고 무식한 방법처럼 보였다.

맷도 거들었다. 그는 조던의 아이디어를 지지하는 편이었지만, 현실적인 우려를 떨칠 수 없었다.
“이론적으로는 이해합니다, 조던. 하지만 그 Diffing 알고리즘이라는 게 정말로, 페이스북 규모의 복잡한 UI에서 즉각적으로 반응할 만큼 빠르다고 어떻게 장담하죠? 사용자가 스크롤을 빠르게 내리는 상황에서, 수백 개의 목록 아이템이 화면에 들어왔다 나갈 때마다 이 비교 작업을 한다면… 상상만 해도 끔찍한데요.”

다른 개발자도 비판에 가세했다.
“결국, 복잡한 Diffing 알고리즘을 블랙박스 안에 숨겨놓은 것뿐이잖아요. 우리는 이제 jQuery 대신 당신이 만든 라이브러리의 성능에 목을 매야 하는 거 아닙니까? 문제가 생겼을 때, 우리가 그 복잡한 알고리즘 내부를 어떻게 디버깅하죠?”

반응은 차가웠다.
그들은 조던의 아이디어를 혁신이 아닌, 현실 감각 없는 엔지니어의 위험한 도박으로 받아들이고 있었다. 기존 방식은 버그가 많고 복잡했지만, 적어도 그들의 통제 아래 있었다. 하지만 조던의 방식은 모든 것을 거대한 마법 상자(라이브러리)에 맡겨버리는 것과 같았다. 그 마법이 실패했을 때의 대가는 너무나 커 보였다.

톰은 팔짱을 낀 채 아무 말 없이 상황을 지켜보고 있었다. 그는 팀원들의 반발이 당연하다고 생각했다. 조던의 아이디어는 지난 10년간의 프론트엔드 개발 상식을 송두리째 뒤엎는 것이었기 때문이다.

조던은 예상했던 반응이라는 듯, 담담한 표정으로 서 있었다. 그는 백 마디 말보다 한 번의 증명이 더 강력하다는 것을 알고 있었다. 이론과 슬라이드만으로는 이 깊은 불신을 깰 수 없었다.

그는 조용히 자신의 노트북을 회의실 프로젝터에 연결했다.
“알겠습니다. 여러분의 우려가 당연하다고 생각합니다. 그럼, 직접 보여드리죠.”

그의 화면에는 수백 개의 목록 아이템을 렌더링하는 스트레스 테스트용 데모 페이지가 떠 있었다. 이제 모든 것은 이 작은 데모의 성능에 달려 있었다.