React Native Team Principles
Facebook의 React Native 팀은 React Native 작업의 우선순위를 결정하는 데 도움이 되는 원칙을 따릅니다. 이 원칙들은 우리 팀의 특성을 반영하며, React Native 커뮤니티의 모든 이해관계자를 대표하지는 않습니다. 우리는 이러한 원칙을 공유함으로써 무엇이 우리를 움직이는지, 어떻게 결정을 내리는지, 그리고 어떤 부분에 집중하는지에 대해 더 투명하게 설명하고자 합니다.
네이티브 경험 구현
React Native의 최우선 목표는 각 플랫폼에 대한 사용자의 기대를 충족하는 것이다. 이 때문에 React Native는 플랫폼의 기본 요소를 렌더링한다. 크로스 플랫폼 일관성보다 네이티브의 외관과 동작을 더 중요하게 여긴다.
예를 들어, React Native의 TextInput은 iOS에서 UITextField로 렌더링된다. 이를 통해 패스워드 관리자와 키보드 컨트롤과의 통합이 바로 동작한다. 플랫폼 기본 요소를 사용함으로써 React Native 앱은 Android와 iOS의 새로운 릴리스에서 발생하는 디자인 및 동작 변화에도 빠르게 대응할 수 있다.
네이티브 앱의 외관과 동작을 구현하려면 성능도 일치시켜야 한다. 이 부분에 가장 야심 찬 노력을 기울이고 있다. 예를 들어, Facebook은 Android용 React Native를 위해 처음부터 새로 만든 JavaScript 엔진인 Hermes를 개발했다. Hermes는 React Native 앱의 시작 시간을 크게 개선한다. 또한, 스레딩 모델을 최적화하고 React Native가 네이티브 코드와 더 쉽게 상호작용할 수 있도록 주요 아키텍처 변경 작업도 진행 중이다.
대규모 확장성
페이스북 앱의 수백 개 화면은 React Native로 구현되었다. 페이스북 앱은 다양한 기기에서 수십억 명의 사용자가 이용한다. 이것이 바로 우리가 대규모에서 가장 어려운 문제들에 집중하는 이유다.
React Native를 앱에 적용하면 소규모에서는 발견하지 못했던 문제들을 식별할 수 있다. 예를 들어, 페이스북은 최신 아이폰부터 여러 세대의 구형 안드로이드 기기까지 다양한 기기에서의 성능 개선에 초점을 맞춘다. 이러한 접근은 Hermes, Fabric, TurboModules와 같은 아키텍처 프로젝트에 영향을 미친다.
React Native가 대규모 조직에서도 확장 가능하다는 것을 입증했다. 수백 명의 개발자가 하나의 앱에서 작업할 때 점진적인 도입은 필수적이다. 이것이 바로 React Native를 한 화면씩 도입할 수 있도록 설계한 이유다. 곧, 기존 네이티브 화면의 개별 네이티브 뷰를 React Native로 마이그레이션하는 기능도 제공할 예정이다.
대규모 확장성에 집중한다는 것은 현재 우리 팀이 다루지 않는 여러 영역이 있다는 것을 의미한다. 예를 들어, 우리 팀은 React Native의 업계 도입을 주도하지 않는다. 또한 대규모에서 발견하지 못한 문제들에 대한 솔루션을 적극적으로 개발하지 않는다. 하지만 많은 파트너와 핵심 기여자들이 커뮤니티를 위해 이러한 중요한 영역에 집중할 수 있다는 점을 자랑스럽게 생각한다.
개발 속도 향상
탁월한 사용자 경험은 반복적인 과정을 통해 만들어낸다. 코드 변경 결과를 실행 중인 앱에서 몇 초 만에 확인할 수 있어야 한다. React Native의 아키텍처는 개발 중 거의 즉각적인 피드백을 제공한다.
많은 팀이 React Native를 도입해 개발 속도를 크게 향상시켰다고 보고한다. 이러한 팀들은 사소한 변경마다 코딩 세션을 중단할 필요 없이 즉각적인 피드백을 받으면서 다양한 아이디어를 시도하고 추가적인 개선을 더 쉽게 할 수 있다고 말한다. React Native를 개선할 때도 개발자 경험의 이러한 특성을 유지하는 데 주력한다.
즉각적인 피드백은 React Native가 개발 속도를 높이는 유일한 방법이 아니다. 팀은 빠르게 성장하는 고품질 오픈소스 패키지 생태계를 활용할 수 있다. 또한 Android, iOS, 웹 간에 비즈니스 로직을 공유할 수 있다. 이를 통해 업데이트를 더 빠르게 배포하고 플랫폼 팀 간의 조직적 격차를 줄일 수 있다.
모든 플랫폼
2014년 React Native를 소개하면서 "한 번 배우고, 어디서나 작성하라"는 모토를 제시했다. 여기서 '어디서나'는 정말 어디든을 의미한다. 개발자는 기기 모델이나 운영체제에 제한받지 않고 가능한 한 많은 사용자에게 도달할 수 있어야 한다.
React Native는 모바일, 데스크톱, 웹, TV, VR, 게임 콘솔 등 매우 다양한 플랫폼을 대상으로 한다. 최소 공통 분모를 위해 개발하도록 강요하는 대신, 각 플랫폼에서 풍부한 경험을 제공하는 것을 목표로 한다. 이를 위해 각 플랫폼의 고유 기능을 지원하는 데 초점을 맞춘다. 터치, 펜, 마우스와 같은 다양한 입력 방식부터 VR의 3D 환경과 같은 근본적으로 다른 소비 경험까지 모두 포함한다.
이 원칙은 React Native의 새로운 코어 아키텍처를 크로스 플랫폼 C++로 구현해 플랫폼 간 동등성을 높이기로 한 결정에 영향을 미쳤다. 또한 Windows와 macOS와 같은 다른 플랫폼 관리자를 대상으로 한 공개 인터페이스를 개선하고 있다. 모든 플랫폼이 React Native를 지원할 수 있도록 노력하고 있다.
선언형 UI
우리는 모든 플랫폼에 동일한 사용자 인터페이스를 배포하는 방식을 지지하지 않는다. 대신, 각 플랫폼의 고유한 기능을 동일한 선언형 프로그래밍 모델로 표현하는 것을 지향한다. 우리의 선언형 프로그래밍 모델은 React다.
경험적으로, React가 대중화한 단방향 데이터 흐름은 애플리케이션을 더 이해하기 쉽게 만든다. 우리는 화면을 명령형으로 관리되는 뷰보다는 선언형 컴포넌트의 조합으로 표현하는 것을 선호한다. React가 웹에서 성공을 거두고, 새로운 네이티브 Android와 iOS 프레임워크의 방향성은 업계가 선언형 UI를 받아들였다는 것을 보여준다.
React는 선언형 사용자 인터페이스를 대중화했다. 그러나 여전히 React만이 해결할 수 있는 많은 문제가 남아 있다. React Native는 React의 혁신 위에 계속 구축되며, 선언형 사용자 인터페이스 운동의 최전선에 머물 것이다.