React Forget의 꿈

482025년 10월 02일3

React 19 프로젝트가 순조롭게 진행되는 동안에도, 팀의 시선은 항상 한 걸음 더 먼 곳을 향하고 있었다. 그들의 눈에는 아직 해결되지 않은, React의 오랜 숙제 하나가 계속해서 밟혔다. 바로 불필요한 리렌더링을 막기 위해 개발자가 직접 사용해야 하는 최적화 훅, useMemouseCallback이었다.

이 두 훅은 강력했다. 복잡한 계산 결과나 함수를 메모이제이션(memoization)하여, 의존성이 변경되지 않는 한 불필요한 작업을 반복하지 않도록 막아주는 핵심적인 성능 최적화 도구였다.

하지만 이 강력함에는 대가가 따랐다.

“우리는 지금 개발자에게 너무 많은 것을 요구하고 있습니다.”

세바스찬 마크바게가 회의에서 입을 열었다. 그의 표정에는 미묘한 불만이 서려 있었다.

“개발자는 컴포넌트를 작성할 때마다 ‘이 계산은 비용이 비싼가?’, ‘이 함수는 자식에게 prop으로 전달되는가?’, ‘이 객체는 매번 새로 생성되는가?’를 스스로 판단해서, 언제 useMemouseCallback을 사용해야 할지 결정해야 합니다. 이것은 인지적인 부담이고, 실수하기 너무나 쉬운 영역입니다.”

그의 말은 사실이었다. useMemo를 너무 남용하면 오히려 메모리 부담이 커지고, useCallback의 의존성 배열을 잘못 관리하면 함수가 갱신되지 않는 버그가 발생했다. 최적화를 위해 추가한 코드가 오히려 새로운 복잡성과 버그를 낳는 역설. 이것이 바로 개발자들이 마주한 현실이었다.

“이상적인 세계라면,” 세바스찬이 말을 이었다. “개발자는 이런 최적화에 대해 전혀 신경 쓸 필요가 없어야 합니다. 그저 비즈니스 로직에만 집중해서 코드를 작성하면, React가 알아서 모든 것을 최적화해줘야 합니다.”

그의 발언은 회의실에 새로운 화두를 던졌다.

“마치 컴파일러처럼 말인가요?” 한 엔지니어가 물었다.

“정확해.”

세바스찬의 눈이 빛났다.

“우리가 만약 React 코드를 ‘이해’할 수 있는 충분히 똑똑한 컴파일러를 만들 수 있다면? 그 컴파일러가 코드의 의미를 분석해서, 어떤 값이 변하지 않을 것인지, 어떤 함수가 재생성될 필요 없는지를 자동으로 파악하고, 개발자 대신 useMemouseCallback을 코드에 삽입해준다면 어떨까?”

그것은 대담하고, 거의 공상 과학처럼 들리는 아이디어였다. 하지만 React 팀에게는 불가능한 꿈이 아니었다. 그들은 이미 Babel 같은 도구를 통해 JSX를 변환하는 등, 컴파일러 기술에 대한 깊은 이해를 가지고 있었다.

이 야심 찬 프로젝트에 ‘React Forget’이라는 가칭이 붙었다. 개발자가 최적화를 ‘잊어버려도(forget)’ 된다는 의미였다.

React Forget은 React 19의 직접적인 일부는 아니었다. 그것은 React 19가 안정화된 이후에 도전할, 더 먼 미래의 목표였다. 하지만 React 19의 개발 과정 내내, 이 꿈은 팀에게 중요한 지침이 되어주었다.

‘어떻게 하면 개발자가 더 적게 생각하고, 더 본질에 집중하게 만들 수 있을까?’

React 19가 서버와 클라이언트의 경계를 허물고, 비동기 상태 관리의 복잡성을 해결하는 이 모든 노력의 근간에는, 결국 개발자를 불필요한 부가 작업으로부터 해방시키려는 React Forget의 철학이 맞닿아 있었다.

팀원들은 React 19라는 거대한 산을 오르면서도, 그 너머에 있는 더 높은 봉우리, 즉 ‘최적화가 필요 없는 React’라는 궁극의 목표를 항상 마음속에 품고 있었다. React 19는 그 위대한 여정을 향한, 가장 중요한 첫걸음이 될 터였다.