다음은 현재 몇 가지 현재 앱 프로젝트를 진행하는 가장 좋은 방법을 결정하면서 배운 내용입니다.
비동기 저장소 (기본 제공)
프로덕션 앱에 AsyncStorage를 사용합니다. 스토리지는 기기에 로컬로 유지되고 암호화되지 않으며 (다른 답변에서 언급 한 바와 같이), 앱을 삭제하면 사라지지만 기기 백업의 일부로 저장되어 업그레이드 중에 유지되어야합니다 (기본 업그레이드는 CodeFush를 통한 TestFlight 및 코드 업그레이드) ).
결론 : 로컬 스토리지; 자체 동기화 / 백업 솔루션을 제공합니다.
SQLite
내가 작업 한 다른 프로젝트는 앱 저장을 위해 sqlite3을 사용했습니다. 따라서 압축 가능한 데이터베이스를 통해 SQL과 유사한 환경을 제공 할 수 있으며 장치 간에도 데이터를 전송할 수 있습니다. 백엔드에 동기화 한 경험이 없지만 다양한 라이브러리가 있다고 생각합니다. SQLite에 연결하기위한 RN 라이브러리가 있습니다.
데이터는 데이터베이스, 테이블, 키, 인덱스 등이 모두 이진 형식으로 디스크에 저장된 기존 데이터베이스 형식으로 저장됩니다. SQLite 드라이버가있는 명령 줄 또는 앱을 통해 데이터에 직접 액세스 할 수 있습니다.
결론 : 로컬 스토리지; 동기화 및 백업을 제공합니다.
중포 기지
Firebase는 특히 실시간 noSQL 데이터베이스와 MongoDB와 같은 JSON 문서 저장소를 제공하여 1에서 n까지의 클라이언트 동기화를 유지합니다. 문서는 오프라인 지속성에 대해 이야기하지만 기본 코드 (Swift / Obj-C, Java)에 대해서만 이야기합니다. React Native에서 사용하는 Google 고유의 JavaScript 옵션 ( "웹")은 캐시 된 저장 옵션을 제공하지 않습니다 (아래 2/18 업데이트 참조). 라이브러리는 웹 브라우저가 연결될 것이라는 가정하에 작성되므로 반영구적으로 연결됩니다. Firebase 저장소 호출을 보완하기 위해 로컬 캐싱 메커니즘을 작성하거나 기본 라이브러리와 React Native 사이의 브리지를 작성할 수 있습니다.
2018 년 2 월 업데이트
나는 React Native Firebase 를발견했습니다. 기본 지원. Google이 실시간 데이터베이스 옆에 JSON 문서 저장소를 도입하면서 Firebase는 내가 구축하려는 일부 실시간 앱을 다시 한 번 살펴볼 것입니다.
실시간 데이터베이스는 JSON과 같은 트리로 저장되어 웹 사이트에서 편집하고 간단하게 가져 오기 / 내보내기 할 수 있습니다.
결론 : Reactive-native-firebase를 사용하면 RN은 Swift 및 Java와 동일한 이점을 얻습니다. [/ update] 네트워크 연결 장치에 맞게 확장 할 수 있습니다. 낮은 활용도를위한 저렴한 비용. 다른 Google 클라우드 제품과 잘 어울립니다. 인터페이스에서 데이터를 쉽게보고 편집 할 수 있습니다.
왕국
업데이트 4/2020
MongoDB는 Realm을 인수했으며이를 아래의 MongoDB 스티치와 결합 할 계획입니다. 이것은 매우 흥미로운 것 같습니다 .
또한 자동 네트워크 동기화 기능을 갖춘 실시간 객체 저장소입니다. 그들은 "장치 우선"으로 선전하고 데모 비디오는 장치가 산발적이거나 손실 된 네트워크 연결을 처리하는 방법을 보여줍니다.
자체 서버 또는 AWS 또는 Azure와 같은 클라우드 솔루션에서 호스팅하는 무료 버전의 객체 저장소를 제공합니다. 장치와 함께 유지되지 않는 메모리 내 저장소, 서버와 동기화되지 않는 장치 전용 저장소, 읽기 전용 서버 저장소 및 하나 이상의 장치에서 동기화하기위한 전체 읽기 / 쓰기 옵션을 만들 수도 있습니다. Firebase보다 월별 비용이 높은 전문 및 엔터프라이즈 옵션이 있습니다.
Firebase와 달리 모든 Realm 기능은 Swift / ObjC / Java (기본) 앱과 마찬가지로 React Native 및 Xamarin에서 지원됩니다.
데이터는 코드의 객체와 연결되어 있습니다. 그것들은 정의 된 객체이기 때문에 스키마가 있으며 코드 관리를 위해서는 버전 관리가 필수적입니다. Realm이 제공하는 GUI 도구를 통해 직접 액세스 할 수 있습니다. 온 디바이스 데이터 파일은 플랫폼 간 호환 가능합니다.
결론 : 장치 우선, 무료 및 유료 요금제와의 선택적 동기화. React Native에서 지원되는 모든 기능. Firebase보다 수평 확장이 더 비쌉니다.
iCloud
나는 솔직히이 일을 많이하지 않았지만 가까운 장래에 그렇게 할 것입니다.
CloudKit을 사용하는 기본 앱이있는 경우 CloudKit JS를 사용하여 웹 앱 (또는이 경우 React Native)에서 앱 컨테이너에 연결할 수 있습니다. 이 시나리오에서는 기본 iOS 앱과 React 기본 Android 앱이있을 것입니다.
Realm과 마찬가지로 데이터를 로컬에 저장하고 가능한 경우 iCloud와 동기화합니다. 앱을위한 공개 상점과 각 고객을위한 개인 상점이 있습니다. 고객은 매장이나 물건 중 일부를 다른 사용자와 공유하도록 선택할 수도 있습니다.
원시 데이터에 액세스하는 것이 얼마나 쉬운 지 모르겠습니다. 스키마는 Apple 사이트에서 설정할 수 있습니다.
결론 : Apple 대상 앱에 적합합니다.
소파베이스
큰 이름, 그 뒤에 큰 회사가 많이 있습니다. 표준 지원 비용이 포함 된 Community Edition 및 Enterprise Edition이 있습니다.
그들은 사이트에 React Native에 연결하는 튜토리얼을 가지고 있습니다. 나는 또한 이것에 많은 시간을 소비하지는 않았지만, 기능면에서 Realm에 대한 실용적인 대안으로 보입니다. 앱 외부의 데이터 또는 빌드하는 API가 얼마나 쉬운 지 잘 모르겠습니다.
[편집 : Couchbase와 CouchDB에 대해 이야기하는 오래된 링크를 찾았으며 CouchDB는 아직 고려해야 할 또 다른 옵션입니다. 이 두 제품은 역사적으로 관련되어 있지만 현재 완전히 다른 제품입니다. 참조 이 비교를 .]
결론 : Realm과 비슷한 기능을 가지고 있습니다. 장치 전용 또는 동기화 가능 나는 그것을 시도해야합니다.
몽고 DB
4/2020 업데이트
Mongo는 Realm을 인수했으며 MongoDB Stitch (아래에서 논의 됨)와 Realm (위에서 논의 됨) 을 결합 할 계획 입니다.
이 서버 쪽을 AsyncStorage를 로컬로 사용하는 앱에 사용하고 있습니다. 나는 모든 것이 JSON 객체로 저장되어 클라이언트 장치로의 전송이 매우 간단하다는 것을 좋아합니다. 유스 케이스에서는 TV 가이드 데이터의 업스트림 공급자와 클라이언트 장치 간의 캐시로 사용됩니다.
스키마와 같이 데이터에 대한 엄격한 구조는 없으므로 모든 객체는 쉽게 검색 가능하고 필터링 할 수있는 "문서"로 저장됩니다. 유사한 JSON 객체에는 추가 (그러나 다른) 속성 또는 하위 객체가있을 수 있으므로 객체 / 데이터를 구성하는 방법에 많은 유연성이 있습니다.
클라이언트와 서버 간 동기화 기능을 시도하지 않았거나 임베디드를 사용하지 않았습니다. MongoDB에 대한 반응 네이티브 코드가 존재합니다.
결론 : 로컬 전용 NoSQL 솔루션, Realm 또는 Firebase와 같은 명확한 동기화 옵션이 없습니다.
2019 년 2 월 업데이트
MongoDB에는 Stitch라는 "제품"(또는 서비스)이 있습니다. 클라이언트 (웹 브라우저 및 전화의 의미에서)는 MongoDB와 직접 대화해서는 안되며 (서버의 코드로 수행됨), 앱을 사용하도록 선택할 때 서버가없는 프런트 엔드를 만들었습니다. 호스팅 솔루션 (Atlas). 그들의 문서는 가능한 동기화 옵션이있는 것으로 보입니다.
2018 년 12 월이 글은 샘플 앱에서 React Native, Stitch 및 MongoDB를 사용하는 방법과 문서에 링크 된 다른 샘플 ( https://www.mongodb.com/blog/post/building-ios-and-android-apps) 에 대해 설명합니다. with-the-mongodb-stitch-react-native-sdk )를 사용하십시오.
트윌 리오 싱크
동기화를위한 또 다른 NoSQL 옵션은 Twilio의 동기화입니다. 사이트에서 : "동기화를 사용하면 백엔드 인프라를 처리하지 않고도 여러 장치에서 실시간으로 대규모 상태를 관리 할 수 있습니다."
위에서 언급 한 프로젝트 중 하나, 특히 두 팀과 대화 한 후 Firebase의 대안으로이 문제를 검토했습니다. 또한 다른 통신 도구를 좋아하며 간단한 웹 앱의 문자 메시지 업데이트에 사용했습니다.
[편집] 원래이 글을 쓴 이후로 Realm과 함께 시간을 보냈습니다. Firebase와 마찬가지로 앱과 서버간에 데이터를 동기화하기 위해 API를 작성하지 않아도되는 방법이 마음에 듭니다. 서버리스 함수는이 두 가지 기능에 정말 도움이 될 것 같습니다.
MongoDB 데이터 저장소의 유연성을 좋아하므로 웹 기반 및 기타 연결이 필요한 앱의 서버 측에서 선택하고 있습니다.
RESTHeart를 발견했습니다 .MongoDB 에 매우 간단하고 확장 가능한 RESTful API를 만듭니다. JSON 오브젝트를 읽고 읽고 RESTHeart에 쓰는 React (네이티브) 컴포넌트를 빌드하는 것이 너무 어렵지 않아야합니다.
[편집] 데이터 저장 방법에 대한 정보를 추가했습니다. 때로는 데이터를 조정하고 테스트해야하는 경우 개발 및 테스트 중에 얼마나 많은 작업을 수행해야하는지 아는 것이 중요합니다.
2019 년 2 월 편집 나는 작년 (2018 년) 높은 동시성 프로젝트를 디자인 할 때 이러한 옵션 중 몇 가지를 실험했습니다. 그들 중 일부는 문서에서 하드 및 소프트 동시성 한계를 언급합니다 (Firebase는 10,000 연결에서 어려운 것으로 나타났습니다 .Twilio는 AltConf의 두 팀과의 논의에 따르면 충돌 할 수있는 소프트 한계였습니다).
수십에서 수십만 명의 사용자를위한 앱을 설계하는 경우 그에 따라 데이터 백엔드를 확장 할 수 있도록 준비하십시오.