최신 모바일 애플리케이션을 위한 데이터베이스, Realm의 개발 전략

Realm Database series header

이 글은 Realm 모바일 데이터베이스에 대한 시리즈 마지막 글입니다. 이전 시리즈의 글의 기능이 모여 최신 모바일 애플리케이션을 위한 데이터베이스를 어떻게 구성하는지 알려드립니다.

혹시 시리즈 시작 글을 놓치셨다면 첫 번째 글과 성능 향상과 메모리 사용량 최소화에 최적화된 Realm API를 소개하는 두 번째 글, 플랫폼 간 코드 공유를 다룬 세 번째 글, Realm처럼 유연하고 견고한 SDK가 어떻게 좋은 개발을 돕는지에 대한 네 번째 글, 노티피케이션에 대한 다섯 번째 글을 먼저 보시길 추천합니다.


이 시리즈에서는 Realm 모바일 데이터베이스와 SDK의 여러 흥미로운 특징과 유용성에 관해 설명했습니다. Realm 엔진을 이루는 핵심 아이디어와 Realm을 사용해서 모바일 앱을 만들기 위해 반복되는 패턴을 정의하는 언어별 SDK 구현의 주요 개념을 핵심적으로 다뤘습니다.

시리즈의 마지막 글인 이 글에서는 앞서 설명한 모든 것이 어떻게 조화를 이루고 개발자가 이를 통해 더 빠르고 더 견고한 모바일 앱을 만들 수 있는지 살펴보겠습니다.

Realm 모바일 데이터베이스의 핵심 사항

이전 글에서 다룬 핵심 사항은 다음처럼 요약할 수 있습니다.

이런 개발 뉴스를 더 만나보세요

  • Realm은 기존 기술을 답습하지 않습니다. 성능 및 견고함을 보장하기 위해 자체 스토리지 엔진이 있습니다.
  • Realm은 Swift, Objective-C, Java(와 Kotlin), C#, JavaScript를 사용해서 Realm을 사용할 수 있도록 견고한 멀티 플랫폼 C++ 코어와 관련 SDK가 있습니다.
  • 기본 객체 그대로 항상 최신 상태인 라이브 오브젝트로 작업할 수 있습니다. “저장소에서만 사용”하거나 “프로그래밍에서만 사용”하는 형식에 맞추기 위해 타입을 변환할 필요가 없습니다.
  • Realm은 “데이터를 메모리에 복사하지 않으므로 오래된 데이터를 작업할 필요가 없다.”는 제로 카피 정책에 맞춰 지연적이고 pull 기반의 컬렉션을 제공합니다.
  • Realm은 데이터 변경 알림과 라이브 컬렉션을 제공하여 신속한 리액티브 앱을 개발할 수 있습니다.

위의 짧은 특징 정리만 보더라도 같은 제품에서 많은 특별 기능이 동작하고 있음을 알 수 있습니다. 이제 Realm이 개발자가 앱을 만드는 방법 그 자체를 변화시키는 몇 가지 방법에 대해 살펴보겠습니다.

쉽게 데이터 변화 관리하기

앱에 정적인 데이터 저장소를 사용하려면 데이터를 저장하고 해당 저장소의 변화를 언제 가져올지에 관련해서 많은 코드를 작성해야 합니다. 예를 들어 네트워크, 데이터 레이어, 뷰 컨트롤러, 뷰 바인딩 등에서 이런 코드가 필요하죠.

Realm은 이런 불편함을 덜기 위해 앱의 여러 다른 부분이 서로 통신할 수 있는 좋은 메커니즘을 만들었습니다. Realm은 데이터를 관리하며 변화를 감지해야 하는 요소들에 알림을 제공합니다. 따라서 데이터 캐시나 ORM이 필요하지 않습니다.

SDK를 사용하면 Realm으로 데이터를 동기화하거나 알림을 받아야 하는 일에서 해방돼서 클래스가 본연의 책임에 집중할 수 있습니다. 각기 다른 클래스가 서로 통신해야 할 필요 없이 객체를 받아오거나 저장하고 앱의 UI를 아주 쉽게 처리할 수 있습니다.

Write Skipping Notifications

플랫폼 사이에 데이터 레이어 재사용

iOS 앱에서 “완벽한 ORM”을 사용했는데 안드로이드 앱을 만들려고 보니 대안이 없어서 다시 초안으로 돌아간 경험이 혹시 있으신가요?

Realm은 여러 플랫폼에서 사용할 수 있도록 고안됐습니다. 여러 플랫폼 간에 사용할 수 있으므로 모든 플랫폼에서 코드를 재사용하고 같은 Realm 객체와 구조를 사용할 수 있습니다.

Realm은 범용 C++ 코어를 가지므로 C# 애플리케이션에서 데이터 파일들을 내보내고 이를 Objective-C로 만든 tvOS 앱에서 바로 사용할 수도 있습니다.

Realm SDKs: Java, Objective-C, React Native, Swift, Xamarin

비즈니스 로직을 위한 데이터 레이어 디자인

기존처럼 범용의 다목적 데이터베이스를 사용하는 경우 앱은 데이터베이스가 일반적인 사용법에 맞게 제공하는 기능에 맞춰야 합니다. 반면 Realm은 모바일 앱의 특정한 환경에 맞도록 특별히 설계되었으므로 Realm의 기능을 최대한 활용하는 방법을 습득할수록 더 나은 앱을 만들 수 있습니다. Realm의 특별한 데이터 모델 패턴을 사용해서 다각도로 앱의 성능을 향상할 수 있습니다.

예를 들어 List는 미리 정렬된 인스턴트 컬렉션입니다. SQL 데이터베이스를 사용할 때처럼 지속적으로 방대한 객체를 가진 컬렉션을 필터링하고 정렬하는 대신 리스트를 사용하면 데이터에 즉시 접근해서 테이블 뷰나 맵 뷰에 바로 사용할 수 있습니다. 리스트는 생성과 유지 비용이 낮으며 빠르고 안정적인 앱을 만드는 데 매우 유용합니다.

Lists powering view controllers

많은 플랫폼으로 시스템의 경계를 계속 넓혀가고 있는 경우라면 선택한 객체를 다른 Realm 파일로 옮겨서 읽기 전용으로 열 수도 있습니다. 이렇게 하면 Realm은 해당 파일의 변경 사항을 모니터링하지 않으므로 자원이 추가로 들지 않습니다.

빠르게 반응형 앱 개발하기

Realm의 많은 기능으로 반응형 앱을 빠르게 개발할 수 있습니다. 영문 글인 the characteristics that define reactive systems에서 Realm 모바일 데이터베이스가 앱에 이런 기능을 바로 추가하는 방법을 확인할 수 있습니다.

리스트 클래스가 즉각 화면에 처음 보여줘야 하는 몇 개의 객체를 바로 제공하므로, 사용자가 테이블에 20개의 항목을 표시하든 1000개의 항목을 표시하든 상관없이 앱은 탄력적으로 반응합니다.

Realm의 알림 기능으로 모든 관련 요소에 변경 사항을 즉각 알릴 수 있으므로 앱은 또한 반응적입니다. 개발자가 데이터베이스를 다른 스레드에서 사용하는 것에 대해 고민하지 않아도 되며, 백그라운드 컨텍스트를 병합하는 작업처럼 오류가 발생하기 쉬운 작업도 필요하지 않습니다.

또한, Realm으로 앱을 만들면 디스크 손상이나 공간 부족과 같이 매우 드문 상황을 제외하고는 문제없이 실행되므로 Realm 기반 애플리케이션은 탄력적입니다.

오프라인-우선 기능 강화

Realm은 처음부터 네트워크에 연결되는 애플리케이션, 특히 오프라인-우선 애플리케이션 구축을 중심으로 설계됐습니다.

Realm SDK의 설계의 많은 결정이 이를 기반으로 이뤄졌습니다. 예를 들어 해당 기능의 요청이 많음에도 불구하고 자동 증가 인덱스를 지원하지 않는 것은 오프라인-우선 앱을 위해서입니다. 모델에 자동 증가 인덱스가 추가되면 서버와 같이 하나의 근원지에서만 신뢰성이 보장되므로 사용자가 앱을 사용하려면 우선 서버에 연결해야 합니다. 또한, 새로 생성된 객체의 ID를 알기 위해 서버의 응답도 기다려야 합니다. (이 기능을 오프라인-우선 앱에서 실현할 방법은 계속 모색 중입니다.)

다른 예는 Realm.add(_:update:) API의 update 매개 변수입니다. SDK를 사용하면 Realm 데이터베이스에 단순히 새 객체를 생성하는 것인지, 아니면 JSON API에서 변경된 객체를 가져와서 로컬 Realm 복사본을 업데이트하는 것처럼 기존 객체를 새로 고치는지 명확하게 지정할 수 있습니다.

글이 마음에 드셨나요?

이 시리즈에서 Realm에 대해 알려드린 내용이 마음에 드셨으면 좋겠습니다. Realm 사용에 필요한 모든 내용을 다루지는 않았지만, Realm으로 애플리케이션을 개발하는 방법을 배우고 Realm 모바일 데이터베이스를 사용해서 새로운 패턴으로 앱을 만들 수 있는 영감을 얻으셨길 바랍니다.

아쉽게도 이 시리즈는 여기서 끝나지만, 코드 예제를 좀 더 자세히 살펴보고 Realm 모바일 데이터베이스나 Realm 모바일 플랫폼을 사용해보시거나 저희 웹사이트에서 더욱 많은 정보를 발견해보세요.

읽어 주셔서 감사합니다! 🙌 Realm 모바일 데이터베이스, Realm 모바일 플랫폼, 혹은 저희에게 궁금한 것이 있다면 언제든지 Facebook 페이지Facebook 그룹, 이메일(mailto:kr@realm.io)로 알려주세요.

다음: RecyclerView와 Realm으로 만드는 Grid Layout

General link arrow white

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Marin Todorov

Marin Todorov는 iOS 컨설턴트이자 퍼블리셔입니다. “iOS Animations by Tutorials”의 저자이며 iOS Animations by Emails” 뉴스레터를 운행하고 있습니다. 20년 넘게 Apple 관련 개발을 했으며 Monster Technologies와 Native Instruments 등의 회사에서 일하면서 4개 이상의 나라에서 거주했습니다. 또한 raywenderlich.com 튜토리얼 팀의 설립 멤버이기도 하죠. 코드 개발 이외에는 블로그 게재와 책 저술, 교육과 강연에 관심이 많으며, 코드를 오픈 소스화 하기도 합니다. Santiago 순례 경험도 있습니다.

4 design patterns for a RESTless mobile integration »

close