온라인 커뮤니티의 격렬한 반발에 대응하기 위해, 리액트 팀은 자신들의 철학을 명확하게 설명할 필요를 느꼈다. 그들은 페이스북의 기술 블로그에 "관심사의 분리에 대한 재고찰(Rethinking Separation of Concerns with React)"이라는 제목의 글을 게시하기로 결정했다. 글의 초안 작성은 조던 워크와 톰이 주도했다.
그들은 글의 서두에서부터 커뮤니티의 가장 큰 오해를 정면으로 반박했다.
“많은 분들이 리액트, 특히 JSX가 ‘관심사의 분리’ 원칙을 위배한다고 비판합니다. 우리는 그 비판에 동의하지 않습니다. 오히려 리액트는 그 원칙을 그 어떤 기술보다도 더 철저하게 지키기 위해 노력합니다. 다만, 우리는 ‘관심사의 분리’가 ‘기술의 분리’와 동의어라고 생각하지 않을 뿐입니다.”
글은 전통적인 템플릿 기반 프레임워크의 문제점을 파고들었다.
“기존 방식에서는, 하나의 UI 조각을 만들기 위해 최소 두 개의 파일을 열어야 합니다. my-component.js 파일과 my-component.html 템플릿 파일이죠. 이 둘은 서로에 대해 너무 많은 것을 알고 있어야 합니다. 자바스크립트는 템플릿의 구조와 변수 이름을 알아야 하고, 템플릿은 자바스크립트가 넘겨줄 데이터의 구조를 알아야 합니다. 이 둘은 보이지 않는 끈으로 강하게 묶여있어, 하나를 바꾸면 다른 하나도 반드시 영향을 받습니다. 이것이 과연 진정한 ‘분리’일까요?”
초안은 리액트의 접근 방식을 대안으로 제시했다.
“리액트는 기술(HTML, JS, CSS)을 기준으로 코드를 나누는 대신, 컴포넌트를 기준으로 나눕니다. 하나의 컴포넌트는 재사용 가능하고, 완전히 독립적인 UI의 단위입니다. <DatePicker> 컴포넌트를 생각해 봅시다. 이 컴포넌트가 어떻게 보이고(마크업), 날짜를 클릭했을 때 어떻게 동작하는지(로직)는 서로 분리될 수 없는, 하나의 ‘관심사’입니다. 우리는 이 모든 것을 <DatePicker.js>라는 단 하나의 파일 안에 캡슐화하는 것이 훨씬 더 응집력 있고, 유지보수하기 쉬운 방법이라고 믿습니다.”
즉, 리액트는 수많은 기술 파일들로 이루어진 거대한 시스템을 만드는 대신, 각자 자신의 모든 것을 책임지는 수많은 독립 컴포넌트들로 이루어진 시스템을 만드는 것을 목표로 했다.
“디자이너와의 협업 문제는 어떻게 해결할 것인가?” 라는 질문에 대해서도 답변을 준비했다.
“리액트는 디자이너가 자바스크립트를 배우도록 강요하지 않습니다. 오히려 그 반대입니다. 잘 만들어진 리액트 컴포넌트 라이브러리가 있다면, 디자이너나 다른 개발자들은 컴포넌트의 내부 구현을 전혀 알 필요가 없습니다. 그저 <DatePicker />나 <UserAvatar user={someUser} />처럼, 약속된 이름과 props를 사용하여 마치 HTML 태그를 쓰듯이 UI를 선언적으로 조립하기만 하면 됩니다.”
글의 논리는 단단했고, 철학은 명확했다. 리액트는 관심사의 분리를 파괴하는 것이 아니라, ‘컴포넌트’라는 더 높은 수준의 추상화를 통해 그것을 재정의하려 하고 있었다.
초안을 완성한 톰은 팀원들에게 말했다.
“이 글 하나로 세상의 여론이 바뀌지는 않을 거다. 하지만 최소한, 우리가 아무 생각 없이 이런 결정을 내린 것이 아니라는 것은 보여줄 수 있겠지. 우리의 싸움은 이제 시작이야.”
그들은 자신들의 신념을 한 문장 한 문장에 눌러 담았다. 세상의 오해에 맞서, 자신들의 목소리를 내기 위한 첫 번째 공식적인 움직임이었다. 비록 이 목소리가 당장은 거대한 비난의 함성에 묻힐지라도, 그들은 멈추지 않을 터였다. 진실은 언젠가 길을 찾을 것이라고 믿었기 때문이다.


