[Android] RoomDB

·2022년 7월 19일

Android

목록 보기
1/4
  • 🌟 DataBase
    : 데이터를 쌓아두고 보관하며 필요할 때마다 추가하거나 조회, 수정, 삭제할 수 있는 장소
  • 🌟 SharedPrefernece
    : Key-Value 형태로 데이터를 저장하는 데이터 구조, 내부적으로는 XML 파일로 저장

SharedPrefernece는 DB인가 = No
= DB에 데이터를 저장한다기보다는 파일에 데이터를 저장하고, 그 파일에 접근해서 데이터를 얻어옴
모든 데이터를 SharedPreference에 넣어도 되는가 = No
= 파일에 데이터를 저장하면, 보안상 취약, 앱 메모리상 손해 발생(너무 많은 데이터를 SharedPreference에 저장하면 메모리 예외가 발생할 수 O)

▶️ 간단한 정보 저장 시 SharedPreference 사용, 클래스나 보안에 필요한 데이터는 DB 사용해서 저장

  • 🌟 서버 제공 데이터베이스

    • 네트워크 통신, 와이파이, 데이터가 없으면 접근 불가
    • 비교적 시간이 오래 걸림

  • 🌟 앱 내부 데이터베이스

    • 네트워크 연결 X여도 데이터 보여줄 수 O

    • 데이터 로딩 시간이 매우 빠름

    • ex) 데이터 캐싱 처리
      - 네트워크 연결 X여도 데이터를 보여줄 수 O
      - 로컬 데이터에 접근하기 때문에 서버에 비해 매우 빠름
      - 기기가 온라인 상태가 됐을 때 사용자가 시작한 콘텐츠 변경사항이 서버에 동기화됨
      ▶️ 이런 것들을 자동으로 해주는 것이 RoomDB

    • SQLite

      • RDBMS → 관계형 데이터베이스 관리 시스템
      • 매우 복잡함
      • 소규모 데이터를 관리하고 사용하는 데 적합

      ▶️ 공식 문서에서도 RoomDB 사용 적극 권장


💡 RoomDB

Entity

: 데이터베이스에 만들어줄 테이블을 뜻함
개체 → 객체는 정보뿐 아니라 동작, 기능 등을 포함하지만 정보만 가지고 있음
Entity

  • PrimaryKey : 테이블에 추가된 정보들, 각 행들을 구분할 수 있는 유일한 값

DAO (Data Access Objects)

: 데이터에 접근할 수 있는 메소드를 정의해놓은 인터페이스
DAO

Database

: 버전관리, 테이블 저장, DAO의 작업을 구체화하는 작업
Database


💡 DBMS의 종류

RDBMS

: 관계형 데이터베이스 관리 시스템

  • RDB를 관리하는 시스템, RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 DB
  • 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체
    • 테이블 간의 관계를 나타내기 위해 외래 키(foreign key)를 이용한 테이블 간 Join이 가능
  • 종류: Oracle, MySQL, SQLite

RDBMS의 특징

  1. RDBMS의 테이블은 서로 연관되어 있어 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다
  2. 정규화를 통해 데이터의 중복성을 최소화하며 트랜잭션을 수행하는 것이 쉽다
  3. 데이터의 원자성, 일관성, 격리 및 내구성을 유지하며 데이터 무결성을 높인다.

NoSQL (Not Only SQL)

: RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술

  • RDBMS와는 달리 테이블 간 관계를 정의 X
    • 데이터 테이블은 그냥 하나의 테이블이며 따라서 일반적으로 테이블 간 Join도 불가능
  • 빅데이터의 등장으로 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해서는 장비가 좋아야 하는 Scale-Up의 특징이 비용을 기하급수적으로 증가시키는 문제 발생
    • 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장
  • 종류: MongoDB, Cassandra, Redis

NoSQL의 특징

  1. RDBMS와 달리 데이터 간의 관계를 정의하지 않는다. RDBMS는 데이터 관계를 외래키 등으로 정의하고 JOIN 연산을 수행할 수 있지만, NoSQL은 JOIN 연산이 불가능하다.
  2. RDBMS에 비해 대용량의 데이터를 저장할 수 있다. 페타바이트 급의 대용량 데이터를 저장할 수 있다.
  3. 분산형 구조이다. 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 발생했을 때도 데이터 유실 혹은 서비스 중지가 발생하지 않도록 한다.
  4. 고정되지 않은 테이블 스키마를 갖는다. RDBMS와 달리 테이블의 스키마가 유동적이다. 데이터를 저장하는 칼럼이 각기 다른 이름과 다른 데이터 타입을 갖는 것이 허용된다.

RDBMS, NoSQL 언제 사용하는가❓

= RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합하다.

= NoSQL정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋다. 또한 단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 한다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합하다.


💡 sql 쿼리 문법

  • SQL (Strucured Query Language): 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어

  • 문법 작성 순서

    1. SELECT 컬럼명
    2. FROM 테이블명
    3. WHERE 조건식
    4. GROUP BY 컬럼명
    5. HAVING 조건식
    6. ORDER BY 컬럼명
  • 쿼리문

    1. SELECT - 데이터 추출
    2. FROM - 조회 테이블 확인
    3. WHERE - 데이터 추출 조건 확인
    4. GROUP BY - 컬럼 그룹화
    5. HAVING - 그룹화 조건
    6. ORDER BY - 데이터 순서 정렬


✔️ 참고 사이트
NoSQL이란 무엇인가? 개념, 특징과 장점
[Database] RDBMS와 NoSQL의 차이점
데이터베이스 기초 Query 문법

profile
깡통 채우기

0개의 댓글