Realm Blog

Realm Java 0.85 — 새로운 암호화 구현!

Realm Java 의 새 버전이 공개 되어 이 웹사이트와 Maven에서 다운 받으실 수 있습니다. 이 새 버전에서는 시그널 핸들러에 기반한 암호화 구현을 걷어내고 일반적인 방법으로 새로 구현하여 더 많은 디바이스에서 암호화가 안정적으로 동작하도록 하였습니다. 또한 새로운 API인 Realm.isEmpty()가 추가되었습니다.

새로운 암호화 구현

“Realm의 Core DB 엔진” 라는 글에서 말한 바와같이 우리는 Realm의 암호화 구현을 위해 POSIX 시그널 핸들러 를 사용하고 있엇습니다. 이 방법은 SW관점에서 매우 간단하고 훌륭한 구현 방법입니다. 하지만 현실의 안드로이드 세상에 적용했을 때에는 시그널 핸들러가 일부 이상한 크래시를 일으키는 원인이 됩니다.

  • 안드로이드 5.0 롤리팝 부터, 안드로이드는 플레이스토어를 통해 설치와 업데이트를 할 수 있는 Chromium WebView를 포함시켰습니다. 하지만 WebView v40에 버그가 있어서, 암호화된 Realm과 같이 사용되면 크래시가 발생하는 경우가 있었습니다. 더 자세한 사항은 여기에서 확인하실 수 있습니다.
  • 일부 오래된 기기들 (예를 들어, HTC One X 등)에서는 시그널 핸들러가 정상적으로 구현되어있지 않습니다. HTC One X에서 발생하는 문제는 Firefox for Android 에서도 발견이 되었습니다. 자세한 사항은 이 Bugzilla 페이지를 확인해 보십시오

암호화를 다양한 기기에서 동작할 수 있도록 다양한 시도를 했음에도 불구하고, HTC One X 등과 같이 API가 망가진 기기에서 시그널 핸들러를 사용한다는 것은 불가능한 일이었습니다. 그래서 이 버전에서는 우리의 암호화 구현을 완전히 새로 작성하였습니다. 이 버전(v0.85.0) 부터는 Realm의 암호화가 모든 안드로이드 기기에서 동작합니다!

이제 RealmEncryptionNotSupportedException 을 catch 하는 부분을 제거하고 Realm이 모든 안드로이드 기기에서 동작하게 하시면 됩니다.

새로 추가된 API - Realm.isEmpty()

Realm.isEmpty()를 사용하여 Realm이 비어있는지 아닌지 확인하실 수 있습니다.

호환성 주의사항

RealmEncryptionNotSupportedException 는 더이상 필요하지 않기 때문에 제거되었습니다. 🎉

Realm.executeTransaction()RealmException으로 감싸서 exception을 던지던 것이 이제 RuntimeException을 직접 던져 줍니다. 만약 Realm.executeTransaction()을 사용한 트랜잭션 블럭에서 무슨 문제가 있다면, 원래의 exception이 던져지게 되어 더 쉽게 디버깅 할 수 있게 됩니다. 예전과 같이 exception이 발생하면 트랜잭션은 rollback 되게 됩니다.

필드명이 관계가 있는 필드이고 마지막 element 가 링크라면, RealmQuery.isNull()RealmQuery.isNotNull()은 이제 RealmError 대신에 IllegalArgumentException을 던지게 됩니다.


Realm Team

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

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

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