Realm Blog

Realm 리액트 네이티브를 소개합니다

이 글은 2016년 2월에 Realm 리액트 네이티브 출시를 알린 글입니다. 이후 많은 기능이 업데이트되었으니 최신 글을 공식 문서에서 확인하세요.

오늘 페이스북 React.js 컨퍼런스에서, React Native(리액트 네이티브)를 위한 새로운 Realm 모바일 데이터베이스를 공개합니다. 쉬운 객체 모델을 제공하며 모든 쿼리 기능을 제공하고 현재 있는 옵션보다 2배~10배 빠른 속도를 보입니다.

Realm의 다른 버전들 처럼 reactive 앱 개발을 위한 라이브 오브젝트, 변경 이벤트단방향 데이터 흐름 를 지원하기 위해 처음부터 새로 구현되었습니다.

사용하기 위한 코드는 아래와 같습니다:

const Realm = require('realm');

class Person {}
Person.schema = {
    name: 'Person',
    primaryKey: 'name',
    properties: {
        name: 'string',
        age: {type: 'int', default: 0},
    },
};

const realm = new Realm({schema: [Person]});

// Query
let people = realm.objects('Person', 'age >= 17');
people.size // => 0

// Write
realm.write(() => {
    savedPerson = realm.create('Person', {
        name: 'Hal Incandenza',
        age: 17,
    });
});

// Queries are updated in real-time
people.size // => 1

Realm 은 더 나은 모바일 앱 개발이라는 목표를 위해서 처음부터 새로 구현된 스마트폰, 태블릿, 웨어러블을 위한 데이터베이스 입니다. Realm은 Java와 Objective-C, Swift 버전을 2014년에 발표하였고 현재 수억개의 디바이스에서 사용되고 있으며 스타벅스, 시스코, 월마트, 구글, 아마존이나 이베이를 포함한 수많은 회사에서 사용하고 있습니다.

오늘, 우리는 개발자들이 자바스크립트로 네이티브 앱을 개발할 수 있도록 해주는 페이스북의 자바스크립트 프레임웍인 React Native(리액트 네이티브)를 위한 지원을 발표합니다. (참고: Realm은 현재 리액드 네이티브 만을 지원합니다. React 프레임웍을 지원하는 것은 아닙니다. 현재 우리는 모바일을 우선으로 지원하고있습니다!)

Realm 리액트 네이티브 는 Realm에서 기대했던 모던한 디자인과 간결함을 유지하는 것은 물론 하나의 코드베이스로 iOS와 안드로이드 앱을 동시에 개발할 수 있게 해줍니다. 오늘 공개하기는 하지만 Realm 리액트 네이비트는 이미 2개월 이상 태스크래빗 이라는 커다란 앱에서 사용되고 있습니다!

Realm 소개

Realm 은 ORM이 아니며 SQLite를 사용한 데이터베이스도 아닙니다. 대신 우리는 모바일 앱 개발자를 위한 전체 데이타베이스를 만들었습니다. 이는 (단순한 키 밸류 저장소가 아니라) 자바스크립트 객체에서 동적으로 매핑되는 전체적이고, 커스텀화된 데이타베이스 엔진입니다. 성능을 유지하며 단순한 API를 제공할 수 있게 만들었습니다. Realm을 쓰면 복잡한 데이터를 모델링할 수 있고, 객체를 그래프로 연결하고, 상급의 질의로 조합할 수 있습니다.

class Dog {}
Dog.schema = {
    name: 'Dog',
    properties: {
        name: 'string',
        age: 'int',
    }
};

let realm = new Realm({schema: [Dog]});

realm.write(() => {
    realm.create('Dog', { name: 'Rex', age: 3 });
});
// 기본 질의
let r = realm.objects('Dog').filtered('age < 8');

// 연쇄적인 질의가 가능합니다
let r2 = r.filtered('name contains "Rex"');
r2.size // => 1

realm.write(() => {
    realm.create('Dog', { name: 'Rex Maximus', age: 4 });
});

// 질의는 실시간으로 갱신됩니다
r2.size // => 2
class Person {}
Person.schema = {
    name: 'string',
    dogs: {type: 'list', objectType: 'Dog'},
};

let realm = new Realm({schema: [Dog, Person]});

realm.write(() => {
    let person = realm.create('Person', {
        name: 'Tim',
        dogs: [{name: 'rex', age: 3}],
    });
});

이 API를 사용하는 더 많은 예제는 리액트 예제 앱과 JS 테스트 파일에서 볼 수 있습니다.

왜 Realm을 써야 하나요?

쉬움

Realm은 쉽게 사용할 수 있는데 우선적으로 신경쓰고 있으며 위의 샘플에서 보듯 Realm 리액트 네이티브도 같습니다. 우리 제품에 대해 알려진 이점들은 여기에도 동일하게 적용됩니다.

빠름

Realm을 쉽게 하기 위해서 성능을 희생하지 않습니다. Realm은 풍부한 오브젝트 기반의 API를 제공하지만 메모리 매핑 때핑, 지연 로딩, 커스텀 저장 엔진을 사용하여 SQLite나 AsyncStorage보다 빠릅니다. 각자의 사용례에 맞추어 먼저 테스트하는 것을 추천드립니다만 많은 경우 Realm으로 포팅하는 것은 꽤 높은 성능 향상으로 이어진다는 것을 알려드립니다. 아래 벤치마크 결과를 살펴보세요.

크로스 플랫폼

Realm 리액트 네이티브의 API는 자바스크립트로 앱을 한번만 작성해서 iOS와 안드로이드 모두 지원할 수 있습니다. Realm 파일 포맷은 완전히 크로스 플랫폼이고 데이터는 iOS와 안드로이드에서 공유할 수 있습니다. 디버깅을 위해서 .realm 파일들을 Realm Browser에서 열 수 있습니다.

향상

Realm 객체는 하부 데이터에 맞춰 항상 갱신됩니다. 이런 특징은 리액티브 패턴이나 단방향 데이터 흐름을 따라가기 쉽게 합니다. Realm 객체를 쉽게 그래프로 연결할 수 있습니다. 표현력있는 질의 언어는 어떤 복합적인 프로퍼티도 질의할 수 있게 합니다. 리액트 네이티브 리스트뷰에 Realm 데이터native-listview).

신뢰

Realm 리액트 네이티브는 Realm 자바, 오브젝티브 C, 스위프트와 같은 코어를 기반으로 하고 있습니다. 전세계 수억의 사람들이 이미 사용한 신뢰성 있는 코어입니다. 이커머스, 은행, 건강 관리, 심지어 정부 앱에서도 사용됩니다. Realm 리액트 네이티브 자체도 TaskRabbit이 2015년 12월 부터 실 제품에 사용하고 있습니다.

커뮤니티 주도

Realm 리액트 네이티브는 깃헙에 열려 있습니다. 기능은 사용자의 요청에 의해 우선 순위가 결정됩니다. 기여는 언제나 환영합니다.

지원

Realm은 지원과 버그 수정을 다른 모든 것보다 더 중요하게 대합니다. 사람들이 작성하고 유지하는 데이타베이스 스택오버플로우와 깃헙](https://github.com/realm/realm-js/issues), 트위터에서 답을 얻을 수 있습니다.

테스트는 현재 최신 Realm 버전, SQLite를 위한 React Native SQLite 저장소, AsyncStorage를 위한 React Native Store으로 진행하였습니다. 측정은 iOS 9.2.1의 아이폰 6s와 안드로이드 5.0.1이 도는 넥서스 9에서 수행되었습니다. 소스를 확인하세요.

새로운 소식

오늘 릴리스된 Realm 리액트 네이티브는 Realm 자바, 오브젝티브 C, 스위프트가 현재 제공하는 것에 비해서는 부족합니다. 하지만 TaskRabbit와 같은 앱 제작사가 실 제품에 믿고 쓸만큼 신뢰도는 확보되었습니다. 향상을 위한 피드백은 언제나 환영합니다. 깃헙을 통해 버그 보고나 기능 요청을 해주셔도 좋습니다. API는 몇주 후 눈에 띄게 향상될 것입니다. 특히 마이그레이션과 질의는 더 좋아집니다.

만약 여러분이 자바스크립트 팬인데 리액트 네이티브가 여러분의 플랫폼에 돌지 않는 경우를 위해 우리는 코도바, 폰갭, 아이오닉 지원을 계획하고 있습니다. 그리고 Node.js (V8) 호환도 할 예정입니다.

우리는 여러분들이 Realm을 사용해서 무엇을 만들지 정말 궁금합니다!

TaskRabbit와 리액트 네이티브 팀의 지원에 정말 감사합니다. Realm 리액트 네이티브는 그들의 도움으로 훨씬 좋아졌습니다. React Conf 2016에서 런치할 수 있어 영광입니다!

</div> </div>


Realm Team

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

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

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