• Home
  • About
    • Zzu-h photo

      Zzu-h

      주니어 Android 개발자입니다.

    • Learn More
    • Email
    • Instagram
    • Tistory
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

Android: RoomDB

05 May 2022

Reading time ~3 minutes

RoomDB

  • 기존에는 SQLite를 이용하여 데이터를 저장했다.
    • SQLite는 나중에 정리하도록 하자.
  • 하지만 Android에서는 다음의 이유로 Room DataBase를 권장하게 되었다.
    • SQLite는 쿼리에 대한 컴파일 타임을 확인할 수 없다.
    • 데이터 그래프가 변경됨에 따라 영향을 받는 SQL 쿼리를 수동으로 수정해야 함
    • SQLite는 데이터 객체를 변경하기 위해 많은 Boilerplate code를 사용해야 한다.

그래서 RoomDB는?

  • Android에서는 다음과 같이 설명한다.
    • SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLite에 추상화 계층을 제공합니다.
      • 더 견고한 데이터베이스 액세스를 가능하게 합니다.
  • 그에 대한 이점
    • 컴파일 도중 SQL에 대한 유효성 검사 가능
    • Schema가 변경될 시 자동으로 업데이트 가능
    • Java 데이터 객체를 변경하기 위해 상용구 코드 없이 ORM 라이브러리를 통해 매핑 가능
    • LiveData와 RX Java를 위한 Observation 생성 및 동작 가능

기본 구성 요소

  • Database Class
    • 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 합니다.
    • 데이터베이스와 연결된 DAO 객체를 앱에 제공한다.
  • Data Entity
    • 앱 데이터베이스의 테이블을 나타냅니다.
    • 앱이 DAO를 이용하여 DB 데이터를 Entity 객체로 데이터를 불러온다.
  • Data access objects(DAO)
    • 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공합니다.
    • CRUD 기능의 메서드 제공

RoomDB-architecture

DataBase의 종류

  1. 계층형 데이터베이스
    • 데이터의 관계를 트리 구조로 정의
      • 부모, 자식 형태를 갖는 구조
    • 데이터 중복의 문제가 발생할 수 있음
  2. 네트워크형 데이터베이스
    • 계층형 데이터의 중복문제를 해결
    • 레코드 간의 다양한 관계를 네트워크 형태로 갖는 구조
    • 복잡한 구조 형태
      • 구조 변경 시 매우 복잡함
  3. 관계형 데이터 베이스
    • Table 간의 관계를 나타냄
    • 현재 가장 많이 쓰이고 있는 형태
    • SQL을 사용하여 데이터 관리와 접근을 함
  4. NoSQL 데이터베이스
    • 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용
    • key-value 형태로 저장됨
    • 키를 사용하여 데이터 관리 및 접근을 함

DataBase-사용추세

  • 위와 같이 현재 상당수가 RDBMS를 사용하고 그에 뒤따라 NoSQL이 치고 올라오고 있다.
  • 따라서, RDBMS와 NoSQL을 중점으로 비교해보자.

RDBMS vs NoSQL

  • RDBMS
    • 관계형 모델을 기반으로 하는 DataBase 관리 시스템
    • 현재 대부분의 데이터베이스가 이 모델을 기반으로 함
    • DBMS 종류
      • Oracle
      • MS-SQL
      • MySQL
      • PostgreSQL
      • SQLite 등..
    • 장점
      • 다양한 용도로 사용이 가능
      • 일반적으로 높은 성능을 보여줌
      • 데이터의 일관성을 보증
      • 정규화에 따라 갱신 비용이 최소화될 수 있음
    • 단점
      • 대량의 데이터 입력 처리
      • 갱신이 발생한 테이블의 인덱스 생성 및 스키마 변경
      • 컬럼 확장의 어려움
  • NoSQL
    • 관계형 데이터 베이스가 아닌 다른 형태의 저장 기술
    • 데이터 테이블은 하나의 테이블
      • 테이블 간의 관계를 정의하지 않음
      • 일반적으로 Join이 불가능
    • 빅데이터의 등장으로 데이터, 트래픽이 기하급수적으로 증가
      • 일관성을 포기하고 비용을 고려
      • 여러 대의 데이터에 분산하여 저장하는 목표로 NoSQL이 급부상 중
    • DBMS 종류
      • MongoDB
      • Redis
      • Riak
      • HBase
    • 장점
      • 대용량 데이터
      • 데이터 분산처리
      • Cloud Computing
      • 빠른 읽기/쓰기 속도
      • 유연한 데이터 모델링
    • 단점
      • 데이터 일관성
      • key값에 대한 입출력만 지원
      • 데이터에 대한 규격화가 되어있지 않음
      • Update의 경우 모든 컬렉션에서 수행해야 하므로 느림

워커 스레드, 코루틴 차이점

  • 스레드에는 2가지의 종류가 있다.
    • Main Thread
      • UI 작업을 할 수 있는 스레드
    • Worker Thread
      • UI 작업 외에 일을 할 수 있는 스레드
  • 그렇다면 스레드를 왜 Main Thread에서만 UI를 변경할 수 있을까?
    • 화면에 그려지는 View는 하나의 객체이다.
    • 메모리 상에 존재하는 단 하나의 객체에 여러 스레드가 접근을 하게되면
      • 너도나도 데이터를 변경하게 된다.
      • 이는 데이터 불일치를 야기하기도 하며, 더 크게 예외 상황에 부딪힐 것이다.
    • 이러한 이유로 Main Thread에서만 UI를 변경할 수 있도록 막았고
      • Worker Thread에서 변경하고자 시도하면 예외를 던지게 된다.
  • 스레드와 코루틴의 차이는 이미 정리했으니 그 링크를 달아두겠다.

SQL 쿼리문법

과거 DB 공부를 했던 자료를 참고하여 다시보자.

실제로 모든 데이터를 캐싱처리 하려면 어떻게 해야할까?

  • ERD 설계


UMCRoomDBDataBaseAndroid Share Tweet +1