조던 워크는 차분하게 발표를 시작했다. 그의 목소리는 떨리지 않았다. 그는 먼저 청중의 공감을 얻기 위해, 모두가 겪고 있는 문제에서부터 이야기를 풀어나갔다.
“페이스북과 같은 대규모 애플리케이션을 만들 때, 우리는 언제나 복잡성이라는 적과 싸워야 합니다.”
그는 스크린에 페이스북 뉴스피드의 스크린샷을 띄웠다. 수많은 ‘좋아요’ 버튼, 댓글 창, 실시간 알림이 뒤섞여 있는, 살아있는 유기체와도 같은 화면이었다.
“이 화면의 작은 부분 하나를 바꾸는 것이, 전혀 예상치 못한 다른 부분에 버그를 일으키는 경험. 우리 모두 해본 적 있지 않습니까? 데이터의 상태와 UI의 상태가 엇갈리고, 그 원인을 찾기 위해 수십 개의 파일을 뒤져야 했던 악몽 같은 시간들 말입니다.”
청중석 곳곳에서 공감의 끄덕임이 보였다. 그것은 프레임워크나 회사의 규모를 떠나, 모든 웹 개발자가 겪는 공통의 고통이었다.
“우리는 이 문제를 해결하기 위해 수많은 시도를 했습니다. MVC, 양방향 데이터 바인딩… 하지만 애플리케이션이 커질수록, 데이터의 흐름은 점점 더 예측하기 어려워졌습니다. 그래서 우리는 질문의 방향을 바꾸기로 했습니다.”
조던은 잠시 말을 멈추고, 청중을 둘러보았다.
“‘어떻게 변화를 효율적으로 추적할 것인가?’가 아니라, ‘변화를 추적하는 것 자체를 포기하면 어떨까?’ 라고 말입니다.”
청중석이 술렁이기 시작했다. 변화를 추적하는 것을 포기한다니, 상식에 어긋나는 말이었다.
“대신, 우리는 데이터가 바뀔 때마다, 애플리케이션 전체를 처음부터 다시 계산하는 극단적으로 단순한 모델을 생각했습니다. 물론, 실제로 그렇게 하면 성능에 재앙이 닥치겠죠.”
그는 발표의 핵심으로 들어갔다.
“그래서 우리는 이 문제를 해결하기 위해 새로운 기술을 만들었습니다. 바로 버추얼 DOM입니다.”
스크린에는 ‘Virtual DOM’이라는 단어가 크게 나타났다. 조던은 메모리상의 가벼운 자바스크립트 객체를 이용해 전체 UI의 구조를 표현하고, 실제 DOM을 건드리기 전에 모든 비교와 계산을 이 가상의 세계에서 끝낸다는 개념을 설명했다.
“우리는 매번 새로운 버추얼 DOM 트리를 생성하고, 그것을 이전 트리와 비교합니다. 그리고 그 차이점만을 계산해서, 실제 DOM에는 최소한의 변경만을 일괄적으로 적용하죠. 이 모든 과정은 믿을 수 없을 만큼 빠릅니다.”
그는 지난번 팀 내부에서 시연했던, 수백 개의 행이 실시간으로 업데이트되는 데모를 청중에게 직접 보여주었다. 청중의 눈이 커졌다. 매초 수백 개의 컴포넌트가 리렌더링되는데도 브라우저가 전혀 버벅이지 않는 모습은 그들의 상식을 뛰어넘는 것이었다.
분위기는 나쁘지 않았다. 버추얼 DOM이라는 아이디어의 독창성과 그 성능에 대해 감탄하는 눈치였다. 몇몇 개발자들은 흥미로운 표정으로 노트북에 무언가를 빠르게 기록하기 시작했다.
조던은 발표의 다음 단계로 넘어갔다. 그는 이 버추얼 DOM을 어떻게 ‘선언적으로’ 만들어낼 수 있는지에 대한 이야기를 꺼냈다.
“이 버추얼 DOM을 만들기 위해, 저희는 컴포넌트라는 개념을 도입했습니다. 재사용 가능한 UI 부품이죠. 그리고 이 부품을 정의하기 위해, 저희는 이런 방식을 사용합니다.”
그는 스크린에 리액트 컴포넌트의 실제 코드를 띄웠다. 청중이 그 코드를 자세히 보기 시작하는 순간, 조던은 직감했다.
지금까지의 호의적인 분위기가 곧 끝날 것이라는 것을.
진짜 논쟁은 이제부터 시작이었다.


