[kotlin] 룸 데이터베이스의 암호화 처리하기

룸(Room)은 안드로이드 앱에서 SQLite 데이터베이스를 쉽게 사용할 수 있도록 도와주는 라이브러리입니다. 룸을 사용하면 데이터베이스 스키마를 정의하고 SQLite 쿼리를 작성하는 것이 간편해집니다.

데이터베이스에 민감한 정보가 저장될 경우, 보안을 강화하기 위해 데이터를 암호화하는 것이 중요합니다. 룸 데이터베이스에 저장되는 정보를 암호화하여 민감한 데이터 누출을 방지할 수 있습니다.

룸 데이터베이스를 생성하고 암호화하기

암호화된 룸 데이터베이스를 생성하려면 먼저 RoomDatabase 클래스를 확장하는 추상 클래스를 만들어야 합니다. 그리고 이 클래스에서 데이터베이스를 생성하고 암호화하는 작업을 수행해야 합니다.

import androidx.room.Database
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.room.RoomDatabase
import androidx.room.Room
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SupportFactory

@Database(entities = [YourEntity::class], version = 1, exportSchema = false)
abstract class EncryptedRoomDatabase : RoomDatabase() {

    companion object {
        private const val databaseName = "your-database-name"
        private var instance: EncryptedRoomDatabase? = null

        fun getInstance(context: Context, password: String): EncryptedRoomDatabase {
            if (instance == null) {
                val factory = SupportFactory(SQLiteDatabase.getBytes(password.toCharArray()))
                instance = Room.databaseBuilder(context.applicationContext, EncryptedRoomDatabase::class.java, databaseName)
                    .openHelperFactory(factory)
                    .build()
            }
            return instance as EncryptedRoomDatabase
        }
    }
}

위의 코드에서는 SupportFactory를 사용하여 SQLCipher를 사용하여 데이터베이스를 암호화하고 있습니다. getInstance 메서드를 호출하여 데이터베이스 인스턴스를 가져올 때 암호를 전달해야 합니다.

데이터베이스 암호 해제

이 암호화된 데이터베이스를 오픈하려면 또 다른 SupportFactory를 사용하여 암호화된 데이터베이스에 접근해야 합니다.

val factory = SupportFactory(SQLiteDatabase.getBytes(password.toCharArray()))
val db = Room.databaseBuilder(context, EncryptedRoomDatabase::class.java, "your-database-name")
            .openHelperFactory(factory)
            .build()

마무리

이렇게 하면 룸 데이터베이스를 암호화하고 사용할 수 있습니다. 민감한 정보를 저장하는 앱을 개발할 때에는 데이터베이스의 보안에 항상 주의를 기울여야 합니다. 데이터베이스 암호화는 민감한 정보를 보호하는 데 중요한 도구 중 하나입니다.

룸 공식 문서 및 GitHub 저장소에서 더 많은 정보를 확인할 수 있습니다.

룸 공식 문서 룸 공식 GitHub 저장소

참고: SQLCipher는 SQLite 데이터베이스를 암호화하는 오픈 소스 라이브러리입니다.