릴리스를 하루 앞둔 아침.
메타 캠퍼스의 React Core Team 사무실에는 평소와 다른 종류의 고요함이 흘렀다. 더 이상 격렬한 토론도, 분주한 키보드 소리도 들리지 않았다. 그 대신, 모두가 자신의 모니터를 응시하며 마지막으로 시스템의 상태를 점검하는, 숨 막히는 정적이 공간을 채우고 있었다.
오전 9시 정각, 앤드류 클라크는 팀의 코드 저장소(repository) 관리자 권한으로 main 브랜치에 최종 보호 규칙을 적용했다.
“코드 동결(Code Freeze)을 시작합니다.”
그가 팀 채팅 채널에 짧은 메시지를 남겼다.
이것은 상징적인 선언이었다. 이제부터 공식 릴리스가 완료될 때까지, 단 한 줄의 코드도 main 브랜치에 병합(merge)될 수 없었다. 수년간의 개발과 수천 번의 커밋(commit)으로 쌓아 올린 코드의 성문이 마침내 굳게 닫힌 것이다.
팀원들은 마치 중요한 시험을 끝낸 수험생처럼, 후련함과 동시에 밀려오는 허탈감을 느꼈다. 그들의 손은 떠났고, 이제 남은 것은 기다림뿐이었다.
조쉬 스토리는 터미널에 git log 명령어를 입력했다. 화면에는 지난 몇 년간의 커밋 기록이 끝없이 펼쳐졌다.
feat: Initial prototype for Server Componentsfix: Handle race conditions in useEffect fetchrefactor: Introduce 'use' hook for promise unwrappingchore: Finalize 'useFormState' APIfix(concurrent): Edge case in transition scheduling
하나의 커밋 메시지마다, 그날의 치열했던 논쟁과, 버그를 잡기 위해 밤을 새웠던 기억, 그리고 마침내 문제를 해결했을 때의 희열이 생생하게 떠올랐다. 이 로그는 단순한 기록이 아니었다. 그것은 React 19라는 거대한 프로젝트를 완성하기까지 팀이 걸어온 여정 그 자체였다.
로렌 탄은 공식 문서 사이트의 최종 빌드 버전을 마지막으로 점검했다. 모든 페이지가 정상적으로 렌더링되고, 모든 링크가 올바르게 연결되어 있는지 꼼꼼하게 확인했다. 그녀가 작성한 ‘왜(Why)’에 대한 설명들이, 개발자들에게 올바르게 전달되기를 간절히 바랐다.
세바스찬은 자신의 컴퓨터를 끄고, 조용히 창밖을 바라보았다. 그의 머릿속에는 지금의 코드를 넘어, React Forget이라는 다음 시대의 청사진이 그려지고 있었다. 그에게 코드 동결은 끝이 아니라, 또 다른 시작을 위한 잠시의 쉼표일 뿐이었다.
릴리스 매니저는 배포 스크립트를 마지막으로 검토하며, 내일 정해진 시간에 단 하나의 실수도 없이 npm publish 명령어를 실행하기 위한 시뮬레이션을 반복했다.
아무도 서두르지 않았다. 모든 것은 계획대로, 정해진 절차에 따라 움직이고 있었다.
코드 동결.
그것은 React 19의 개발 과정이 공식적으로 끝났음을 알리는 선언이었다. 수년간의 노력이 담긴 이 코드 덩어리는 이제 하나의 완결된 제품이 되어, 조용히 세상에 나아갈 그 순간을 기다리고 있었다. 개발자들의 손을 떠난 코드는, 이제 곧 전 세계 수백만 사용자들의 손에 닿게 될 터였다.


