본문 바로가기
Android

Android RoomDB 및 WorkManager 완벽 가이드

by 안될개발 2025. 2. 28.

Android RoomDB 및 WorkManager 완벽 가이드

Android RoomDB 및 WorkManager 완벽 가이드

Android에서 로컬 데이터 저장을 위해 Room 데이터베이스를, 백그라운드 작업 처리를 위해 WorkManager를 활용하면 효율적인 데이터 관리가 가능합니다. 이번 글에서는 RoomDB와 WorkManager의 개념과 사용법을 설명합니다.


1. Room Database

1.1 Room이란?

Room은 Android의 공식 SQLite 래퍼 라이브러리로, 객체지향적인 방식으로 데이터베이스를 관리할 수 있도록 도와줍니다.

1.2 Room 설정하기

Gradle 설정

dependencies {
    implementation "androidx.room:room-runtime:2.5.2"
    kapt "androidx.room:room-compiler:2.5.2"
}

1.3 Entity 정의하기

@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    val name: String,
    val age: Int
)

1.4 DAO (Data Access Object) 생성

@Dao
interface UserDao {
    @Insert
    suspend fun insertUser(user: User)

    @Query("SELECT * FROM users")
    fun getAllUsers(): LiveData<List<User>>
}

1.5 Database 클래스 생성

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao

    companion object {
        @Volatile private var instance: AppDatabase? = null
        fun getInstance(context: Context): AppDatabase {
            return instance ?: synchronized(this) {
                instance ?: Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java, "app_database"
                ).build().also { instance = it }
            }
        }
    }
}

1.6 ViewModel에서 Room 사용

@HiltViewModel
class UserViewModel @Inject constructor(private val userDao: UserDao) : ViewModel() {
    val users: LiveData<List<User>> = userDao.getAllUsers()

    fun addUser(user: User) {
        viewModelScope.launch { userDao.insertUser(user) }
    }
}

2. WorkManager

2.1 WorkManager란?

WorkManager는 백그라운드에서 실행해야 하는 지속적인 작업을 관리하는 API입니다. 주기적인 데이터 동기화, 백업, 알림 처리 등에 사용됩니다.

2.2 WorkManager 설정

Gradle 설정

dependencies {
    implementation "androidx.work:work-runtime-ktx:2.8.1"
}

2.3 Work 정의하기

class MyWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        Log.d("MyWorker", "백그라운드 작업 실행")
        return Result.success()
    }
}

2.4 Work 요청 및 실행

val workRequest = OneTimeWorkRequestBuilder<MyWorker>().build()
WorkManager.getInstance(context).enqueue(workRequest)

2.5 주기적인 Work 실행

val periodicWorkRequest = PeriodicWorkRequestBuilder<MyWorker>(15, TimeUnit.MINUTES).build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
    "MyPeriodicWork", ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest
)

3. Room과 WorkManager를 함께 사용하기

백그라운드에서 Room 데이터를 주기적으로 동기화하는 Work를 만들 수 있습니다.

class SyncWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
    override suspend fun doWork(): Result {
        val db = AppDatabase.getInstance(applicationContext)
        val users = db.userDao().getAllUsers()
        Log.d("SyncWorker", "Users: $users")
        return Result.success()
    }
}

이제 WorkManager를 활용하여 백그라운드에서 Room 데이터베이스를 주기적으로 관리할 수 있습니다.


4. 결론

Room과 WorkManager를 함께 사용하면 데이터 저장과 백그라운드 작업을 효율적으로 처리할 수 있습니다.

✅ Room을 활용한 간편한 데이터 저장 ✅ WorkManager를 통한 백그라운드 동기화 ✅ ViewModel과 함께 활용하여 유지보수성 강화

이제 Android 앱 개발에 Room과 WorkManager를 적극 활용해 보세요! 🚀