3편. 임베디드 데이터베이스 설치

byron1st·2021년 10월 10일

모바일 앱도 데이터베이스가 필요하다. 언제나 서버와 연결되어있는 웹앱과 다르게(PWA 제외), 모바일 앱은 기본적으로 오프라인 상황에 대한 고려가 필요하다. 그리고 아무리 주요 데이터들을 서버에 의존하는 앱이라 하더라도, 기본적인 사용자 설정, 앱 상태 등에 대한 저장은 필수적이다. 이러한 내용을 파일에 쓰거나 코드에 하드코딩으로 때려박을게 아닌 이상, 어떤 형태로든 데이터베이스가 필요하다.

React Native 에서 쓸 수 있는 임베디드 데이터베이스는 보통 아래의 것들이 있다:

  • AsyncStorage
  • Realm
  • SQLite

참고로 난 AsyncStorage 는 기본으로 사용하고, 메인 데이터베이스로는 다음과 같은 이유로 Realm 을 선택했다.

  • Realm 은 CRUD 에 있어서 JavaScript 함수를 제공하여 ORM처럼 사용할 수 있다. (난 SQL을 잘 모르고, 좋아하지도 않는다.)
  • Realm 의 문서가 매우 훌륭하다.
  • SQLite 의 경우 expo-sqlite가 가장 좋은 선택으로 보이는데, 이마저도 Realm의 React Native SDK에 비해 문서와 기능이 부족하다.

AsyncStorage

AsyncStorage는 원래 React Native의 일부였었을 정도로 React Native만을 위한 간단한 Key-Value 데이터베이스다. API도 무척 단순한데, getItem, setItem, removeItem 정도가 전부일 정도다 (물론 몇가지 함수가 더 있긴한데 큰 의미는 없다).

함수 리스트에서도 알 수 있듯이, AsyncStorage 는 인덱싱, 조건에 따른 쿼리 등이 불가능하다. 오직 특정 Key 에 대해 읽고, 쓰고, 지우는 것만 가능하다. 그렇기 때문에 간단한 사용자 설정 등을 저장하는데 딱이지만, 그 이상의 무언가를 하기는 좀 어렵다.

하지만 어찌되었든, AsyncStorage 는 무조건 함께한다고 가정하고 접근하자. 아무리 다른 데이터베이스가 있다 하더라도 AsyncStorage 는 사용자 설정, 앱 상태 등 간단한 정보를 저장하기에 아주 빠르고 가볍고 간편한 솔루션이기 때문에 같이 쓰기 마련이다.

참고로 AsyncStorage는 SQLite 위에 개발된 것으로 보이는데 정확하지는 않다.

AsyncStorage는 여느 React Native 라이브러리들과 마찬가지로, npm 설치 후 npx pod-install 을 통해 설치가 완료된다. 안드로이드는 npm 설치 이외에 별도의 설정을 해줄 필요는 없다.

yarn add @react-native-async-storage/async-storage

Realm

Realm DB는 꽤 오랜 기간 모바일 전용 데이터베이스로 개발된 임베디드 데이터베이스이다. 이후 서버용 버전과 함께 실시간으로 데이터를 동기화시켜주는 서비스를 제공하였고, 최근에 MongoDB에 인수되어, MongoDB의 Atlas 시스템의 일부가 된 것으로 보인다. 별개로 모바일용 임베디드 데이터베이스로써 Realm 은 여전히 잘 개발되고 있고, 무료이다.

Realm 은 RDBMS 이고, MongoDB나 AsyncStorage 와 다르게 Schema 가 고정된 데이터베이스이다. React Native 전용 SDK도 갖고 있고, 문서화도 무척 훌륭한 편이기 때문에 사용하기에 편리하다. 그리고 무엇보다 SQLite 3보다 더 빠른 속도를 갖고 있다.

Realm 의 설치는 공식 홈페이지의 가이드를 참고하자. 사실 설치 자체는 여느 React Native 라이브러리와 동일하다. 1) yarn add realm으로 라이브러리 다운받고, 2) npx pod-install 을 수행해준다.

설치가 완료되면, 아래 코드와 같이 Realm 타입의 객체를 만들어서 사용해주면 된다. 참고로, realm 은 TypeScript 를 기본으로 지원한다.

import Realm from 'realm'

const realm = new Realm({ schema: [SchemaObject...] })

realm.write(...)

자 이제 마지막으로 디자인 요소들, 즉, 커스텀 폰트와 아이콘을 추가해보자.

profile
Fullstack software engineer specialized for Blockchain

0개의 댓글