[kotlin] 룸 데이터베이스의 네트워크 통신 연동 방법

안녕하세요! 오늘은 룸(Room) 데이터베이스와 네트워크 통신을 연동하여 안정적으로 데이터를 관리하는 방법에 대해 알아보겠습니다.

목차

  1. 룸(Room) 데이터베이스 소개
  2. 룸(Room)과 네트워크 통신 연동 방법
    • 룸(Room) 데이터베이스 설정
    • Retrofit을 이용한 네트워크 통신 설정
    • Repository 클래스 생성
    • Coroutine 사용하여 데이터 처리
  3. 마무리

1. 룸(Room) 데이터베이스 소개

룸(Room)은 안드로이드의 SQLite 데이터베이스에 대한 추상화 라이브러리로, 편리한 데이터베이스 액세스를 제공합니다. 룸은 SQLite의 장점을 살려 데이터를 안정적으로 관리할 수 있도록 도와줍니다.

2. 룸(Room)과 네트워크 통신 연동 방법

- 룸(Room) 데이터베이스 설정

룸 데이터베이스를 설정하려면 다음과 같이 의존성을 추가하고 엔티티와 데이터 액세스 객체(DAO)를 정의해야 합니다.

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

@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val age: Int
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>
}

- Retrofit을 이용한 네트워크 통신 설정

네트워크 통신을 위해 Retrofit을 사용하여 API 요청을 수행할 수 있습니다.

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:$retrofit_version'
    implementation 'com.squareup.retrofit2:converter-gson:$retrofit_version'
}

interface ApiService {
    @GET("users")
    suspend fun getUsers(): List<User>
}

- Repository 클래스 생성

데이터를 관리하기 위해 Repository 클래스를 생성하여 데이터베이스와 네트워크를 연동합니다.

class UserRepository(private val userDao: UserDao, private val apiService: ApiService) {
    suspend fun getUsers(): List<User> {
        val localUsers = userDao.getAll()
        return if (localUsers.isNotEmpty()) {
            localUsers
        } else {
            val remoteUsers = apiService.getUsers()
            userDao.insertAll(remoteUsers)
            userDao.getAll()
        }
    }
}

- Coroutine 사용하여 데이터 처리

데이터 액세스 및 네트워크 통신을 위해 코루틴(Coroutine)을 사용하여 비동기적으로 데이터를 처리합니다.

class MainViewModel(private val userRepository: UserRepository) : ViewModel() {
    val usersLiveData = MutableLiveData<List<User>>()

    fun getUsers() {
        viewModelScope.launch {
            val users = userRepository.getUsers()
            usersLiveData.value = users
        }
    }
}

3. 마무리

이렇게 룸 데이터베이스와 네트워크 통신을 연동하여 안정적으로 데이터를 관리할 수 있습니다. 룸과 Retrofit을 결합하여 안드로이드 앱의 데이터 관리를 효과적으로 수행할 수 있습니다.

더 많은 정보가 필요하시다면 룸(Room) 공식 문서Retrofit 공식 문서를 참고하시기 바랍니다.

이상으로 룸 데이터베이스와 네트워크 통신 연동 방법에 대해 알아보았습니다. 감사합니다!