프로젝트에 이름이 필요하다

402025년 09월 24일3

톰의 전폭적인 지지를 얻은 조던 워크의 프로젝트는 새로운 국면을 맞이했다. 더 이상 개인적인 실험이 아니었다. 페이스북의 가장 똑똑한 엔지니어 몇몇이 추가로 투입되어 작은 핵심 팀이 꾸려졌다. 그들의 목표는 프로토타입 수준의 ‘FaxJS’를 실제 페이스북 제품에 적용할 수 있는, 견고하고 완성도 높은 라이브러리로 만드는 것이었다.

팀은 가장 먼저 코드네임부터 다시 정하기로 했다. ‘FaxJS’는 프로토타입의 핵심 철학을 잘 담고 있었지만, 어딘가 장난스럽고 가벼운 느낌을 주었다. 페이스북의 미래를 책임질 기술의 이름으로는 부족했다.

회의실 화이트보드는 새로운 이름에 대한 아이디어로 가득 찼다.

“‘Component.js’는 어때요? 컴포넌트 기반이라는 걸 명확하게 보여주잖아요.”
“너무 평범해. 이미 비슷한 이름의 라이브러리가 있을걸.”

“‘Bolt.js’는 어떤가? 번개처럼 빠르다는 의미로.”
“나쁘지 않지만, 우리 라이브러리의 핵심 철학을 담고 있진 않아.”

수많은 이름들이 제안되고 사라졌다. 그들은 단순하고, 기억하기 쉬우며, 무엇보다 이 라이브러리가 세상에 제공할 가장 중요한 가치를 담고 있는 이름을 원했다.

회의가 길어지자, 조던은 잠시 생각에 잠겼다. 그는 자신의 라이브러리가 기존의 프레임워크들과 근본적으로 다른 점이 무엇인지 다시 한번 되짚었다.

백본(Backbone.js)이나 앵귤러(AngularJS) 같은 당시의 주류 프레임워크들은 ‘애플리케이션의 뼈대(Framework)’를 제공하는 데 초점을 맞췄다. 모델, 뷰, 컨트롤러, 라우터 등 애플리케이션 전체를 구축하기 위한 모든 것을 담은 거대한 만능 도구 세트였다. 개발자는 그들이 정해놓은 규칙과 구조 안에서 모든 것을 만들어야 했다.

하지만 조던이 만들고 있는 것은 달랐다.
그것은 애플리케이션 전체를 지배하는 프레임워크가 아니었다. 오직 ‘뷰(View)’ 계층의 문제, 즉 ‘데이터가 주어졌을 때, 그것을 어떻게 효율적으로 화면에 그릴 것인가’라는 단 하나의 문제에만 집중하는, 작고 날카로운 라이브러리였다.

이 라이브러리의 가장 큰 특징은 무엇인가?

‘상태(State)의 변화에 반응(React)하여, UI를 자동으로 업데이트한다.’

사용자가 버튼을 클릭한다(Action). 그 결과로 애플리케이션의 상태가 변한다(State Change). 그러면 라이브러리는 그 변화에 즉각적으로 ‘반응’하여, 버추얼 DOM을 통해 화면을 다시 그린다. 모든 것이 이 ‘반응’의 연쇄 작용이었다.

“React.”

조던이 나지막이 말했다.
회의실의 소음이 순간 멎었다. 모두의 시선이 그에게 쏠렸다.

“리액트(React). ‘반응하다’라는 뜻이죠. 우리 라이브러리의 본질은 바로 이것입니다. 상태 변화에 반응해서, UI를 렌더링하는 것.”

그 단어는 회의실의 공기를 가르며 모두의 머릿속에 박혔다.
간결했다. 강력했다. 그리고 이 기술의 핵심 철학을 완벽하게 담고 있었다.

톰이 만족스러운 미소를 지으며 고개를 끄덕였다.
“좋군. React. 마음에 들어.”

다른 팀원들도 동의했다. 더 이상 다른 이름은 필요 없었다.

그날 이후, ‘FaxJS’라는 이름은 역사의 뒤안길로 사라졌다. 페이스북의 작은 회의실에서 태어난 이 프로젝트는 마침내 자신의 정체성을 찾았다.

React.

훗날 전 세계 수백만 개발자들의 입에 오르내리게 될 그 이름이, 공식적으로 명명된 순간이었다. 이제 이름에 걸맞은 실체를 만들어내는 고된 여정이 본격적으로 시작될 터였다.