스탠다드 ML의 세계에서 현실로 돌아온 조던 워크의 눈에, 페이스북의 코드베이스는 전혀 다르게 보이기 시작했다. 동료들이 이뤄낸 백본(Backbone.js)의 도입, 그리고 자신이 주도했던 XHP의 성공까지도, 이제는 빛바랜 과거의 유물처럼 느껴졌다.
그것들은 훌륭한 시도였다. 하지만 전부 ‘땜질 처방’에 불과했다.
스파게티 코드라는 병을 치료하기 위해 jQuery라는 진통제를 썼고, 내성이 생기자 백본이라는 더 강력한 처방을 내렸다. 서버 사이드의 염증을 잡기 위해 XHP라는 특효약을 개발했지만, 그 약은 클라이언트 사이드에는 닿지 않아 반쪽짜리 치료에 그쳤다.
그들은 계속해서 낡고 해진 지도 위에서 새로운 길을 찾으려 애쓰고 있었다. 하지만 조던은 이제 깨달았다. 문제는 길이 아니라, 지도 그 자체가 잘못되었다는 것을.
그날 오후, 조던은 팀 리더인 톰을 찾아갔다. 그의 표정은 그 어느 때보다 진지했다.
“톰, 잠시 시간 좀 내주시겠어요?”
톰은 뉴스피드의 성능 저하 문제로 골머리를 앓던 참이었다. 그는 피곤한 기색으로 조던을 바라보았다.
“무슨 일이죠, 조던? 또 새로운 아이디어라도 있습니까?”
“아이디어라기보다는… 결심에 가깝습니다.”
조던은 회의실 화이트보드에 그려진 복잡한 시스템 아키텍처 다이어그램을 손으로 가리켰다. 서버와 클라이언트, 모델과 뷰, 그리고 그것들을 잇는 수많은 화살표들.
“우리는 지금 이 구조를 개선하려고 노력하고 있습니다. 하지만 저는 이제 이게 무의미하다고 생각합니다.”
톰의 미간이 좁혀졌다.
“무의미하다니요? XHP 덕분에 서버 코드가 얼마나 안정되었는데요. 백본도 초기보다는 훨씬…”
“하지만 근본적인 문제는 해결되지 않았습니다.” 조던이 톰의 말을 끊었다. 그의 목소리에는 단호함이 실려 있었다. “여전히 데이터의 흐름은 예측 불가능하고, 서버와 클라이언트는 서로를 믿지 못하며, 작은 변화 하나가 어디까지 영향을 미칠지 아무도 모릅니다. 우리는 계속해서 구멍 난 곳을 막는 데에만 급급하고 있어요.”
조던은 심호흡을 한번 하고, 자신의 생각을 털어놓았다.
“저는 이 지도를 버려야 한다고 생각합니다. jQuery, 백본, 심지어 우리가 만든 XHP의 접근 방식까지도요. 그리고 완전히 백지에서, 새로운 원칙으로 새로운 지도를 그려야 합니다.”
톰은 잠시 말을 잃었다. 조던의 말은 기존의 모든 노력을 부정하는 것처럼 들렸다. 하지만 그는 조던의 눈에서 맹목적인 반항이 아닌, 깊은 고뇌 끝에 얻은 확신을 읽었다.
“...새로운 지도라니, 대체 그게 뭡니까?”
“하나의 원칙입니다.” 조던이 말했다. “UI는 데이터의 함수다. UI = f(data)
. 이 단순한 공식을 자바스크립트 세계에서 구현하는 겁니다.”
그는 말을 이었다.
“데이터가 바뀌면, UI의 어느 부분을 고칠지 고민하는 게 아닙니다. 그냥 함수 f
를 다시 실행해서 완전히 새로운 UI를 만들어내는 겁니다. 매번, 예외 없이요.”
톰은 고개를 저었다. 이전에 이미 제기되었던 문제였다.
“성능 문제는 어떡하고요, 조던. 그건 불가능합니다.”
“네, 지금의 방식으로는 불가능하죠.” 조던이 대답했다. “그러니까 그 ‘불가능’을 ‘가능’하게 만드는 라이브러리를 만드는 겁니다. 우리가 직접요.”
그 순간, 톰은 깨달았다. 조던은 단순히 새로운 기술을 제안하는 것이 아니었다. 그는 페이스북 프론트엔드 개발의 패러다임 자체를 바꾸는 혁명을 선포하고 있었다.
낡은 지도를 불태우고, 누구도 가본 적 없는 미지의 대륙을 향해 배를 띄우겠다는 선언. 그것은 무모했지만, 동시에 지금의 지옥에서 벗어날 유일한 희망처럼 보이기도 했다.
조던 워크는 이제 돌아갈 수 없는 강을 건넜다. 그의 머릿속에서는 이미 새로운 라이브러리의 첫 번째 설계도가 그려지기 시작하고 있었다.