[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의 데이터베이스 암호화 방법에 대해 알아보았습니다.