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

byron1st·2021년 10월 10일
0

모바일 앱도 데이터베이스가 필요하다. 언제나 서버와 연결되어있는 웹앱과 다르게(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개의 댓글