RoomDB
- 기존에는 SQLite를 이용하여 데이터를 저장했다.
- SQLite는 나중에 정리하도록 하자.
- 하지만 Android에서는 다음의 이유로 Room DataBase를 권장하게 되었다.
- SQLite는 쿼리에 대한 컴파일 타임을 확인할 수 없다.
- 데이터 그래프가 변경됨에 따라 영향을 받는 SQL 쿼리를 수동으로 수정해야 함
- SQLite는 데이터 객체를 변경하기 위해 많은 Boilerplate code를 사용해야 한다.
그래서 RoomDB는?
- Android에서는 다음과 같이 설명한다.
- SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLite에 추상화 계층을 제공합니다.
- 더 견고한 데이터베이스 액세스를 가능하게 합니다.
- SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLite에 추상화 계층을 제공합니다.
- 그에 대한 이점
- 컴파일 도중 SQL에 대한 유효성 검사 가능
- Schema가 변경될 시 자동으로 업데이트 가능
- Java 데이터 객체를 변경하기 위해 상용구 코드 없이 ORM 라이브러리를 통해 매핑 가능
- LiveData와 RX Java를 위한 Observation 생성 및 동작 가능
기본 구성 요소
- Database Class
- 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 합니다.
- 데이터베이스와 연결된 DAO 객체를 앱에 제공한다.
- Data Entity
- 앱 데이터베이스의 테이블을 나타냅니다.
- 앱이 DAO를 이용하여 DB 데이터를 Entity 객체로 데이터를 불러온다.
- Data access objects(DAO)
- 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공합니다.
- CRUD 기능의 메서드 제공
DataBase의 종류
- 계층형 데이터베이스
- 데이터의 관계를 트리 구조로 정의
- 부모, 자식 형태를 갖는 구조
- 데이터 중복의 문제가 발생할 수 있음
- 데이터의 관계를 트리 구조로 정의
- 네트워크형 데이터베이스
- 계층형 데이터의 중복문제를 해결
- 레코드 간의 다양한 관계를 네트워크 형태로 갖는 구조
- 복잡한 구조 형태
- 구조 변경 시 매우 복잡함
- 관계형 데이터 베이스
- Table 간의 관계를 나타냄
- 현재 가장 많이 쓰이고 있는 형태
- SQL을 사용하여 데이터 관리와 접근을 함
- NoSQL 데이터베이스
- 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용
- key-value 형태로 저장됨
- 키를 사용하여 데이터 관리 및 접근을 함
- 위와 같이 현재 상당수가 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
- 그렇다면 스레드를 왜 Main Thread에서만 UI를 변경할 수 있을까?
- 화면에 그려지는 View는 하나의 객체이다.
- 메모리 상에 존재하는 단 하나의 객체에 여러 스레드가 접근을 하게되면
- 너도나도 데이터를 변경하게 된다.
- 이는 데이터 불일치를 야기하기도 하며, 더 크게 예외 상황에 부딪힐 것이다.
- 이러한 이유로 Main Thread에서만 UI를 변경할 수 있도록 막았고
- Worker Thread에서 변경하고자 시도하면 예외를 던지게 된다.
- 스레드와 코루틴의 차이는 이미 정리했으니 그 링크를 달아두겠다.
SQL 쿼리문법
과거 DB 공부를 했던 자료를 참고하여 다시보자.