세바스찬의 회고

882025년 11월 11일3

릴리스를 앞둔 마지막 날들의 소란 속에서, 세바스찬 마크바게는 대부분의 시간을 조용히 자신의 자리에서 코드를 읽거나 생각에 잠겨 보냈다. 그는 React의 탄생 초기부터 지금까지, 그 모든 역사의 중심에 서 있었던 살아있는 전설이었다. 그의 머릿속에는 지금의 팀원들은 경험해보지 못한, React의 수많은 진화 과정이 파노라마처럼 담겨 있었다.

한 젊은 엔지니어가 조심스럽게 그에게 다가와 물었다.

“세바스찬, 이번 React 19는 이전의 어떤 변화보다도 훨씬 더 근본적인 것 같습니다. 혹자는 이제 React가 완전히 다른 것이 되어버렸다고도 말합니다. 이 모든 변화를 이끌어오시면서, React의 본질은 무엇이라고 생각하시나요? 그 본질도 변한 걸까요?”

그 질문에, 세바스찬은 잠시 생각에 잠겼다. 그는 키보드에서 손을 떼고, 의자를 돌려 젊은 엔지니어를 마주 보았다.

“좋은 질문이군.”

그의 목소리는 낮고 차분했다.

“겉모습은 많이 변했지. 클래스 컴포넌트의 시대가 있었고, setState가 유일한 방법이었던 때도 있었어. 그리고 훅(Hook)이 등장하며 모든 것을 바꾸었지. 이제는 서버 컴포넌트와 Actions의 시대가 열리고 있고.”

그는 잠시 숨을 골랐다.

“하지만 내 생각에, React의 본질은 단 한 번도 변한 적이 없어.”

그의 말에 젊은 엔지니어의 눈이 커졌다.

“React의 본질은 이것 하나야: UI를 상태의 함수로 보는 것(UI as a function of state). UI = f(state). 이 단순한 공식. 이것이 React의 시작이었고, 지금도 여전히 React의 심장이야.”

세바스찬은 말을 이어갔다.

“우리가 해온 모든 일은, 이 공식을 더욱 순수하고, 더욱 선언적으로 만들기 위한 여정이었을 뿐이야. 클래스 컴포넌트는 this라는 불순물과 복잡한 생명주기를 가지고 있었지. 그래서 우리는 순수 함수에 가까운 훅을 만들었어.”

“하지만 훅의 시대에도 여전히 불순물은 남았지. 데이터 페칭을 위한 useEffect의 부수 효과, 수동으로 관리해야 하는 로딩과 에러 상태… 이것들은 모두 순수한 UI = f(state) 공식을 방해하는 요소들이었어.”

“React 19가 한 일이 바로 그거야.” 그의 눈빛이 빛났다. “서버 컴포넌트는 데이터 페칭이라는 가장 큰 부수 효과를 서버라는 격리된 공간으로 옮겨버렸어. Suspenseuse는 비동기 상태를 선언적으로 다루게 만들었고, Actions는 폼 제출이라는 또 다른 부수 효과를 순수한 함수 호출처럼 보이게 만들었지.”

그는 결론을 내렸다.

“우리는 React를 바꾼 게 아니야. 우리는 개발자가 UI = f(state)라는 본질에만 집중할 수 있도록, 그 외의 모든 복잡성과 불순물을 프레임워크 뒤편으로 끊임없이 밀어내는 일을 해왔을 뿐이야. React 19는 그 여정에서 가장 큰 진보를 이룬 이정표인 셈이지.”

세바스찬의 회고는 젊은 엔지니어에게 깊은 울림을 주었다. 그는 이제 깨달았다. 서버 컴포넌트, Actions, 동시성… 이 모든 새로운 개념들은 React를 복잡하게 만드는 것이 아니라, 오히려 React의 가장 순수한 본질로 되돌아가기 위한 과정이었다는 것을.

기술의 형태는 계속해서 진화하겠지만, UI를 상태의 함수로 바라보는 그 근본 철학이 변하지 않는 한, React는 언제나 React일 터였다. 그리고 그 철학을 지키기 위해, React의 진화는 결코 멈추지 않을 것이었다.