[android] 안드로이드 Room Database의 데이터베이스 암호화 방법

안드로이드 앱을 개발할 때, 데이터베이스의 보안은 매우 중요합니다. Room 라이브러리를 사용하여 데이터베이스를 구축할 때, 데이터 암호화를 통해 보안을 강화할 수 있습니다. 이 게시물에서는 안드로이드 Room Database의 데이터베이스를 어떻게 암호화하는지 알아보겠습니다.

1. SQLCipher 라이브러리 추가

Room Database에 데이터베이스 암호화를 추가하기 위해서는 SQLCipher 라이브러리를 사용해야 합니다. 프로젝트의 build.gradle 파일에 SQLCipher 의존성을 추가합니다.

android {
    // ...
}

dependencies {
    // ...
    implementation 'net.zetetic:android-database-sqlcipher:4.4.0'
}

2. Room Database 설정

Room Database를 설정하여 데이터베이스 암호화를 활성화합니다. 데이터베이스 생성시에 비밀번호를 설정하여 데이터 암호화를 적용할 수 있습니다.

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

    companion object {
        private const val DATABASE_NAME = "app_database"

        fun buildDatabase(context: Context, password:CharArray): AppDatabase {
            return Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME)
                .openHelperFactory(SupportFactory(SecretKeyFactory(password)))
                .build()
        }
    }
}

위 코드에서 SecretKeyFactory는 SQLCipher 라이브러리를 이용하여 데이터베이스를 암호화하기 위한 키를 생성합니다.

3. 데이터베이스 업그레이드

데이터베이스 스키마가 업데이트되거나 버전이 변경될 때는 비밀번호를 사용하여 업그레이드를 수행해야 합니다.

val passphrase = SQLiteDatabase.getBytes(password)
database.execSQL("PRAGMA rekey = '$passphrase';")

마무리

이제 데이터베이스를 암호화하여 보안을 강화했습니다. 데이터베이스가 노출될 가능성이 있는 경우, 데이터 암호화는 중요한 보안 요소입니다. Room Database와 SQLCipher를 사용하여 데이터베이스 암호화를 구현하여 사용자의 개인 정보를 보호할 수 있습니다.

더 깊이있는 방법은 SQLCipher 공식 문서를 참고하시기 바랍니다.

이상으로 안드로이드 Room Database의 데이터베이스 암호화 방법에 대해 알아보았습니다.