Realm Blog

Realm Xamarin을 소개합니다

오늘 새로운 Realm 모바일 데이터베이스를 공개합니다. 이번에는 Xamarin 용입니다. 이 데이터베이스는 기존 선택지 보다 빠른 성능 프로파일, 쉽게 사용할 수 있는 영속적인 객체, 전체적인 질의를 제공합니다.

다른 환경을 위한 Realm와 같이 Realm Xamarin은 반응형 앱 개발을 위해 바닥부터 만들었습니다. 라이브 객체, 변경 이벤트, 단방향 데이터 흐름을 지원하죠.

public class Dog : RealmObject
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person Owner { get; set; }
}

var realm = Realm.GetInstance();

// LINQ로 질의하기
var puppies = realm.All<Dog>().Where(d => d.Age < 2);
puppies.Count(); // => 아직 추가된 개가 없기 때문에 0입니다.

// 트랜잭션에서 기록
realm.Write(() =>
{
    var mydog = realm.CreateObject<Dog>();
    mydog.Name = "Rex";
    mydog.Age = 1;
});

// 질의는 실시간으로 갱신됩니다
puppies.Count(); // => 1

Realm은 폰, 타블렛, 웨어러블에서 작동하는 모바일 앱 개발에서 독특한 도전을 하기 위해 바닥부터 만들었습니다. Java, Objective‑C, Swift 버전을 2014년에 공개했고 React Native는 2016년 초기에 공개했습니다. 우리는 이미 트위터, 스타벅스, 시스코, 월마트, 구글, 아마존, 이베이을 비롯한 많은 앱 제작자 에 의해 수억대의 단말기에 사용하고 있습니다.

오늘 공개할 버전은 Xamarin용 버전입니다. C# 코드로 네이티브 iOS와 안드로이드 앱을 만들 수 있도록 하는 마이크로소프트의 모바일 플랫폼 기술입니다.

Realm Xamarin은 Realm에 기대하는 현대적인 디자인과 단순성을 제공합니다. 같은 코드베이스로 iOS와 안드로이드 타겟 모두를 지원합니다. 현재 Xamarin.iOS와 Xamarin.Android을 지원하고 앞으로 미래에는 Xamarin.Mac을 지원한 후 UWP와 유니티를 지원합니다.

왜 Realm인가요?

Realm은 ORM은 아니고 SQLite 위에 만들어진 것도 아닙니다. 그대신 모바일 앱 개발자를 위한 전체 데이타베이스를 만들었습니다. 네이티브 C# 객체에서 동적으로 전체가 연결되는 (키 밸류 스토어가 아닌) 커스텀 데이터베이스 엔진입니다. 심지어 성능을 향상하며 단순한 API를 제공합니다. Realm을 쓰면 복잡한 데이터를 모델링할 수 있고 그래프에 객체를 연결할 수 있고 향상된 질의를 작성할 수 있습니다.

public class Dog : RealmObject
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person Owner { get; set; }
}

var realm = Realm.GetInstance();

// 스레드 안전한 트랜잭션에서 쓰기가 발생
realm.Write(() =>
{
    var mydog = realm.CreateObject<Dog>();
    mydog.Name = "Rex";
    mydog.Age = 9;
});
// 친숙한 LINQ를 사용하는 기본질의 혹은 확장된 문장
var oldDogs = realm.All<Dog>().Where(d => d.Age > 8);
// 또는
var oldDogs = from d in realm.All<Dog>() where d.Age > 8 select d;

// 질의는 연결될 수 있다
var dogsNamedRex = oldDogs.Where(p => p.Name == "Rex");
dogsNamedRex.Count(); // => 1

realm.Write(() =>
{
    var mydog = realm.CreateObject<Dog>();
    mydog.Name = "Rex Maximus";
    mydog.Age = 10;
});

// 질의 결과는 실시간으로 갱신된다
dogsNamedRex.Count(); // => 2
public class Person : RealmObject
{
    public string Name { get; set; }
    public RealmList<Dog> Dogs { get; }
}

var realm = Realm.GetInstance();

realm.Write(() =>
{
    var jim = realm.CreateObject<Person>();
    var mydog = realm.CreateObject<Dog>();
    mydog.Name = "Fido";
    mydog.Owner = jim;
});

API를 사용하는 더 다양한 예제는 샘플 앱에서 볼 수 있습니다.

왜 Relam을 사용해야 하나요?

쉬움

Realm이 이미 위의 샘플에서 본 것 처럼 쉬운 사용에 항상 첫째로 촛점을 맞춥니다. Realm Xamarin도 전체적으로 같은 목표를 가집니다. 그것이 달성된 후 우리 다른 제품의 이점들을 적용합니다.

빠름

Realm의 쉬움이 성능상의 비용을 발생하지는 않습니다. 메모리 매핑, 지연된 불러오기, 커스텀 스토리지 엔진 덕분에 Realm은 풍부한 객체 기반의 API를 제공하면서도 SQLite에 비해 일반적으로 빠릅니다. 우리는 항상 자신의 사용예에 맞추어 모든 사람들이 테스트해보길 권합니다만 코드를 Realm으로 옮길때 막대한 성능향상을 보아왔습니다. 벤치마크 결과를 확인하세요.

크로스 플랫폼

이 말을 굳이 해야하나 싶지만, Realm Xamarin이 C# 코드를 한번 작성하면 iOS와 안드로이드 모두에서 사용할 수 있습니다. Realm 파일 포맷이 완전히 크로스 플랫폼이고 iOS와 안드로이드에서 손쉽게 접근할 수 있습니다. 디버깅을 위해 Realm Browser에서 .realm 파일들을 열 수 있습니다.

고급

Realm 객체는 항상 하부 데이터에 맞추어 최신 판으로 갱신합니다. 반응형 패턴이나 단일 데이터 흐름을 따르기 쉽습니다. Realm 객체를 그래프로 연결할 수 있고, LINQ를 통해 어떤 특성 조합을 질의할 수 있습니다. Realm 데이터를 Xamarin.Forms에 쉽게 통합할 수 있습니다.

신뢰

Realm Xamarin은 전세계 수억대에 사용되어 신뢰를 받는 Realm Java, Objective‑C, React Native, Swift와 같은 코어를 기반으로 합니다. e-커머스 애플리케이션, 은행, 핼스 케어 제공자, 심지어 정부에 의해서 사용하고 있습니다.

커뮤니티 주도

Realm Xamarin은 공개된 GitHub에 기반합니다. 기능들은 사용자 요청에 의해 우선순위를 정하며 오픈소스의 기여를 언제나 환영합니다.

지원

Realm은 다른 모든 것보다 지원과 버그 수정을 우선하고 있습니다. 데이타베이스에 관한 답을 그것을 만들고 유지보수하는 사람들에게 직접 들을 수 있습니다. 스택오버플로우, GitHub, 트위터로 질문해주세요.

테스트는 Realm, sqlite-net, Couchbase Lite의 마지막 버전을 사용하여 2016년 5월 9일에 실행하였습니다. 측정은 소스를 이용하여 아이폰 6S 플러스 128GB, iOS 9.3.1 버전에서 실시하였습니다. 만들어진 벤치마크는 항상 균일하지 못한 지표를 제공할 수 있기에 사용례에 맞는 벤치마크를 직접 작성해서 성능을 확인할 것을 추천합니다.

그 다음은?

향상점에 대한 피드백은 언제나 환영입니다. GitHub 리포지토리에 버그를 보고하는 것이나 기능을 요청하는 것은 특별히 관심이 있습니다. 몇주 사이에 API는 의미있게 향상될텐데요. 특히 마이그래이션과 질의의 고급 기능을 다듬고 있습니다.

만약 .NET 팬이고 UWP 지원유니티 지원을 원한다면 우리가 다음으로 추가할 거라고 자랑스럽게 알려드립니다.

여러분들이 Realm으로 무엇을 만들지 정말 기대됩니다!


Realm Team

Realm의 미션은 더 나은 앱을 빠르게 개발할 수 있도록 돕는 것입니다. 이를 위해 저희는 개발자들이 실시간 협업, 가상 현실, 라이브 데이터 동기화, 오프라인 경험, 메시징 등 정교하고 강력한 기능을 쉽게 개발할 수 있도록 하는 개발 도구와 플랫폼을 제공하고 있습니다.

저희는 모바일 인터넷이 수많은 사용자와 보다 많은 디바이스가 속한 개방형 네트워크와 이들 간의 실시간 상호 작용으로 진화할 것이라고 믿으며, 개발자가 이같은 방향으로 발전할 수 있도록 돕기 위해 저희 제품들을 개발하고 있습니다.

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