온라인 커뮤니티의 냉담한 분위기 속에서, 리액트 팀은 거의 매일같이 자신들의 GitHub 저장소 이슈 트래커를 확인하는 것이 버릇이 되었다. 대부분은 버그 리포트나 JSX 문법에 대한 불만이었지만, 어느 날 아침, 그들은 조금 다른 종류의 이슈를 발견했다.
이슈의 제목은 “감사의 말을 전하고 싶습니다”였다.
작성자는 에밀리라는 이름의, 샌프란시스코의 작은 스타트업 개발자였다. 그녀는 얼마 전 자신의 블로그에 긍정적인 후기를 올렸던 바로 그 사람이었다.
작성자: Emily
제목: 감사의 말을 전하고 싶습니다
“저는 이 이슈 트래커가 버그를 보고하는 곳이라는 것을 압니다. 하지만 달리 여러분에게 제 생각을 전할 방법을 찾지 못해 이곳에 글을 남깁니다.
저는 지난 6개월간, 복잡한 실시간 차트 애플리케이션의 성능 문제로 고통받아 왔습니다. 앵귤러의 변경 감지 로직은 저희의 요구사항을 따라오지 못했고, 코드베이스는 누구도 손대고 싶지 않은 괴물이 되어가고 있었습니다. 매일 야근하며 디버깅했지만, 해결책은 보이지 않았습니다.
그러다 우연히 리액트를 알게 되었습니다. 솔직히 말해, 처음에는 저도 모두처럼 비웃었습니다. JSX는 끔찍해 보였고, 버추얼 DOM은 비현실적인 아이디어라고 생각했습니다.
하지만 지푸라기라도 잡는 심정으로, 주말을 꼬박 새워 저희 앱의 가장 복잡한 차트 부분을 리액트로 다시 작성해 보았습니다.
결과는… 놀라웠습니다.
수백 줄에 달하던 컨트롤러와 디렉티브 코드가, 단 하나의 상태를 가진 리액트 컴포넌트로 대체되었습니다.
setState를 호출할 때마다, 수백 개의 SVG 요소들이 마법처럼 부드럽게 움직였습니다. 성능 문제는 거짓말처럼 사라졌고, 코드는 믿을 수 없을 만큼 단순하고 명료해졌습니다.저는 지난 6개월 동안 저를 괴롭혔던 문제가, 사실은 프레임워크가 강요하는 복잡성 때문이었다는 것을 깨달았습니다. 리액트는 그 복잡성의 족쇄에서 저를 해방시켜 주었습니다.
이제 저는 JSX가 끔찍하다고 생각하지 않습니다. 오히려 UI의 구조와 동작을 함께 표현하는 가장 합리적인 방법이라고 생각합니다. 버추얼 DOM은 비현실적인 아이디어가 아니라, 개발자를 편하게 만들어주기 위한 가장 똑똑한 해결책이었습니다.
직접 써보기 전까지는 절대 알 수 없었을 겁니다.
훌륭한 도구를 만들어주셔서 진심으로 감사합니다. 세상의 비판에 흔들리지 마십시오. 여러분은 지금 올바른 길을 가고 있습니다.”
팀원들은 에밀리의 글을 몇 번이고 다시 읽었다. 사무실에는 오랫동안 잊혔던 조용한 흥분이 감돌았다. 이것은 그들이 기다려왔던 첫 번째 진정한 ‘신호’였다.
외부 세계의 누군가가, 그들의 의도를, 그들의 철학을 온전히 이해해 준 것이다.
그녀는 JSX의 겉모습 너머에 있는 본질을 꿰뚫어 보았고, 버추얼 DOM의 진정한 가치를 자신의 코드를 통해 직접 체험했다.
조던 워크는 에밀리의 글을 보며 희미하게 미소 지었다. 그의 믿음이 틀리지 않았음이 증명된 순간이었다. 리액트는 설명으로 이해하는 기술이 아니었다. 직접 부딪히고, 고통을 해결하는 ‘경험’을 통해 비로소 깨닫게 되는 기술이었다.
톰은 즉시 이 이슈에 직접 답글을 달았다.
“에밀리, 당신의 이야기는 저희 팀에게 그 어떤 기술적인 벤치마크보다 더 큰 힘이 됩니다. 저희가 리액트를 만든 이유를 정확히 이해해주셔서 감사합니다. 앞으로도 좋은 의견 부탁드립니다.”
이 작은 소통은 단순한 감사 인사 교환이 아니었다.
리액트와 커뮤니티 사이에 놓여있던 두꺼운 불신의 벽에, 처음으로 작지만 의미 있는 균열이 생긴 순간이었다. 이 균열을 통해, 더 많은 에밀리들이 리액트의 진가를 발견하게 될 터였다. 리액트 팀은 다시 한번 확신을 얻고 코드에 집중하기 시작했다. 그들을 이해해 주는 단 한 명의 사용자를 위해서라도, 이 길을 계속 가야 할 이유가 충분했다.


