Flutter

Flutter Secure Storage

Mr. Joo 2025. 3. 4. 13:03
728x90

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를 제공하여 개발자가 쉽게 보안 기능을 구현할 수 있도록 돕습니다.

그럼 오늘도 즐코 빡코 !!

728x90
LIST