Rwt seoul 5 cover

좌충우돌 Realm 모바일 플랫폼 사용기

이번 Realm World Tour 2017 행사는 여러 도시에서 열리는 Realm 소개 행사로써, 한국에서는 서울과 부산에서 진행됐습니다. 실시간 데이터베이스와 오브젝트 서버를 포함하는 Realm 모바일 플랫폼으로 3일 만에 앱을 만들면서 경험한 것을 공유하는 게스트 스피커, 조성규 님의 세션입니다.


3일 만에 앱을 만들자. 어떤 앱?

Realm 모바일 플랫폼을 적용해서 만들 iOS 앱의 컨셉은 항상 쌓여 있는 할 일을 하나씩 차근차근 해결하는 것을 도와주는 할 일 관리 목록입니다. 할 일은 3일 안에 해결해야 성공하도록 했습니다.

이런 해야할 일 목록을 DB에 저장하기 위해 Realm Swift를 사용했습니다. 로그인하면 클라우드 동기화가 되도록 설계했으며, 로그인하지 않으면 로컬 DB를 사용하도록 했습니다.

앱 제작 영상

3일 동안 앱을 완성해가는 과정을 250배속으로 편집해서 짧은 동영상으로 만들었습니다. 동영상을 확인해 주세요. Realm을 설치하고, UI를 구성하고, 모델 클래스를 설정했으며, 추가 UI를 구성하면서 액션 버튼을 넣었습니다. 라이브러리를 통해 화면을 구성해서 입력폼을 만들고 지역화를 준비하며, 입력값 검증을 거치고 테이블뷰도 만들었습니다. 얼럿과 플로팅 버튼도 추가했습니다. 이런 과정을 거친 후 Realm에 쓰기 시작하면서 생성과 삽입 기능을 만들고 삭제와 업데이트 기능도 만들면서 Realm을 사용하면 데이터베이스에 얼마나 시간이 소비되는지 한 번 스스로 점검해봤습니다. 이렇게 로컬에 저장하는 버전을 만든 이후에는 Realm 모바일 플랫폼을 사용해서 서버를 설치했습니다. 사실 동영상 편집하는 시간을 빼면 한 이틀 정도 걸린 것 같습니다.

Realm을 사용하면서 느꼈던 점

저는 이번에 앱을 만들면서 처음 Realm을 접했고, 이렇게 처음 Realm을 접한 입장에서 느꼈던 점을 공유해보고 싶습니다.

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

Realm 모바일 데이터베이스의 좋았던 점

기존에 사용했던 데이터베이스와 비교하면 훨씬 편리하게 사용했지만, 프로그래머의 입장에서는 뭐든지 아주 편한 건 없겠죠? 그래서 다소 편하다고 평하겠습니다. 또한, Realm을 처음 사용한 사용자임에도 불구하고 로컬 DB를 구성하는 데 전체 프로젝트 제작 시간 동안 10%의 시간만이 소요됐습니다. 또한 서버와 동기화하는 기능도 Realm 모바일 플랫폼을 사용하는데 서버를 설치하고 트러블 슈팅을 하는 시간이 또 약 10% 정도가 소요됐습니다. 전체 시간 중의 70% 이상이 UI를 구성하는 데 들었습니다. 또한, 발 빠른 개발자 지원도 장점으로 생각됩니다. 중간에 제작 화면에도 보였겠지만 Realm 브라우저를 사용해서 쿼리 없이도 데이터베이스를 열어 볼 수 있었습니다.

Realm 오브젝트 서버의 좋았던 점

리눅스와 macOS에서 설치형으로 바로바로 활용해볼 수 있었고 설치가 정말 간편했습니다. 동기화까지 굉장히 빠르게 구현할 수 있었습니다. 또한 구글이나 페이스북, iCloud 인증 같은 부분도 편리해서 코드 몇 줄로 구현할 수 있었습니다. 역시 발 빠른 개발자 지원도 좋았고, 오브젝트 서버의 데이터 역시 Realm 브라우저를 사용해서 쿼리 없이도 열어 볼 수 있었습니다.

Realm 모바일 데이터베이스의 아쉬운 점

CocoaPods에서 받는 시간이 오래 걸렸고 용량이 컸으며, 빌드 시간이 길어진 것이 아쉬웠습니다. 마이그레이션 부분도 객체처럼 바로 쓸 수 있다고 생각했는데 실제로는 마이그레이션이 필요해서 귀찮은 부분이 있었습니다. 또한, 데이터의 변화를 바로 알 수 있지만 NotificationBlock을 활용하는 방식 대신 쓰기 트랜잭션 다음에 바로 클로저에서 콜백 핸들러를 만들었으면 보다 코드 분산을 막을 수 있었지 않을까 하고 아쉬웠습니다. 또한, 공식 예제코드가 편의를 위해 간단하게 제작돼 있는데, 물론 관점에 따라 다르겠지만 좀 더 실제로 쓸 수 있도록 예외 처리가 있으면 좋겠다는 생각이 들었습니다. 사용하면서도 예외가 발생하는데 스스로 해결할 수 있도록 에러 메시지에 대해 구조화된 문서가 필요하다고 생각했습니다. Realm 브라우저가 Mac에서만 작동하는 것도 좀 안타까웠습니다.

Realm 오브젝트 서버의 아쉬운 점

오류나 사용 방법, 동기화 충돌에 대한 문서가 더욱 구조화됐으면 좋겠다는 아쉬움이 있었습니다. 또한 Admin 페이지에서 Realm 데이터베이스를 확인하고 수정하려면 다시 Realm 브라우저를 사용해야 했는데, 통합되면 좋겠다고 생각했습니다. Swift 환경에서의 문제인지는 모르겠지만 Progress handler를 제공하기는 하지만 동기화 타이밍을 잡는 것이 좀 난해하다는 느낌이 있었습니다. 제가 부딪힌 가장 큰 문제는 로컬 Realm을 먼저 구성하고 이를 동기화 Realm으로 옮기는 과정이었습니다. 마지막으로 API를 만들고 싶었는데 유료 기능이라 아쉬웠습니다.

예상 구조와 실제 구조

rwt-seoul-5-architecture

처음에는 Realm이라는 모바일 플랫폼에 대해 왼쪽과 같이 클라이언트에서 Realm 파일이 생성되면 오브젝트 서버에도 사용자마다 Realm 파일을 하나씩 가지게 되는 구조를 생각했는데, 실제로 만들어보니 오른쪽과 같이 로컬 Realm이 남아 있고 동기화 Realm이 따로 구성됐습니다. Realm 오브젝트 서버에도 이렇게 로컬 Realm을 바로 동기화되지 않는다고 나와 있어서 하나하나 복사하느라 난항을 겪었습니다.

rwt-seoul-5-suggestion

사실 제가 생각하는 Realm 오브젝트 서버 사용 방식은 이런 모습입니다. API에 대한 요구가 있으니 고려해주시면 좋겠습니다. Partial Sync를 사용하면 오른쪽과 비슷한 구조가 될 것 같지만 클라이언트 상의 로직이 무거워질 것 같습니다.

결론

Realm을 사용해보니 생산성 향상은 정말 실감할 수 있었습니다. 쿼리를 쓰지 않는 것 자체가 좋다고 할 수는 없지만 쿼리없이 오브젝트 단위의 작업을 하는 것에 좋은 것 같습니다. 하지만 생각의 패러다임을 바꾸기는 쉽지 않아서 아직 쿼리를 쓸 수 있으면 좋겠다는 생각이 개인적으로 듭니다.

QnA

  • Q: 빌드 타임
  • A: Swift를 썼기 때문에 저희도 이슈를 열고 신경 쓰고 있습니다.

  • Q: Realm 브라우저 다른 플랫폼 지원
  • A: 현재 브라우저를 다시 만들고 있어서 곧 여러 플랫폼에서 만날 수 있지만, 당장 사용해보고 싶은 윈도우 사용자는 Stetho-Realm으로 크롬에서 확인할 수 있습니다.

  • Realm Addon에서 Realm 관련된 소스를 많이 볼 수 있습니다.
  • Node SDK를 사용해서 Realm을 저장소로 사용해서 만들 수 있는 시나리오는 Realm Node.js와 Express로 블로그 만들기 튜토리얼에서 볼 수 있습니다.
  • 가격 문제는 현재 On-promise이긴 하지만 내부적으로 지속적인 논의를 하고 있으니 많은 관심을 가져 주세요.

발표 슬라이드는 아래에서 볼 수 있습니다.


모바일 개발자가 더 나은 앱을 더 빠르게 만들도록 돕는 Realm 모바일 데이터베이스와 Realm 모바일 플랫폼을 통해 핵심 로직에 집중하고 개발 효율을 높여 보세요! 공식 문서에서 단 몇 분 만에 시작할 수 있습니다. 또한 Realm 홈페이지에서는 모바일 개발자를 위한 다양한 최신 기술 뉴스와 튜토리얼을 제공하고 있으니 즐겨찾기하고 자주 들러 주세요!

다음: Realm Mobile Platform으로 실시간 협업 기능과 확장이 가능한 리액티브 앱을 만들어 보세요.

General link arrow white

컨텐츠에 대하여

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

조성규

iOS 개발자이자 교육자로 활동하고 있습니다. Swift와 iOS 그리고 컴퓨터과학에 관심이 많습니다.

4 design patterns for a RESTless mobile integration »

close