https://docs.mongodb.com/realm/get-started/introduction-mobile/
이 소개글은 고수준 MongoDB Realm 제품에 대해 설명하고 있으며, 모바일 앱 개발자를 위한 글입니다. 내용을 읽어보신다면 MongoDB Realm이 무엇인지 이해하시게 될 것이며, Realm 데이터베이스와 어떻게 상호작용하는지, 전통적 모바일 개발 스택에 비해 MongoDB Realm이 갖는 이점이 무엇인지도 이해하시게 될 것입니다.
NOTE
만약 백엔드 작업을 하시는 분이시거나 웹 앱에서 작업하신다면 아래 글을 보시는 것을 생각해보시기 바랍니다.
웹 개발자를 위한 소개글
https://docs.mongodb.com/realm/get-started/introduction-web/
백엔드 개발자를 위한 소개글
https://docs.mongodb.com/realm/get-started/introduction-backend/
모바일 앱을 개발하는 과정에서 여러 가지 문제에 직면하게 될 것입니다. 모바일 개발자는 아래와 같은 문제를 해결해야 합니다.
모바일 앱의 예측하지 못한 상황을 다루는 것, 예를 들어 커넥션이 끊기거나 갑자기 기기가 종료되는 경우, 그리고 클라이언트가 릴리즈 이후 업데이트를 할 때 막대한 지연이 발생하는 경우 등을 해결해야 합니다.
모바일 클라이언트와 백엔드 API, 데이터베이스 세 가지를 조직화할 때 각각을 위한 객체의 schema를 유지하고 엔드포인트들을 소통할 수 있도록 유지하는 문제에 부딪힙니다.
에코시스템 내에 모든 요소에 걸쳐 보안 취약성을 인식하는 것이 있습니다. 모든 요소란 HTTP 프로토콜, API 엔드포인트, 클라이언트에서 저장된 데이터와 관련해서 그렇습니다.
네트워크, 데이터베이스 저장소, 앱 메모리 사이에 객체들을 지속적으로 동기화하는 데 어려움을 겪을 수 있습니다.
하나 이상의 모바일 운영체제를 위한 여러 언어와 다양한 프레임워크를 통해 프로그래밍 하는 것도 해당합니다.
위와 같은 문제들은 도전적인 문제들입니다. 다양한 라이브러리와 프레임워크를 사용함을 통해 문제 각각을 독립적으로 해결할 수 있습니다. 각각의 상황에 맞춰 적당한 트레이드오프를 갖고 문제들을 해결하기 위해 어떤 솔루션을 사용할 것인지 결정하는 것은 어려운 것이며, 모든 개발자들이 잘 알고 있는 문제입니다.
또한, 여러 가지 요소를 도입해 조합하는 것은 심지어 더 어려운 일입니다. 예를 들어 안드로이드 클라이언트에서 자바 라이브러리를 사용해 그 환경 하에 객체를 동기화할 수 있지만, 안드로이드, iOS, 웹 전반에 걸쳐 동기화해야 하는 문제가 생기고 각각을 지원해주는 백엔드 서비스 역시 동기화 작업에 있어 어려움을 겪게 될 것입니다.
전부는 아니겠지만 대부분 이와 같은 문제가 발생하는 이유는 네트워크 안정성, 로컬 저장소, UI를 반응형으로 유지하는 것을 포함한 환경 하에 각각이 갖는 특이사항들로부터 기인합니다. Realm은 이와 관련해 여러 가지 문제들을 해결해줍니다.
로컬 저장소: Realm 데이터베이스는 클라이언트 기기에서 작동합니다. 각각의 플랫폼에서 native 쿼리 언어를 사용해 객체에 접근할 수 있고 저장할 수 있으며, 데이터 업데이트도 가능합니다.
네트워크 안정성: Realm 데이터베이스는 offline-first입니다. 네트워크에서 데이터에 접근하는 것이 아니라 로컬 데이터베이스에서 읽고 쓰는 작업을 하게 됩니다. Realm Sync가 가능하도록 설정한다면 Realm 데이터베이스는 백그라운드 스레드를 통해 네트워크에 MongoDB Realm을 동기화합니다. 이는 로컬 데이터 변경을 반영하고 원격(네트워크) 저장소의 변경사항을 불러오기도 합니다. Sync 프로토콜은 각각의 클라이언트에 대한 충돌 문제, 연결된 MongoDB Atlas 클러스터에 대한 충돌 문제들을 일관되게 해결합니다.
반응형UI: 라이브 객체는 Realm 데이터베이스에 저장된 최신의 형태를 반영하도록 합니다. 그리고 변경사항을 구독할 수 있도록 허용하며, 이를 통해 항상 UI를 최신 형태로 유지할 수 있습니다.
Realm SDK는 안드로이드, iOS, Node.js, React Native, UWP development에 있는 로컬 realm을 연결시킬 수 있도록 합니다.
클라이언트 앱은 많은 데이터를 생성합니다. 리뷰나 평점 업로드, 블로그에 포스트를 남기거나 코멘트를 남기는 것, 부엌의 도구를 업로드하는 것 등 데이터를 어디인가에 저장해야 할 필요가 있습니다. MongoDB Atlas는 언제나 이용 가능한 MongoDB의 cloud-hosted 인스턴스를 제공합니다.
Atlas는 집계와 기타 복잡한 워크로드를 MongoDB가 갖추고 있는 전체 capability에서 지원합니다. 다양한 언어에 대해서도 MongoDB 드라이버를 사용하면, 백엔드 서비스 내에 존재하는 Atlas 인스턴스에 연결해 접근할 수 있도록 지원합니다. 혹은 MongoDB Charts에 Atlas 인스턴스를 연결시켜 실시간으로 데이터를 시각화할 수도 있습니다. Atlas에 데이터를 저장하는 것을 통해 사용자와 여러 플랫폼에 걸쳐 데이터를 공유하는 것을 쉽게 할 수 있습니다.
MongoDB Realm은 Realm 데이터베이스와 MongoDB Atlas를 sync할 수 있도록 합니다. 이는 모바일 앱에서 앱 계층 속에 두 가지 요소를 원활하게 묶어줍니다. 이와 같은 서비스를 지원하기 위해 MongoDB Realm은 몇 가지 일관된 형태여야 하는 앱 요구사항들을 충족시키기 위한 요소들을 제공합니다.
페이스북이나 구글, 애플과 같은 서드파티 autentication을 제공해주는 이들을 쉽게 통합할 수 있도록, Realm Users와 Real Authentication은 사용자 관리 기능을 제공합니다.
Realm Functions는 Realm 앱을 위한 server-side 로직을 제공합니다. REST API에서 엔드포인트와 유사하게 URL, Header, Body, HTTP 엔드포인트 호출 메소드를 수동으로 구성하는 것 대신 클라이언트 앱에 있는 Realm SDK의 모듈로부터 Realm Functions를 호출하면 됩니다.
스케줄링 된 시간 혹은 이벤트 발생 시점, 예를 들어 데이터베이스에서 변경사항이나 HTTP 엔드포인트 호출과 관련해 Realm Triggers는 자동으로 해당 기능들을 수행합니다.
Realm Rules는 누가 어떤 데이터에 접근할 수 있도록 할지 결정하는 것을 가능하게 합니다.
Server-side Realm Values와 Realm Secrets는 전역 변수, private credential을 정의하는 것을 가능하게 하고 Realm 앱 전반에 걸쳐 이들을 사용할 수 있도록 해줍니다.
연결된 MongoDB cluster에 존재하는 데이터 접근과 관련해 GraphQL API를 사용할 수 있습니다. 이는 standard GraphQL 클라이언트를 사용하는 것을 통해 가능합니다.
Realm 모바일 SDK는 함수 호출, 사용자 인증, 원격 Realm에 sync, 로컬 Realm에 쿼리가 가능하도록 합니다.
아래와 같은 플랫폼에 대한 튜토리얼을 통해 MongoDB Realm 앱의 생성을 시도할 수 있습니다.
You can also refer to the documentation for each client SDK:
Android SDK for Kotlin and Java
https://docs.mongodb.com/realm/sdk/android/
iOS SDK for Swift and Objective-C
https://docs.mongodb.com/realm/sdk/ios/
.NET SDK for C# / Xamarin
https://docs.mongodb.com/realm/sdk/dotnet/
React Native SDK for TypeScript and JavaScript
https://docs.mongodb.com/realm/sdk/react-native/
MongoDB Realm은 배포와 세부 사항 처리를 위한 serverless 플랫폼입니다. functions, triggers, rules, 서드파티 SSO를 통해 로직, 데이터 접근 허용, 인증 등을 customize할 수 있습니다.
Realm 데이터베이스는 offline-first 모바일 객체 데이터베이스이며, ORM 없이도 라이브 객체들에 접근, 저장이 가능하도록 합니다.
라이브 객체들과 Realm Sync는 전통적 모바일 개발 스택에 비해 아래와 같은 중요한 이점을 제공합니다.