혼돈 속에서, 빛을 발견한 소수의 개발자들

892025년 11월 12일3

리액트에 대한 비판이 웹 커뮤니티의 주류를 이루던 그때, 그 거대한 불신의 목소리들 사이에서 아주 작지만, 다른 종류의 목소리가 들려오기 시작했다. 그것은 주류의 비판에 휩쓸리지 않고, 리액트의 소스 코드와 문서를 직접 파고들었던 소수의 호기심 많은 개발자들에게서 나온 것이었다.

샌프란시스코의 한 작은 스타트업에서 일하던 개발자, 에밀리는 복잡한 데이터 시각화 도구를 만들고 있었다. 그녀의 프로젝트는 수백 개의 SVG 요소들이 사용자의 인터랙션에 따라 실시간으로 위치와 색상을 바꿔야 하는, 극도로 동적인 애플리케이션이었다. 그녀는 앵귤러JS를 사용하고 있었지만, 데이터의 변화가 많아질수록 소위 ‘digest cycle’이라 불리는 앵귤러의 변경 감지 메커니즘이 수시로 문제를 일으켜 골머리를 앓고 있었다.

$apply() 호출이 너무 많아 성능이 저하됩니다.”
$watch의 깊이가 너무 깊어 추적이 어렵습니다.”

그녀는 해결책을 찾기 위해 밤낮으로 구글링을 하다가, 우연히 JSConf에서 발표된 페이스북의 새 라이브러리, 리액트에 대한 글을 발견했다. 처음에는 JSX 문법에 대한 거부감이 들었지만, ‘버추얼 DOM’이라는 개념이 그녀의 눈길을 사로잡았다.

‘매번 모든 것을 다시 계산한다고? 그리고 그 차이점만 DOM에 반영한다고?’

그녀는 반신반의하며 주말 내내 리액트를 파고들었다. 문서를 읽고, 튜토리얼을 따라 해보며 작은 프로토타입을 만들었다. 그리고 자신의 복잡한 데이터 시각화 로직의 일부를 리액트로 다시 작성해보았다.

결과는 충격적이었다.

앵귤러에서는 수십 개의 $watch와 복잡한 컨트롤러 로직으로 구현해야 했던 기능이, 리액트에서는 단 하나의 상태 객체(state)와 render 함수로 믿을 수 없을 만큼 간결하게 표현되었다. 데이터가 바뀔 때마다 그녀는 그저 setState를 호출하기만 했다. 그러자 수백 개의 SVG 요소들이 버벅임 하나 없이 부드럽게 자신의 위치와 색상을 바꾸었다.

복잡했던 변경 감지 로직은 사라졌다. 그녀는 더 이상 digest cycle을 신경 쓸 필요가 없었다.

월요일 아침, 그녀는 자신의 기술 블로그에 짧은 글 하나를 올렸다.

“나는 리액트를 비웃었었다. 하지만 직접 써보고 나서야 깨달았다.”

그녀는 글에서 JSX에 대한 첫인상이 얼마나 어리석었는지, 그리고 버추얼 DOM이 실제로 얼마나 강력한지에 대해 솔직하게 썼다.

“리액트는 우리에게 ‘어떻게’ UI를 업데이트할지 걱정하지 말라고 말한다. 대신 ‘현재 상태에서 UI는 어떤 모습이어야 하는가’라는 본질적인 질문에만 집중하게 해준다. 이것은 내가 지난 몇 년간 잃어버렸던 개발의 즐거움을 되찾아주었다.”

그녀의 글은 해커 뉴스나 트위터에서 큰 주목을 받지는 못했다. 하지만 그녀처럼 기존 프레임워크의 복잡성에 지쳐있던 소수의 개발자들 사이에서 조용히, 하지만 빠르게 공유되기 시작했다.

독일의 한 프리랜서 개발자는 백본의 ‘좀비 뷰(Zombie View)’ 문제(제거된 뷰의 이벤트 리스너가 메모리에 남아있는 문제)를 해결하기 위해 리액트의 생명주기 모델을 도입했고, 그 결과에 감탄했다. componentWillUnmount가 모든 것을 해결해주었다.

오스트레일리아의 한 에이전시에서는, 디자이너와 개발자의 협업을 위해 재사용 가능한 리액트 컴포넌트 라이브러리를 구축하기 시작했다. 디자이너는 더 이상 지저분한 템플릿 파일을 만질 필요 없이, 잘 정의된 컴포넌트들을 조립하여 프로토타입을 만들 수 있었다.

비록 거대한 비난의 목소리에 묻혀 잘 들리지는 않았지만, 세상 곳곳에서 리액트의 진정한 가치를 알아보는 ‘빛’들이 하나둘씩 켜지고 있었다. 그들은 주류의 의견에 휩쓸리지 않고, 코드를 통해 직접 진실을 확인한 용감한 탐험가들이었다.

이 작은 불씨들이 모여, 훗날 리액트라는 거대한 생태계를 불태울 거대한 불길이 될 것이라고는, 아직 아무도 상상하지 못하고 있었다.