ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 런치박스 개발일지 : jetpack RoomDatabase
    카테고리 없음 2022. 3. 27. 19:54

    RoomDatabase의 등장 배경

     

    RoomDatabase의 장점

    • SQL 쿼리의 컴파일 시간 확인
    • 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석
    • 간소화된 데이터베이스 이전 경로

     

    기본 구성요소

    Room에는 3가지의 주요 구성요소가 있습니다

    1. 데이터베이스 클래스 : 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 엑세스 포인트 역할을 합니다.

    2. 데이터 항목 : 앱 데이터베이스의 테이블을 나타냅니다

    3. 데이터 엑세스 객체 ( DAO ) : 앱이 데이터 베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는데 사용할 수 있는 메서드를 제공합니다.

    Android 공식 문서

     

    싱글톤 디자인 패턴을 따라야한다고 하는데,

    싱글톤 디자인 패턴이란? (참고자료)

    -> 객체의 인스턴스가 오직 1개만 생성되는 패턴

     

    1. 메모리 절약

    최초 한번 고정된 메모리 영역을 사용하기 때문에 추후 여러번 해당 객체에 접근하더라도 메모리 낭비를 방지할 수 있다

    뿐만 아니라 이미 생성된 인스턴스를 활용하기 떄문에 속도 측면에서 이점도 있음 

     

    2. 데이터 공유가 쉽다

    전역으로 사용되는 인스턴스이기 때문에, 다른 클래스의 인스턴스들이 접근하여 사용할 수 있다.

    여러 클래스의 인스턴스에서 싱글톤 인스턴스의 데이터에 동시에 접근하게 되면

    동시성 문제가 발생할수 있으니 이점을 유의해서 설계해야한다

     

    ** 동시성 문제란 ? (참고자료)

    더보기

    동시성의 사전적 의미 : 하나의 CPU 코어에서 시간분할을 통하여 여러 일을 처리하는 것 처럼 보여지게 하는 기법

    대중적 의미 : 여러 요청이 동시에 동일한 자원에 접근하고 수정하려는 것

     

    -> 동시성문제의 예시 

    : 데이터를 수정하고 저장하는 동시에, 다른 곳에서 해당 데이터를 수정하여 예상하지 않은 결과가 나오는 경우

     

    1. 비관적 방법

    현재 수정하려는 데이터가 언제든 다른 요청에 의해 수정될 가능성을 고려하여 해당 데이터에 LOCK을 거는 방식

    장점 : 무결성을 완벽하게 지킬 수 있음 ( 다른 요청에서 수정하는 것이 불가능 하기 때문에 )

    단점 : 이후 다른 요청은 대기 상태로 빠지게 된다.

    -> 서버의 성능에 따라 처리량 결정됨

     

    2. 낙관적 방법

    테이블에 별도의 컬럼을 마련하고, 데이터가 수정되는 경우 해당 컬럼의 값을 계속 업데이트 함

    장점 : 구현이 비교적 쉽다.

    단점 : 두 개의 DB 세션이 동일한 버전으로 수정하려고 하면, 한 개의 세션에선 version conflict이 발생

     

    싱글톤 패턴의 문제점

    - 구현하는 코드 자체가 많이 필요하다

        - 멀티스레딩 환경에서 발생할 수 있는 동시성 문제 해결을 위해 syncronized 키워드를 사용

    - 자원을 공유하고 있기 때문에, 테스트 하기가 어렵다

    - 의존 관계상, 클라이언트가 구체 클래스에 의존하게 된다.

        - 클래스 안에서 직접 객체를 생성하기 때문에 SOLID 원칙 중 DIP을 위반, OCP 원칙 또한 위반할 가능성이 높다.

     

     

Designed by Tistory.