아래 내용은 토스ㅣSLASH 22 - 미친 생산성을 위한 React Native
을 보고 정리한 내용입니다.
TL:DR; RN의 코드푸시 기능이 MVP 개발 철학과 아름답게 잘 어울린다!
동남아시아에서 서비스 중인 토스 글로벌 팀은 프론트엔드, 안드로이드, IOS 개발자 각각 1명, 서버 개발자 2명으로 구성된 팀으로써, 개발을 진행할 수록 느린 배포 속도, 개발 리소스 부족의 문제가 발생하게 되었다.
앱의 모든 Flow를 웹으로 만드는 것
1-1. 앱을 켤때마다 매번 최신 리소스를 다운로드하기에 유저들에게 일괄적으로 최신 기능을 제공할 수 있다는 장점이 있으나 네트워크 환경에 의존적이다.
1-2. 성능적인 한계를 극복할 수 없다.
-> 종합해볼때, 동남아시아라는 지역적 특수성때문에 단점이 크게 부각되어 선택할 수 없다.
크로스 플랫폼 프레임워크를 사용하는 것
Flutter: 공식 라이브러리가 잘 되어있다. RN보다 많이 사용된다. 높은 학습비용
React Native: 채용 풀이 넓다. 공식 라이브러리 생태계가 빈약하다. + CodePush를 사용할 수 있다
💡 CodePush란, MS에서 만든 오픈소스로서 앱을 심사없이 실시간 업데이트를 가능하게 해주는 모듈이다. RN에서는 JS단의 코드와 assets(이미지, 폰트, ...)의 요소를 앱 심사 없이 바로 업데이트 할 수 있다.
(단, 네이티브 영역의 코드가 변경되어야 한다면, CodePush를 사용할 수 없다. JS수정시만 가능!)
빠른 실험과 배포, 낮은 학습비용을 이유로 RN으로 선택했다. RN을 기존 코드에 부분적으로 도입할 것인지, 처음부터 다시 만들 것인지를 선택해야하는 상황에서 병렬적으로 두 트랙 모두 진행.
RN을 기존 네이티브 앱에 점진적으로 적용이 가능하고, 기존 코드와 모듈 활용 할 수 있다. 그리고 마이그레이션 이슈로 부터 자유롭다.
But, 다음과 같은 문제가 생겼다.
크로스 플랫폼을 이점을 최대한 살리고 싶었다. (하나의 개발, 두개의 플랫폼)
기존에 사용하던 TDS(Toss Design System)은 웹 용이라 React Native용을 따로 만드는 추가 비용이 발생했다.
구현 과정에서 Native 코드를 사용해야하만 하는 일과 JS로만 할 수 있는 일 2가지로 분류해, 최대한 기존 팀의 리소스가 효율적으로 사용될 수 있도록 진행
역시, CodePush!