Flutter 앱을 개발할 때, 사용자 인증 정보, API 키, 토큰과 같은 민감한 데이터를 안전하게 저장하는 것은 필수적입니다. flutter_secure_storage 패키지는 iOS에서는 Keychain, Android에서는 EncryptedSharedPreferences를 활용하여 보안성이 뛰어난 데이터 저장소를 제공합니다.
이 글에서는 flutter_secure_storage의 필요성, 설정 방법, 사용법 및 추가 기능에 대해 알아보겠습니다.
왜 flutter_secure_storage를 사용해야 할까?
보안이 중요한 이유는 데이터가 노출되면 사용자 정보 유출, API 남용 등의 위험이 발생할 수 있기 때문입니다. flutter_secure_storage를 사용하면 다음과 같은 이점이 있습니다.
- 민감한 데이터 보호: API 키, JWT 토큰, 사용자 비밀번호 등을 안전하게 암호화하여 저장할 수 있습니다.
- 플랫폼별 최적화: iOS에서는 Keychain, Android에서는 EncryptedSharedPreferences를 사용하여 최적의 보안 환경을 제공합니다.
- 간편한 API: SharedPreferences와 유사한 방식으로 데이터를 저장하고 불러올 수 있습니다.
- 자동 암호화 지원: 별도의 암호화 설정 없이 보안이 보장됩니다.
flutter_secure_storage 설치 및 설정
1. 패키지 설치
먼저 flutter_secure_storage 패키지를 pubspec.yaml에 추가합니다.
dependencies:
flutter_secure_storage: ^9.0.0
이후 flutter pub get 명령어를 실행하여 패키지를 설치합니다.
2. Android 설정
Android에서 flutter_secure_storage를 사용하려면 AndroidManifest.xml 파일에 권한을 추가해야 합니다.
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
생체 인증을 활용하려면 추가 설정이 필요할 수 있습니다.
flutter_secure_storage 사용법
1. 안전한 데이터 저장 및 불러오기
아래는 flutter_secure_storage를 사용하여 데이터를 저장하고 불러오는 예제입니다.
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
final storage = FlutterSecureStorage();
// 데이터 저장
await storage.write(key: 'token', value: 'my_secret_token');
// 데이터 읽기
String? token = await storage.read(key: 'token');
// 데이터 삭제
await storage.delete(key: 'token');
- write()를 사용하면 데이터를 안전하게 저장할 수 있습니다.
- read()를 사용하면 저장된 데이터를 가져올 수 있습니다.
- delete()를 사용하면 저장된 데이터를 삭제할 수 있습니다.
2. 모든 저장된 데이터 가져오기
저장된 모든 데이터를 가져오는 방법도 지원됩니다.
Map<String, String> allValues = await storage.readAll();
이를 활용하면 특정 키만 관리하는 것이 아니라, 모든 저장된 데이터를 확인할 수 있습니다.
추가 기능
1. iOS에서 Keychain 접근 그룹 설정
iOS에서는 Keychain 접근성 설정을 조정할 수 있습니다.
final storage = FlutterSecureStorage(
iOptions: IOSOptions(accessibility: KeychainAccessibility.first_unlock),
);
위 설정을 적용하면 기기가 처음 잠금 해제될 때 데이터에 접근할 수 있도록 설정됩니다.
2. Android에서 EncryptedSharedPreferences 설정
Android에서는 EncryptedSharedPreferences를 사용할 수 있습니다.
final storage = FlutterSecureStorage(
aOptions: AndroidOptions(encryptedSharedPreferences: true),
);
이 설정을 적용하면 저장된 데이터가 자동으로 암호화됩니다.
flutter_secure_storage 활용 예제
1. flutter_secure_storage vs SharedPreferences
비교 항목flutter_secure_storageSharedPreferences
비교 항목 | Flutter Secure Storage | SharedPreferences |
데이터 암호화 | O (자동 암호화) | X (암호화되지 않음) |
저장 방식 | Keychain / EncryptedSharedPreferences | 일반 SharedPreferences |
보안 수준 | 높음 | 낮음 |
보안이 필요한 경우 flutter_secure_storage를 사용하는 것이 훨씬 안전합니다.
2. JWT 토큰 저장 및 자동 로그인 구현
// 로그인 성공 후 토큰 저장
await storage.write(key: 'jwt_token', value: jwt);
// 앱 실행 시 토큰 확인 후 자동 로그인
String? token = await storage.read(key: 'jwt_token');
if (token != null) {
// 자동 로그인 로직 실행
}
이를 활용하면 사용자 경험을 개선하면서도 보안성을 유지할 수 있습니다.
3. 생체 인증과 결합하여 보안 강화
flutter_secure_storage는 생체 인증과 함께 사용할 수도 있습니다.
final storage = FlutterSecureStorage(
iOptions: IOSOptions(authenticationRequired: true),
aOptions: AndroidOptions(encryptedSharedPreferences: true),
);
- iOS에서는 Face ID, Touch ID를 활용할 수 있습니다.
- Android에서는 생체 인증이 포함된 암호화된 저장소를 사용할 수 있습니다.
결론
flutter_secure_storage는 Flutter 앱에서 민감한 데이터를 안전하게 저장하는 가장 효과적인 방법 중 하나입니다. 자동 암호화, 플랫폼별 최적화, 간단한 API를 제공하여 개발자가 쉽게 보안 기능을 구현할 수 있도록 돕습니다.
그럼 오늘도 즐코 빡코 !!
'Flutter' 카테고리의 다른 글
Flutter에서 ButtonStyle 마스터하기 – 완벽 가이드 (0) | 2025.03.09 |
---|---|
Flutter에서 GPU 렌더링 이해하기: Skia에서 Impeller까지 (1) | 2025.03.07 |
Flutter에서 애니메이션 (1) | 2025.03.02 |
Flutter에서 BLoC 패턴 제대로 이해하기 (0) | 2025.03.02 |
Flutter 3.29 & Dart 3.7 업데이트 (1) | 2025.02.27 |