문서 메뉴
문서 홈
/ /
Atlas Device SDK

Atlas Device SDK 소개

이 페이지의 내용

  • 모바일/엣지 개발 과제
  • MongoDB Atlas와 데이터 동기화하기
  • Atlas App Services 사용하기
  • Atlas Device SDK 및 MongoDB 드라이버 비교
  • SDK로 Realm 데이터베이스 래핑하기
  • Realm 및 기타 데이터베이스 비교
  • 실시간 쿼리
  • 실시간 객체
  • 네이티브 데이터베이스 엔진

Atlas Device SDK는 다양한 기기에서 앱 개발을 가속화할 수 있는 도구 모음입니다.

  • 내장된 동기화 클라이언트를 통해 기기 간에 데이터를 동기화할 수 있으며 MongoDB Atlas 백엔드와도 동기화할 수 있습니다.

  • 디바이스에 데이터를 지속적으로 저장할 수 있는 오프라인 우선 객체 데이터베이스입니다.

  • Atlas Function을 호출해서 클라우드로 작업을 할 수 있는 기능입니다.

  • 앱에서 MongoDB 데이터 소스를 직접 쿼리할 수 있는 클라이언트입니다.

SDK의 객체 저장소인 Realm을 사용하여 기기에서 데이터를 읽고, 쓰고, 변경 사항에 반응할 수 있습니다. Device Sync, Atlas Function, 또는 MongoDB Atlas 클라이언트를 추가하여 MongoDB Atlas 기능을 활용하고 앱에서 데이터 소스에 액세스하세요.

모바일/엣지 개발자에게 주어진 고유 과제는 다음과 같이 여러 가지가 있습니다.

  • 모바일 및 엣지 기기의 예측할 수 없는 환경을 처리합니다. 연결이 끊어질 수 있고, 언제든 기기가 종료될 수 있으며, 출시된 지 한참 후에 클라이언트가 업데이트되는 경우가 많습니다.

  • 클라이언트, 백엔드 API, 데이터베이스 간의 공통 데이터 스키마 및 API를 유지 관리합니다.

  • 에코시스템의 모든 구성 요소에 걸쳐 보안 취약점을 계속 파악합니다.

  • 네트워크, 데이터베이스 스토리지, 애플리케이션 메모리 간의 객체를 균일하게 직렬화합니다.

  • 1개 이상의 운영 체제에 맞는 언어 및 프레임워크로 프로그래밍합니다.

이러한 과제는 모두 서로 다른 장애물을 던져줍니다. 다양한 라이브러리와 프레임워크를 사용하여 각각을 개별적으로 해결할 수 있습니다. 모바일 및 엣지 개발자들은 각 문제에 대해 적절한 절충안을 가지고 최상의 솔루션을 선택하는 것이 매우 어렵다는 것을 잘 알고 있습니다.

여러 환경을 조합하면 더 많은 과제가 발생합니다. 예를 들어, Android 클라이언트에서 Java 라이브러리를 사용하여 객체를 직렬화할 수 있지만, 해당 라이브러리는 iOS에서는 작동하지 않습니다. 그리고 이는 백엔드 서비스 전반의 일관성을 고려하지 않습니다.

SDK는 모바일/엣지 프로그래밍의 여러 가지 흔한 문제를 해결합니다.

  • 디바이스 스토리지: SDK는 클라이언트 디바이스에서 바로 실행됩니다. 각 플랫폼의 네이티브 쿼리 언어를 사용하여 객체에 액세스하세요. 데이터 저장, 액세스 및 업데이트는 간단하고 가볍습니다.

  • 네트워크 안정성: SDK는 오프라인 우선입니다. 사용자는 네트워크를 통하지 않고서도 항상 디바이스의 지속성 계층으로 읽고 쓸 수 있습니다. Device Sync가 활성화된 경우 SDK는 백그라운드 스레드에서 네트워크를 통해 데이터를 App Services와 동기화합니다. 동기화 프로토콜은 각 클라이언트와 연결된 Atlas 클러스터에서 일관적으로 충돌을 해결합니다.

  • 반응형 UI: 실시간 객체는 데이터베이스에 저장된 최신 데이터를 항상 반영합니다. 변경사항을 구독하여 UI를 최신 상태로 계속 유지할 수 있습니다.

클라이언트 애플리케이션은 많은 데이터를 생성합니다. 고객이 올린 리뷰와 평점, 블로그의 게시물과 댓글, 주방의 재고 등 모든 데이터는 어딘가에 저장되어야 합니다.

SDK는 Device Sync를 사용하여 클라이언트와 MongoDB Atlas 사이에서 앱 데이터를 동기화합니다. Atlas Device Sync는 애플리케이션의 백그라운드 스레드에서 네트워크 액세스 및 충돌 해결을 처리하므로 네트워크 상태에 관계없이 애플리케이션 로직이 동일하게 유지됩니다.

클라이언트 데이터가 Atlas에 저장되면 전체 Atlas 개발자 데이터 플랫폼을 활용할 수 있습니다. MongoDB의 모든 기능을 활용하여 애그리게이션 및 기타 복잡한 워크로드를 수행하세요. 또는 Atlas 인스턴스를 Charts 에 연결하여 데이터를 실시간으로 시각화할 수 있습니다. Atlas에 데이터를 저장하면 모든 사용자 및 플랫폼에 걸쳐 데이터를 쉽게 공유할 수 있습니다.

SDK는 App Services와 통합되어 앱의 데이터로 쉽고 안전하게 작업할 수 있습니다.

다음과 같은 기능이 필요한 경우에는 MongoDB 드라이버 대신 SDK를 사용하세요.

  • 모바일 및 엣지 기기에 최적화된 크로스 플랫폼 객체 저장소로, MongoDB Atlas와 데이터를 자동으로 동기화할 수 있습니다.

  • 기본 제공 충돌 해결 기능(모든 사용자와 디바이스를 통틀어 데이터를 동기화할 경우)

  • 네트워크 연결 여부에 관계없이 디바이스의 데이터에 액세스할 수 있는 기능

  • 데이터로 구동되는 반응형 UI

  • 클라이언트 디바이스에 필요한 기본 제공 사용자 관리/인증 기능

  • 클라이언트가 읽고 쓸 수 있는 데이터를 결정할 수 있도록 복잡한 사용자 권한 및 동기화 로직을 지원합니다.

  • 모바일 디바이스 또는 엣지 디바이스의 고용량 삽입 전용 워크로드를 위한 최적화 기능

  • 클라이언트에서 Atlas Function을 실행하는 기능

다음과 같은 경우 SDK 대신 MongoDB 드라이버를 사용하세요.

  • 자체 인프라에서 MongoDB를 호스팅하는 경우. SDK는 기기 전용이거나 MongoDB Atlas와 함께 작동합니다.

  • 객체 대신 문서로 직접 작업하고 싶거나 자체 매핑 레이어가 있는 경우. SDK는 데이터를 객체로 기기에 저장하고, Device Sync는 Atlas와 동기화할 때 이를 MongoDB 문서에 매핑합니다.

  • MERN 또는 MEAN과 같은 스택이 이미 있으므로 SDK에서 제공하는 기능이 필요하지 않습니다.

SDK가 기기에서 사용하는 지속성 계층은 Realm입니다. SDK는 Realm Core C++ 데이터베이스를 래핑하고, 파일 시스템의 파일 작업과 읽기 및 쓰기 작업을 수행할 수 있는 언어 관용적 API를 제공합니다.

Realm은 반응형이고 객체 지향적인 크로스 플랫폼 모바일 데이터베이스입니다.

  • Reactive(반응형): 데이터의 현재 상태를 쿼리하고, 쿼리 결과 또는 단일 객체의 변경사항 등등 상태 변경사항을 구독합니다.

  • Object-oriented(객체 지향): 데이터를 행, 문서 또는 열이 아닌 객체로 구성합니다.

  • Cross-platform(크로스 플랫폼): iOS, Android, Linux, macOS 또는 Windows에서 동일한 데이터베이스를 사용합니다. 사용하는 각 SDK에 대해 스키마를 지정하기만 하면 됩니다.

  • Mobile(모바일): 배터리에 민감한 모바일 디바이스의 저전력 실시간 환경에 맞게 설계되었습니다.

Realm은 SQLite 와 같은 다른 모바일 데이터베이스에 대한 크로스 플랫폼 및 모바일 최적화 대안입니다., 핵심 데이터 , 및 Room.

Realm 데이터 모델은 관계형 데이터베이스 및 문서 데이터베이스와 유사하지만, 두 데이터베이스와는 뚜렷한 차이점이 있습니다. Realm은 기기의 파일에 객체를 저장하며, 앱은 여러 개의 Realm 파일을 사용하여 데이터를 구성하고 액세스 제어를 적용할 수 있습니다.

Realm은 애플리케이션 전체에 적용되는 단일 데이터베이스가 아닙니다.
다른 데이터베이스 시스템을 기반으로 하는 애플리케이션은 일반적으로 모든 데이터를 하나의 데이터베이스에 저장합니다. 앱은 데이터를 효율적으로 정리하고 액세스 제어를 강화하기 위해 여러 Realm에 데이터를 분할하는 경우가 많습니다.
Realm은 관계형 테이블이 아닙니다.
관계형 데이터베이스의 정규화된 테이블은 거리 주소나 매장 재고 품목과 같은 한 가지 정보만 저장합니다. Realm은 도메인과 관련된 객체 유형을 얼마든지 포함할 수 있습니다.
Realm은 스키마리스 문서들의 컬렉션이 아닙니다.
문서 데이터베이스는 각 컬렉션의 데이터에 대해 반드시 엄격한 스키마를 적용하지는 않습니다. 모든 Realm 객체는 형식은 문서와 비슷하지만, Realm의 특정 객체 유형에 대한 스키마를 준수합니다. 객체는 스키마에 설명되지 않은 속성을 포함할 수 없습니다.

객체를 찾고, 필터링하고, 정렬하여 Realm에 저장한 데이터를 다시 읽을 수 있습니다. 원하는 경우 이러한 결과를 키 경로로 표시하여 섹션화된 표를 더 쉽게 채울 수 있습니다.

모든 Realm 객체는 라이브 객체이므로 수정될 때마다 자동으로 업데이트됩니다. Realm은 속성이 변경될 때마다 알림 이벤트를 발생시킵니다.

라이브 객체를 사용하면 ORM 없이 기본적으로 객체 지향 데이터로 작업할 수 있습니다. 도구. 라이브 객체는 저장된 기본 데이터에 대한 직접 프록시이므로 라이브 객체에 데이터가 직접 포함되지 않습니다. 대신 라이브 객체는 항상 디스크 및 지연 로드 의 최신 데이터를 참조합니다.컬렉션에서 액세스할 때 속성 값. 즉, Realm에는 많은 객체가 포함될 수 있지만 애플리케이션이 실제로 사용하고 있는 데이터에 대한 성능 비용만 지불하면 됩니다.

라이브 객체에 대한 유효한 쓰기 작업은 자동으로 Realm에 유지되고 다른 동기화된 클라이언트에 전파됩니다. 업데이트 메서드를 호출하거나, Realm을 수정하거나, 다른 방식으로 업데이트를 '푸시'할 필요가 없습니다.

Realm은 SQLite와 같은 기본 데이터베이스 엔진을 기반으로 구축되지 않고 처음부터 C++로 작성된 전체 데이터베이스입니다. Realm의 기본 스토리지 계층은 B+ 트리 를 사용합니다. 객체를 구성합니다. 결과적으로 Realm은 스토리지 수준에서 액세스 수준까지 최적화를 계속 제어합니다.

Realm은 데이터를 Realms(이질적인 Realm 객체들의 컬렉션)에 저장합니다. 각 Realm을 데이터베이스로 보면 됩니다. Realm의 각 객체는 SQL 데이터베이스 테이블 또는 MongoDB 문서의 행에 상응합니다. Realm은 SQL과 달리 서로 다른 객체 유형을 개별 테이블로 분리하지 않습니다.

Realm은 객체를 속성 값 그룹으로 저장합니다. 이를 열 기반 저장이라고 합니다. 즉, 인덱싱되지 않은 경우에는 개별 객체에 대한 쿼리 또는 쓰기가 행 기반 저장을 사용하는 경우에 비해 느려질 수 있지만, 공간적 로컬리티와 CPU 내 벡터 연산으로 인해 여러 객체에 걸쳐 하나의 필드를 쿼리하거나 여러 객체를 가져오는 작업은 훨씬 빠르게 처리할 수 있습니다.

Realm은 제로 카피 를 사용합니다. 쿼리를 ORM보다 빠르게, 그리고 종종 원시 SQLite보다 빠르게 수행하도록 설계합니다.

Realm은 쓰기 중 복사(copy-on-write)라는 기술을 사용합니다. 이 기술은 디스크의 오래된 데이터를 덮어쓰는 대신, 쓰기 작업을 할 때마다 데이터를 디스크의 새 위치로 복사합니다. 데이터의 새 복사본이 완전히 기록되고 나면 데이터베이스가 해당 데이터에 대한 기존 참고 자료를 업데이트합니다. 오래된 데이터는 클라이언트 애플리케이션에서 더 이상 참조되지 않거나 활발하게 사용되지 않는 경우에만 가비지로 수집됩니다.

쓰기 중 복사(COW)로 인해 이전 데이터 복사본의 모든 참조가 여전히 다른 유효한 데이터를 가리키므로 해당 복사본은 유효하게 유지됩니다.Realm은 이 사실을 활용하여 클라이언트 애플리케이션의 여러 스레드에 여러 버전의 데이터를 동시에 제공합니다. 대부분의 애플리케이션은 UI를 제어하는 이벤트 루프 스레드의 새로 고침 주기에 따라 데이터를 새로 고침하는데, 이는 데이터의 새로 고침 주기가 UI와 동일한 빈도를 가지면 되기 때문입니다.대량 쓰기 작업과 같이 배경 스레드에서 오래 실행되는 절차는 변경 사항을 커밋하기 전에 더 오랜 시간 동안 단일 버전의 데이터로 작업할 수 있습니다.

쓰기는 메모리 매핑 을 사용합니다. 메모리에서 스토리지로 데이터를 앞뒤로 복사하지 않도록 합니다. 접근자와 변경자는 메모리 매핑을 통해 디스크를 읽고 씁니다. 결과적으로 객체 데이터는 앱의 스택이나 힙에 저장되지 않습니다. 데이터는 우발적인 쓰기를 방지하기 위해 기본적으로 읽기 전용으로 메모리 매핑됩니다.

Realm은 각 운영 체제가 단일 라이브러리가 자체적으로 구현할 수 있는 것보다 메모리 매핑과 지속성을 더 잘 구현할 수 있도록 신뢰하여 운영 체제 수준 페이징을 사용합니다.

Realm은 데이터베이스 쓰기 후 더 이상 필요하지 않은 여유 공간을 자동으로 재사용합니다. 그러나 Realm에 저장된 데이터의 양이 크게 줄어든다고 해도 Realm 파일은 자동으로 줄어들지 않습니다. Realm을 압축하여 저장 공간을 최적화하고 가능하면 파일 크기를 줄이는 것이 좋습니다.

가끔 Realm을 압축하여 최적의 크기로 유지해야 합니다. 이 작업은 수동으로 수행할 수도 있고, 시작 시 Realm을 압축하도록 구성하여 수행할 수 있습니다. 그러나 Realm은 사용하지 않는 공간을 추후 쓰기에 대비해 확보하므로, 압축은 기기 내 공간을 절약하기 위한 최적화일 뿐입니다.

← Atlas Device SDK Docs에 오신 것을 환영합니다