Realm World Tour

수요일 Realm 월드 투어 서울을 다녀왔습니다.

온오프믹스에서 발견하고 신청했으나 인원이 이미 가득 차서 대기자로 예약했습니다.
그런데! 컨퍼런스 당일 참가자로 변경이 됐다는 메일을 받았습니다.

원래 그날 아는 형님과 만나기로 약속이 있어서, 그 형님께 양해를 구해서 약속도 취소하고 컨퍼런스 장소로 부랴부랴 갔습니다.


이번 세미나는 Realm에 대한 소개도 외에도 코드리뷰 같은 부분도 있었습니다. 하지만 그런 부분은 사실 구체적으로 받아 적기가 어려우니 이런 걸 했구나~ 하고 가볍게 봐주셨으면 좋겠습니다.

Realm 월드 투어 - 서울은 네이버 D2 컨퍼런스장에서 진행되었습니다.

작년 Redux 때와 같은 곳이라 낯설지 않네요.

간식은 작년과 같이 Joe's Sandwich. 맛있네요

Realm 1부 - Minwoo Park

한국에는 세 분의 Realm 개발자가 있다고 하며, 이번 세미나는 이분들 외에도 지원오신 두 분의 발표가 이어졌습니다.

Realm이란


Realm에 대해서 설명을 시작하기 전에 모바일 데이터베이스의 역사부터 알아보겠습니다.
모바일 데이터베이스는 2010년 SQLite가 처음으로 나왔습니다.
처음에는 미 해군에서 미사일 관련분야에서 사용하려고 개발되었다고 합니다.

그 후 여러가지 모바일 데이터베이스가 등장했고 Realm은 2014년 7월 15일 iOS버전이 최초로 공개되었습니다.


Realm을 사용하는 대표적인 회사

Realm은 오픈소스

Realm은 오픈소스입니다.

github 바로가기

Core는 c++로 되어있으며 여러 언어로 사용할 수 있도록 지원하고 있습니다.

활용하는 이유

  • 쓰기 쉽다.

  • 동작속도가 빠르다

  • 다양한 기능을 제공한다.

  • 오픈소스이면서 무료이다.(라이센스도)

SQLite 사용 중 데이터가 커지면 병목현상이 생기는 경우도 있으나 Realm은 동일한 경우에도 10배 빠르다고 합니다.
(공식적인 벤치마크 결과)

Notification등의 다양한 기능을 제공합니다.

Realm의 모토는 Build better mobile apps, faster
위에서 말한 Realm을 활용하는 이유와 밀접해 있는 부분이 많습니다.

RestAPI사용 시 발생하는 다양한 문제들을 간단하게 해줍니다.

Realm 데모들

github 바로가기

Realm Draw

Realm Pop

Realm Scanner

Realm Chat

이외에도 많은 데모가 있습니다.

그런 코드들은 Github을 통해서 전부 공개되어있습니다.

Realm의 전체 직원은 60명정도 입니다. 현재 Realm은 10억개 이상의 디바이스에서 사용되고 있습니다.

다양한 IT등의 정보를 제공한다.

Realm은 다양한 IT 정보를 제공합니다.
공식 홈페이지의 News 페이지는 Realm에 관련된 글 외에도 여러 기술적인 글들이 있습니다.

이메일로 받을 수 있게 구독할 수도 있으니 참고하세요.

Realm news 바로가기

2부 Introducing Realm - Eunjoo im

굉장히 많이 떠시던 발표자 였습니다.
그도 그럴것이 나오기도 전에 주변에서 "저분 전에 봤는데 엄청 떠시더라" 이런말들이 들려오더라구요.
듣고나서 드는 생각은 그래서 더 재밌는 시간이 아니었나 싶습니다 :)
(사진도 찍었는데 기묘하게 파일이 깨져버렸네요..대체..?)

Realm 은 C++기반의 크로스 플랫폼입니다.
SQLite 기반이 아닙니다.
Live Object이기 때문에 새로고침하지 않아도 객체가 항상 최신상태입니다.
쉽게 Reactive Programming이 가능하게 해줍니다.

아래는 Objects 생성, Queries 작성, Notifications 이용, Transactions 설정을 통해서 어떻게 Realm을 사용하는지 소스코드와 함께 간단하게 알아 보겠습니다.

1. Objects

Realm에서 제공하는 기본 오브젝트를 상속받아 확장시키면 쉽게 사용할 수 있습니다.
아래 Java 코드를 봅시다.

public class Dog extends RealmObject {
    private int age;
    private Person owner;
}

Realm클래스를 상속받아서 일반 클래스 객체처럼 사용 할 수 있습니다.

2. Queries

그후 Queries를 통해서 컬렉션을 만듭니다.
작성한 Dog Class의 age가 2보다 적은 데이터를 가져옵니다.

RealmResults<Dog> puppies = realm.where(Dog.class).lessThan("age",2).findAll();

3. Notifications

알람을 설정합니다.
서버쪽에서 데이터가 변경 됐을 때, 알람을 보내줌으로써 Reactive한 데이터베이스의 사용이 가능합니다.
아래 소스는 Listener에서 변경이 감지되면 updateUI 메서드를 호출해줍니다.

puppies.addChangeListener(
    new RealmChangeListener<RealmResults<Dog>>(){
        @Override
        public void onChange(RealmResults<Dog> puppies){
            updateUI(puppies);
        }
    }
)

4. Transactions

쓰기 할 때만 트랜잭션이 발생합니다.
트랜잭션이 발생하면 copyToRealm을 사용하여 Realm에 객체를 복사합니다.

realm.excuteTransaction(new Realm.Transaction(){
    @Override
    public void execute(Realm r){
        Person me = new Person("me");
        r.copyToRealm(me)
        dog.setOwner(me);
    }
})

위까지는 Realm Object Server에 대한 설명이었습니다.

하지만 지금은 Reactive한 앱을 원하는 추세이기 때문에 실시간 앱을 위한 데이터 동기화와 협업 기능을 제공하는 제품이 나왔습니다.

Realm Mobile Platform

Realm Object Server를 사용해서 복잡한 처리들을 고민 없이 해줍니다.

Realm 모바일 플랫폼 바로가기

3부 Scanner, RealmPoP으로 RMP 따라잡기 - Leonardo YongUk Kim

김용욱 개발자님의 발표 시간입니다. (역시 초고수..님..)

지난 Redux 세미나나 다른세미나에서 혹인 온라인에 올리신 글로 많이 보셨던 분이라 왠지 모를 친숙함이 느껴지네요

헤어스타일이 많이 달라지셔서 처음에는 몰라 봤습니다.

셀피도 한장 찍고..

퇴근하자마자 가서 그런지 둘 다 매우 피곤해 보이네요.

앱 소개 (Scanner)

Realm Scanner

Scanner를 사용하면 IBM 왓슨을 이용해서 이게 무엇인지 찾아줍니다.

Realm 오브젝트 서버에서 이벤트 핸들링으로 Watson에 접근하고 그 결과를 이벤트 핸들러로 받아서 Object server에 업데이트 그후 ui를 갱신합니다.

Realm Pop

Realm Pop

Node.js + Realm Documents

Realm 모바일 플랫폼을 사용하면 데이터에 대한 rest를 염려할 필요없이 로컬 데이터베이스를 쓰듯이 사용하면 동기화가 이루어집니다.

이게 Realm Mobile Platform에서 가장 특이하고 혁신적인 점입니다.

Sacnner App Tutorial

4부 좌충우돌 Realm 사용기 - 조성규

할 일 목록을 만들면서 Realm을 어떻게 사용했는가에 대해 발표해주셨습니다.

역시 경험이 많으신 분이라 그런지 여유가 느껴지는 발표였네요.

3일간 직접 To-do List를 만들고 데이터베이스로 Realm을 처음 쓰면서 알게 된 장단점을 설명했습니다.

Realm을 처음 사용하고 느낀 장단점이라 직관적이고 쉽게 이해되는 세션이었습니다.

5부 Welcome to the Real Reactive World - Sangjoon Moon

발표는 LINQ나 Rx로 유명한 에릭마이어의 사진으로 시작했습니다.

그분의 말을 인용한 말로 시작되었습니다.
정리해보면 대략...

사용자가 요청할 때 데이터를 전달하는 방식(Pull Driven)보다는
상태변화가 생길 때 클라이언트나 서비스로 알려주는 방식(Push Driven)을 최근에는 선호하는 추세다.

Reactive 프로그래밍 컨셉을 간단하게 표현한 문장이라는 생각이 듭니다.

그 외에도 많은 이야기가 있었습니다만 제대로 정리하지 못했네요 .. .


나눠준 소개장도 한번 찍어봤습니다.

간단한 그림과 함께 Realm의 특징을 살펴볼 수 있습니다.

마치며

발표 관련된 사항이나 Realm에 대해서 아래 주소를 통해서 보실 수 있습니다.

Realm Korea Facebook
Realm World Tour Seoul

김용욱님이 올리신 Node.js로 구현한 간단한 blog 예제를 보니, 앞으로 작업 할 개인 프로젝트에도 한 번 적용해봐야겠다는 생각이 듭니다.