동시성 렌더러는 React 19의 숨은 심장이었지만, 그 개념은 너무나 추상적이었다. React Core Team은 이 강력한 기술을 어떻게 하면 개발자들이 직관적으로 이해할 수 있을지 깊은 고민에 빠졌다.
“‘인터럽트 가능한 렌더링(Interruptible Rendering)’, ‘타임 슬라이싱(Time-slicing)’… 이 용어들은 정확하지만, 너무 차가워요.”
기술 문서 초안을 검토하던 한 엔지니어가 고충을 토로했다. “이걸 처음 듣는 사람은 이게 왜 사용자 경험을 향상시키는지 바로 와닿지 않을 겁니다.”
그의 말에 모두가 공감했다. 그들 스스로에게는 명확한 개념이었지만, 외부 세계에 설명하는 것은 다른 문제였다. 잘못 전달하면 그저 ‘React가 더 복잡해졌다’는 인상만 줄 수도 있었다. 그들에게는 모두가 쉽게 고개를 끄덕일 만한, 강력하고 직관적인 비유가 필요했다.
모두가 머리를 싸매고 있을 때, 로렌 탄이 조용히 입을 열었다.
“고급 레스토랑의 주방을 한번 상상해보죠.”
팀원들의 시선이 그녀에게로 향했다.
“우리의 React는 실력 좋은 셰프(Chef)입니다. 그리고 사용자는 중요한 손님이죠.”
그녀는 이야기를 시작했다.
“과거의 React, 즉 블로킹 렌더러는 한 번에 요리 하나만 할 수 있는 셰프와 같았어요. 손님이 메인 요리로 스테이크를 주문하면, 셰프는 그 스테이크를 굽기 시작합니다. 그런데 중간에 손님이 목이 말라서 ‘물 한 잔만 먼저 주시겠어요?’라고 요청합니다. 그러면 이 셰프는 어떻게 대답할까요?”
로렌은 잠시 말을 멈추고 팀원들을 둘러보았다.
“‘안됩니다. 지금 스테이크를 굽고 있어서 다른 건 아무것도 할 수 없어요. 이 요리가 끝날 때까지 기다리세요.’ 라고 말하겠죠. 손님은 스테이크가 다 구워질 때까지 목이 마른 채로 기다려야만 합니다. 이게 바로 UI 버벅임의 본질입니다.”
설명을 듣던 팀원들의 얼굴에 옅은 미소가 번졌다. 이해하기 쉬웠다.
“하지만 동시성 렌더러를 탑재한 우리의 새로운 셰프는 다릅니다.”
로렌의 눈이 반짝였다.
“똑같이 스테이크를 굽고 있을 때 손님이 물을 요청하면, 이 유능한 셰프는 하던 일을 ‘잠시 멈춥니다’. 스테이크를 굽던 팬을 불에서 잠시 내리는 거죠. 그리고는 재빠르게 물 한 잔을 가져다준 뒤, 다시 스테이크를 굽던 작업으로 ‘돌아갑니다’. 손님은 즉시 물을 마실 수 있어 만족하고, 스테이크는 아주 약간 늦게 완성되겠지만 전반적인 식사 경험은 비교할 수 없이 훌륭해지죠.”
“아…!”
회의실 곳곳에서 탄성이 터져 나왔다.
“여기서 스테이크를 굽는 큰 작업이 바로 ‘페이지 전환’ 같은 무거운 렌더링입니다. 그리고 물을 가져다주는 작은 작업이 ‘사용자의 키보드 입력’ 같은 긴급한 업데이트고요. 동시성이란, 이 셰프처럼 중요한 작업과 덜 중요한 작업을 구분하고, 긴급한 요청을 먼저 처리하기 위해 하던 일을 잠시 멈출 수 있는 능력입니다.”
완벽한 비유였다.
‘셰프의 비유’는 동시성이 단순히 ‘성능을 빠르게 하는 기술’이 아님을 명확히 보여주었다. 그것은 사용자의 요청에 대한 ‘응답성’을 최우선으로 고려하여, 전체적인 경험의 질을 높이는 React의 새로운 철학이었다.
팀원들은 더 이상 기술 용어 뒤에 숨을 필요가 없었다. 그들은 이제 자신들이 만든 혁신이 어떤 가치를 제공하는지, 세상 누구에게라도 쉽고 자신 있게 설명할 수 있는 강력한 이야기를 손에 넣었다. 이 비유는 앞으로 React 19의 동시성 기능을 설명하는 모든 문서와 발표의 핵심적인 상징이 될 터였다.