본문 바로가기
카테고리 없음

Room Database (Android)

by SuldenLion 2026. 1. 21.
반응형

SQLite 추상화 계층의 설계 철학과 실무 적용 전략

 

1. Room Database란 무엇인가

Room Database는 Android Jetpack에 포함된 SQLite 추상화 라이브러리로,
로컬 데이터베이스를 **타입 안정성(Type-safety)**과 컴파일 타임 검증을 통해 보다 안전하고 일관되게 사용할 수 있도록 설계되었다.

Room은 단순한 ORM이 아니라,
SQLite를 직접 사용하면서 발생하는 오류 가능성을 구조적으로 제거하기 위한 아키텍처 레이어에 가깝다.

공식 정의에 따르면 Room은 다음 세 가지 주요 구성 요소로 이루어진다.

  • Entity: 테이블 정의
  • DAO (Data Access Object): SQL 접근 계층
  • Database: 데이터베이스 홀더

 

2. 왜 Room이 필요한가

2.1 SQLite 직접 사용의 문제점

Android에서 SQLite를 직접 사용할 경우 다음과 같은 문제가 반복적으로 발생한다.

  • SQL 문법 오류를 런타임에만 발견
  • Cursor 기반 접근으로 인한 가독성 저하
  • 컬럼명 오타, 타입 불일치로 인한 치명적인 런타임 에러
  • 스레드 관리 및 트랜잭션 처리의 복잡성

Room은 이러한 문제를 컴파일 타임 검증으로 대부분 제거한다.

 

2.2 Room이 제공하는 핵심 이점

항목SQLite 직접 사용Room
SQL 검증 런타임 컴파일 타임
타입 안정성 낮음 높음
코드 가독성 낮음 높음
트랜잭션 처리 수동 선언적
LiveData / Flow 직접 구현 기본 지원

 

3. Room 아키텍처 구조

 
[ UI / ViewModel ]
        ↓
       DAO
        ↓
    RoomDatabase
        ↓
      SQLite

Room은 UI 계층과 SQLite 사이의 중간 계층으로 동작하며,
애플리케이션이 SQL 자체보다는 데이터 모델 중심으로 설계되도록 유도한다.

 

4. 핵심 구성 요소 상세 설명

4.1 Entity – 테이블 정의

Entity는 SQLite 테이블과 1:1로 매핑된다.

  • 클래스 = 테이블
  • 필드 = 컬럼
  • 어노테이션 기반 선언

Room은 Entity 정의를 기반으로 스키마를 자동 생성하며,
잘못된 타입이나 키 정의는 컴파일 단계에서 오류로 처리된다.

 

4.2 DAO – 데이터 접근 계층

DAO는 SQL 실행의 유일한 진입점이다.

  • @Query, @Insert, @Update, @Delete 어노테이션 사용
  • SQL 문법 오류, 반환 타입 불일치 → 컴파일 에러 발생

이는 Room 설계에서 가장 중요한 철학 중 하나다.

SQL 오류는 절대 런타임까지 가면 안 된다.

 

4.3 RoomDatabase – 데이터베이스 홀더

RoomDatabase는 다음 역할을 수행한다.

  • SQLite 연결 관리
  • DAO 인스턴스 제공
  • 마이그레이션 적용
  • 싱글톤 보장

Room은 멀티 인스턴스 생성을 금지하며,
하나의 앱 프로세스당 하나의 DB 인스턴스를 권장한다.

 

5. 스레드 정책과 비동기 처리

Room은 메인 스레드에서의 DB 접근을 기본적으로 차단한다.

이를 통해 다음을 강제한다.

  • UI 프리징 방지
  • 명시적인 비동기 설계

공식적으로 권장되는 방식은 다음과 같다.

  • Kotlin Coroutines (suspend)
  • Flow
  • LiveData

이는 Room이 MVVM 아키텍처와 강하게 결합되는 이유이기도 하다.

 

6. 마이그레이션 전략

Room에서 마이그레이션은 선택이 아니라 필수 설계 요소다.

마이그레이션을 정의하지 않으면

  • 앱 업데이트 시 데이터베이스 삭제
  • 사용자 데이터 손실 발생

Room은 다음을 지원한다.

  • 명시적 Migration 클래스
  • Auto Migration (Android 12+)

마이그레이션 SQL 또한 컴파일 타임 검증 대상이다.

 

7. Room 사용이 적합한 경우

적합한 경우

  • 오프라인 캐시
  • 사용자 설정 저장
  • 로컬 로그 / 히스토리
  • 중소 규모 구조화 데이터

부적합한 경우

  • 대용량 분석 데이터
  • 고빈도 Write-heavy 시스템
  • 서버 DB 대체 목적

Room은 서버 DB를 대체하기 위한 도구가 아니다.

 

8. Room과 다른 로컬 저장소 비교

저장소사용 목적
SharedPreferences 단순 Key-Value
DataStore 비동기 Key-Value
Room 구조화된 관계형 데이터
File 대용량 비정형 데이터

 

9. 실무 적용 시 주의사항

  • DAO는 비즈니스 로직을 포함하지 말 것
  • 복잡한 Join은 Query 가독성 우선
  • Entity와 UI Model 분리 권장
  • Migration 테스트 필수

 

10. 정리

Room Database는 단순한 편의 라이브러리가 아니다.
Android 로컬 데이터 계층을 구조적으로 안정화하기 위한 표준 아키텍처 도구다.

  • 컴파일 타임 안정성
  • 명확한 계층 분리
  • 현대 Android 아키텍처와의 완벽한 결합

이 세 가지가 필요한 경우, Room은 사실상 유일한 정답에 가깝다.

반응형

댓글