자동 배칭, startTransition
, 그리고 Suspense
의 지능적인 동작. 이 모든 경이로운 기능들의 이면에는 하나의 공통된 동력원이 있었다. 바로 ‘동시성 렌더러(Concurrent Renderer)’였다.
React 18에서 옵트인(opt-in) 방식으로 처음 도입되었을 때, 많은 개발자들은 동시성 렌더러를 특정 고급 기능을 사용하기 위한 선택적인 모드로 여겼다. 하지만 React 19 프로젝트가 진행되면서, 팀의 생각은 완전히 바뀌었다.
“더 이상 동시성을 ‘모드(mode)’로 취급해서는 안 됩니다.”
세바스찬 마크바게가 회의에서 단호하게 선언했다. 그는 수년간 이 렌더러의 완성을 위해 모든 것을 쏟아부어 왔다.
“서버 컴포넌트, 스트리밍, 선택적 하이드레이션, 그리고 우리가 앞으로 만들 모든 기능은 동시성을 전제로 할 때만 완벽하게 동작합니다. 동시성은 더 이상 선택이 아니라, React의 기본 동작 방식 그 자체가 되어야 합니다.”
그의 말은 거스를 수 없는 흐름이었다.
과거의 동기식 렌더러는 이제 구시대의 유물이었다. 그것은 한번 시작하면 멈출 수 없는, 유연성 없는 엔진이었다. 반면 동시성 렌더러는 렌더링을 작은 단위로 쪼개고, 우선순위를 판단하며, 필요에 따라 작업을 중단하고 재개할 수 있는 지능적인 심장이었다.
이 새로운 심장이 있었기에,
Suspense
는 데이터 로딩을 기다리는 동안 다른 작업을 처리할 수 있었다.startTransition
은 긴급하지 않은 렌더링을 뒤로 미룰 수 있었다.- 자동 배칭은 여러 업데이트를 한 번에 처리할 여유를 가질 수 있었다.
- 선택적 하이드레이션은 사용자의 클릭에 우선적으로 반응할 수 있었다.
이 모든 것은 동시성이라는 강력한 기반 위에서만 가능한 일이었다.
팀은 중대한 결정을 내렸다. React 19부터, 동시성 렌더러는 더 이상 createRoot
같은 특정 API를 사용해야만 활성화되는 옵션이 아니다. 이것이 그냥 React의 기본 엔진이 된다. 개발자가 만드는 모든 React 애플리케이션은 이제 기본적으로 동시성의 힘을 부여받게 되는 것이다.
이것은 개발자들에게 눈에 보이는 큰 변화는 아닐 수 있었다. 동시성 렌더러는 자동차의 엔진처럼, 보닛 아래에서 조용히, 하지만 강력하게 작동하는 존재이기 때문이다. 대부분의 개발자는 자신의 코드가 동시성 환경에서 돌아가고 있다는 사실조차 인지하지 못할 수도 있었다.
하지만 그들은 그 효과를 분명히 느끼게 될 터였다.
자신이 만든 앱이 이전보다 훨씬 부드럽게 동작하고, 로딩 상태가 더 자연스럽게 처리되며, 성능이 전반적으로 향상되는 것을 경험하게 될 것이다. 그 모든 개선의 근원에는 바로 이 새로운 심장, 동시성 렌더러가 있었다.
React는 겉모습뿐만 아니라, 그 핵심 구동 방식부터 완전히 새롭게 태어나고 있었다. 동기식 시대의 막이 내리고, 모든 것이 유기적으로 상호작용하는 동시성의 시대가 활짝 열리는 순간이었다. React 19는 새로운 기능의 모음집이 아니라, 새로운 심장을 이식받은 완전히 다른 존재로 진화하고 있었다.