Skip to main content

Open Source Roadmap

· 10 min read
Héctor Ramos
Engineer at Facebook

올해 React Native 팀은 React Native의 대규모 재구조화에 집중했다. Sophie가 State of React Native 글에서 언급했듯, Facebook 외부에서 활발히 활동하는 React Native 사용자와 기여자들을 더 잘 지원하기 위한 계획을 구체화했다. 이제 우리가 진행해 온 작업에 대해 더 자세히 공유할 때다. 그 전에, React Native의 오픈소스에 대한 장기적인 비전을 먼저 설명하고자 한다.

React Native에 대한 우리의 비전은 다음과 같다:

  • 건강한 GitHub 저장소. 이슈와 풀 리퀘스트가 적절한 시간 내에 처리된다.
    • 테스트 커버리지가 증가한다.
    • Facebook 코드 저장소에서 동기화된 커밋이 오픈소스 테스트를 깨뜨리지 않는다.
    • 의미 있는 커뮤니티 기여가 더 큰 규모로 이루어진다.
  • 안정적인 API, 오픈소스 의존성과의 인터페이스를 더 쉽게 만든다.
    • Facebook이 오픈소스와 동일한 공개 API를 사용한다.
    • React Native 릴리즈가 시맨틱 버저닝을 따른다.
  • 활기찬 생태계. 커뮤니티가 관리하는 고품질 ViewManagers, 네이티브 모듈, 그리고 다중 플랫폼 지원.
  • 탁월한 문서. 사용자가 고품질 경험을 만들 수 있도록 돕고, 최신 API 참조 문서를 제공한다.

이 비전을 달성하기 위해 다음과 같은 주요 영역에 집중할 계획이다.

✂️ 코어 경량화

React Native의 표면적을 줄이는 것이 우리의 목표다. 이를 위해 핵심이 아니거나 사용되지 않는 컴포넌트를 제거할 예정이다. 핵심이 아닌 컴포넌트는 커뮤니티로 이관하여 더 빠르게 발전할 수 있도록 할 것이다. 표면적이 줄어들면 React Native에 기여하는 것이 더 쉬워질 것이다.

WebView는 커뮤니티로 이관한 컴포넌트의 대표적인 예이다. 리포지토리에서 제거한 후에도 내부 팀이 이러한 컴포넌트를 계속 사용할 수 있도록 하는 워크플로우를 구축 중이다. 우리는 수십 개의 추가 컴포넌트를 식별했으며, 이들에 대한 소유권을 커뮤니티에 넘길 예정이다.

🎁 내부 도구 오픈소스화와 🛠 도구 업데이트

페이스북 내부 제품 팀의 React Native 개발 경험은 오픈소스 커뮤니티와 상당히 다를 수 있다. 오픈소스 커뮤니티에서 인기 있는 도구들이 페이스북 내부에서는 사용되지 않을 수 있다. 동일한 목적을 달성하는 내부 도구가 존재할 수도 있다. 어떤 경우에는 페이스북 팀들이 페이스북 외부에서는 존재하지 않는 도구들에 익숙해져 있다. 이러한 차이점들은 우리가 앞으로 공개할 아키텍처 작업을 오픈소스로 공개할 때 어려움을 초래할 수 있다.

우리는 이러한 내부 도구 중 일부를 공개하는 작업을 진행할 것이다. 또한 오픈소스 커뮤니티에서 인기 있는 도구들에 대한 지원을 강화할 것이다. 다음은 우리가 다룰 프로젝트들의 일부 목록이다:

  • JSI를 오픈소스로 공개하고 커뮤니티가 자체 JavaScript VM을 가져올 수 있도록 지원한다. 이를 통해 RN 초기 릴리스부터 사용되던 JavaScriptCore를 대체할 수 있다. JSI가 무엇인지에 대해서는 향후 포스트에서 다룰 예정이며, 그 동안 Parashuram의 React Conf 발표에서 JSI에 대해 더 알아볼 수 있다.
  • 안드로이드에서 64비트 라이브러리를 지원한다.
  • 새로운 아키텍처 하에서 디버깅을 가능하게 한다.
  • CocoaPods, Gradle, Maven, 그리고 새로운 Xcode 빌드 시스템에 대한 지원을 개선한다.

✅ 테스트 인프라 구축

페이스북 엔지니어는 코드를 배포할 때 모든 테스트를 통과하면 안전하다고 판단한다. 이러한 테스트는 변경 사항이 자체 React Native 환경을 손상시킬 가능성이 있는지 확인한다. 그러나 페이스북이 React Native를 사용하는 방식에는 차이가 있다. 이로 인해 우리는 오픈소스에서 React Native를 의도치 않게 손상시킬 수 있었다.

우리는 내부 테스트를 강화해 오픈소스 환경과 최대한 유사한 환경에서 실행되도록 할 것이다. 이를 통해 테스트를 통과하지 못한 코드가 오픈소스에 유출되는 것을 방지할 수 있다. 또한 GitHub에서 코어 리포지토리를 더 효과적으로 테스트할 수 있는 인프라를 구축할 것이다. 이를 통해 향후 풀 리퀘스트에 테스트를 쉽게 포함시킬 수 있게 된다.

이러한 노력은 감소된 표면적과 결합되어 기여자들이 더 빠르고 자신 있게 풀 리퀘스트를 병합할 수 있게 한다.

📜 공개 API

페이스북은 오픈소스와 동일한 방식으로 공개 API를 통해 React Native를 사용할 예정이다. 이는 의도치 않은 호환성 문제를 줄이기 위함이다. 이를 위해 내부 호출 사이트를 변환하는 작업을 시작했다. 목표는 안정적인 공개 API를 확립하고, 이를 통해 1.0 버전에서 시맨틱 버저닝을 도입하는 것이다.

📣 커뮤니케이션

React Native는 GitHub에서 기여자 수 기준 상위 오픈소스 프로젝트 중 하나이다. 이는 우리에게 큰 기쁨을 주며, 이러한 성과를 계속 이어가고자 한다. 투명성 증대와 열린 토론과 같은 기여자 참여를 유도하는 이니셔티브를 지속적으로 진행할 계획이다. React Native를 처음 접하는 사람들이 가장 먼저 마주하게 되는 문서는 지금까지 우선순위에서 밀려 있었다. 이를 해결하기 위해 자동 생성 API 참조 문서를 다시 도입하고, 사용자 경험 개선에 초점을 맞춘 추가 콘텐츠를 제작하며, 릴리스 노트를 개선할 예정이다.

타임라인

앞으로 약 1년 동안 이 프로젝트들을 단계적으로 진행할 계획이다. 이미 진행 중인 작업도 있다. 예를 들어 JSI는 오픈소스에 이미 반영되었다. 반면, 표면적 감소와 같은 작업은 완료까지 시간이 더 걸릴 것이다. 커뮤니티에 진행 상황을 최대한 공유하도록 노력할 것이다. Discussions and Proposals 저장소에 참여해 주길 바란다. 이 저장소는 React Native 커뮤니티가 주도하는 이니셔티브로, 이 로드맵에서 논의된 여러 작업의 시작점이 되었다.