Expo에서 로컬 스토리지를 사용하여 데이터 저장 • Scientyfic World

Expo에서 로컬 스토리지를 사용하여 데이터 저장 • Scientyfic World

科技

로컬 모바일 데이터를 사용하는 모바일 앱을 개발하는 경우 로컬 스토리지는 데이터 지속성과 오프라인 기능을 보장하여 사용자 경험을 향상시키므로 중요합니다. React Native Expo에는 AsyncStorage, SecureStore, SQLite의 세 가지 주요 로컬 스토리지 옵션이 있습니다. 이러한 솔루션은 각각 다른 목적을 위해 사용되며 고유한 이점을 제공하고 특정 요구 사항을 해결합니다.

이 가이드에서는 React Native Expo 프로젝트에서 이러한 로컬 스토리지 솔루션을 구현하는 방법을 알아봅니다. 간단한 키-값 저장소, 민감한 정보를 위한 안전한 스토리지 또는 대규모 데이터 세트를 처리하기 위한 강력한 데이터베이스가 필요하든, 이 가이드는 올바른 선택을 할 수 있는 지식과 도구를 제공합니다.

앱의 데이터 저장 기능을 최적화할 준비가 되셨나요? 귀하의 필요에 가장 적합한 옵션을 살펴보겠습니다.

로컬 스토리지 옵션 개요

React Native Expo에서는 세 가지 주요 로컬 스토리지 솔루션인 AsyncStorage, SecureStore, SQLite가 일반적으로 사용됩니다. 각 옵션은 서로 다른 목적을 위해 사용되며 고유한 이점과 단점을 제공합니다. 이러한 옵션을 이해하면 애플리케이션 요구 사항에 가장 적합한 옵션을 결정하는 데 도움이 됩니다.

1. 비동기 저장소

AsyncStorage는 앱에 전역적인 간단하고 암호화되지 않은 비동기적 영구 키-값 스토리지 시스템입니다. 앱 실행 간에 지속되어야 하는 소량의 데이터에 일반적으로 사용됩니다.

장점 단점 사용 사례
사용하기 쉬운 암호화되지 않음 사용자 기본 설정 및 설정 저장
비동기 작업 대용량 데이터 세트의 성능 문제 소량의 데이터 캐싱
영구 저장소 제한된 저장 용량 세션 간에 유지되어야 하는 민감하지 않은 정보 저장

2. 시큐어스토어

SecureStore는 민감한 정보를 저장하기 위한 보다 안전한 대안을 제공합니다. iOS 키체인이나 Android의 키스토어 시스템과 같은 장치의 안전한 저장 메커니즘을 사용하여 데이터를 안전하게 저장합니다.

장점 단점 사용 사례
높은 보안성 제한된 저장 용량 인증 토큰 및 API 키 저장
플랫폼 통합 동기 작업 사용자 자격 증명을 안전하게 저장
민감한 데이터에 이상적입니다 구현이 약간 더 복잡함 민감한 구성 설정 유지

3. SQLite

SQLite는 강력한 내장형 SQL 데이터베이스 엔진입니다. 이를 통해 복잡한 관계형 데이터베이스를 만들고 애플리케이션 내에서 직접 SQL 쿼리를 수행할 수 있습니다. Expo는 다음을 통해 SQLite에 대한 지원을 제공합니다. expo-sqlite 패키지.

장점 단점 사용 사례
강력한 데이터베이스 관리 SQL 및 데이터베이스 관리에 대한 지식이 필요합니다. 대규모 데이터 세트 및 복잡한 데이터 관계 관리
효율적인 보관 더욱 복잡한 설정 견고한 데이터 저장을 필요로 하는 오프라인 우선 애플리케이션
끈기 있고 믿음직하다 성능 오버헤드 고급 쿼리 및 데이터 조작 기능이 필요한 앱

이러한 각 스토리지 솔루션은 뚜렷한 장점과 단점을 제공합니다. 올바른 솔루션을 선택하는 것은 저장하는 데이터 유형, 필요한 보안 수준, 성능 고려 사항과 같은 앱의 특정 요구 사항에 따라 달라집니다. 이러한 옵션을 이해하면 정보에 입각한 결정을 내리고 애플리케이션에 가장 적합한 솔루션을 구현하는 데 도움이 됩니다.

AsyncStorage 구현

AsyncStorage는 React Native 애플리케이션을 위한 간단하고 암호화되지 않은 비동기 키-값 스토리지 솔루션을 제공합니다. 이는 사용자 기본 설정이나 임시 데이터와 같이 앱 실행 간에 지속되어야 하는 소량의 데이터를 저장하는 데 자주 사용됩니다.

React Native Expo 프로젝트에서 AsyncStorage를 사용하려면 다음을 설치해야 합니다. @react-native-async-storage/async-storage 패키지. 다음 명령을 사용하여 설치하세요.

npx expo install @react-native-async-storage/async-storage

패키지를 설치한 후에는 프로젝트로 가져와서 해당 메서드를 사용할 수 있습니다.

비동기 저장소 방법

AsyncStorage는 스토리지 시스템과 상호 작용하기 위한 여러 가지 방법을 제공합니다. 여기서는 가장 일반적으로 사용되는 방법을 다루겠습니다. setItem, getItem, removeItem, mergeItem, getAllKeys그리고 clear.

항목 설정

그만큼 setItem 이 메서드는 특정 키와 연관된 값을 저장할 수 있게 해줍니다. 이 메서드는 비동기적이며 약속을 반환합니다.

import AsyncStorage from '@react-native-async-storage/async-storage';

const storeData = async (key, value) => {
  try {
    await AsyncStorage.setItem(key, value);
    console.log('Data stored successfully');
  } catch (error) {
    console.error('Error storing data', error);
  }
};

// Usage
storeData('user_name', 'John Doe');

자바스크립트

getItem

그만큼 getItem 메서드는 특정 키와 연관된 값을 검색합니다. 저장된 값으로 해결되는 약속을 반환합니다.

const getData = async (key) => {
  try {
    const value = await AsyncStorage.getItem(key);
    if (value !== null) {
      console.log('Retrieved data:', value);
    }
  } catch (error) {
    console.error('Error retrieving data', error);
  }
};

// Usage
getData('user_name');

자바스크립트

항목 제거

그만큼 removeItem 이 방법은 저장소에서 특정 키와 연관된 값을 삭제합니다.

const removeData = async (key) => {
  try {
    await AsyncStorage.removeItem(key);
    console.log('Data removed successfully');
  } catch (error) {
    console.error('Error removing data', error);
  }
};

// Usage
removeData('user_name');

자바스크립트

병합항목

그만큼 mergeItem 메서드는 기존 값을 특정 키의 새 값과 병합합니다. 이는 특히 객체에 유용합니다.

const mergeData = async (key, value) => {
  try {
    await AsyncStorage.mergeItem(key, value);
    console.log('Data merged successfully');
  } catch (error) {
    console.error('Error merging data', error);
  }
};

// Usage
mergeData('user_settings', JSON.stringify({ theme: 'dark' }));

자바스크립트

getAllKeys

그만큼 getAllKeys 메서드는 AsyncStorage에 저장된 모든 키를 검색합니다. 키 배열로 해결되는 약속을 반환합니다.

const getAllKeys = async () => {
  try {
    const keys = await AsyncStorage.getAllKeys();
    console.log('All keys:', keys);
  } catch (error) {
    console.error('Error retrieving keys', error);
  }
};

// Usage
getAllKeys();

자바스크립트

분명한

그만큼 clear 이 방법은 저장소에서 모든 키-값 쌍을 제거합니다.

const clearStorage = async () => {
  try {
    await AsyncStorage.clear();
    console.log('Storage cleared successfully');
  } catch (error) {
    console.error('Error clearing storage', error);
  }
};

// Usage
clearStorage();

자바스크립트

이러한 방법과 모범 사례를 따르면 AsyncStorage를 사용하여 React Native Expo 애플리케이션에서 로컬 데이터 저장소를 효율적으로 관리할 수 있습니다.

SecureStore 구현

SecureStore는 React Native 애플리케이션에서 민감한 정보를 저장하는 안전한 방법을 제공합니다. iOS 키체인이나 Android의 키스토어 시스템과 같은 장치의 안전한 저장 메커니즘을 활용하여 데이터 보안을 보장합니다.

React Native Expo 프로젝트에서 SecureStore를 사용하려면 다음을 설치해야 합니다. expo-secure-store 패키지. 다음 명령을 사용하여 설치하세요. npx expo install expo-secure-store

패키지를 설치한 후에는 프로젝트로 가져와서 해당 메서드를 사용할 수 있습니다.

SecureStore 방법

SecureStore는 안전한 데이터 저장을 위한 여러 가지 방법을 제공합니다. setItemAsync, getItemAsync, deleteItemAsync그리고 isAvailableAsync.

setItemAsync

그만큼 setItemAsync 이 메서드는 특정 키와 연관된 값을 안전하게 저장할 수 있게 해줍니다. 이 메서드는 비동기식이며 약속을 반환합니다.

Tech Break 구독하기

import * as SecureStore from 'expo-secure-store';

const storeSecureData = async (key, value) => {
  try {
    await SecureStore.setItemAsync(key, value);
    console.log('Data stored securely');
  } catch (error) {
    console.error('Error storing secure data', error);
  }
};

// Usage
storeSecureData('secure_token', 'your_secure_token');

자바스크립트

getItemAsync

그만큼 getItemAsync 메서드는 특정 키와 연관된 값을 안전하게 검색합니다. 저장된 값으로 해결되는 약속을 반환합니다.

const getSecureData = async (key) => {
  try {
    const value = await SecureStore.getItemAsync(key);
    if (value !== null) {
      console.log('Retrieved secure data:', value);
    }
  } catch (error) {
    console.error('Error retrieving secure data', error);
  }
};

// Usage
getSecureData('secure_token');

자바스크립트

deleteItemAsync

그만큼 deleteItemAsync 이 방법은 보안 저장소에서 특정 키와 연관된 값을 삭제합니다.

const deleteSecureData = async (key) => {
  try {
    await SecureStore.deleteItemAsync(key);
    console.log('Secure data deleted successfully');
  } catch (error) {
    console.error('Error deleting secure data', error);
  }
};

// Usage
deleteSecureData('secure_token');

자바스크립트

사용 가능 비동기

그만큼 isAvailableAsync 메서드는 보안 저장소가 기기에 사용 가능한지 확인합니다. 부울 값으로 해결되는 약속을 반환합니다.

const checkSecureStoreAvailability = async () => {
  try {
    const isAvailable = await SecureStore.isAvailableAsync();
    console.log('SecureStore availability:', isAvailable);
  } catch (error) {
    console.error('Error checking SecureStore availability', error);
  }
};

// Usage
checkSecureStoreAvailability();

자바스크립트

이러한 방법을 사용하면 SecureStore를 통해 React Native Expo 애플리케이션의 민감한 데이터를 안전하게 관리할 수 있습니다.

SQLite 사용하기

SQLite는 복잡한 관계형 데이터베이스를 만들고 React Native Expo 애플리케이션 내에서 직접 SQL 쿼리를 수행할 수 있는 강력한 임베디드 SQL 데이터베이스 엔진입니다. 대규모 데이터 세트와 복잡한 데이터 관계를 처리하는 데 이상적입니다.

React Native Expo 프로젝트에서 SQLite를 사용하려면 다음을 설치해야 합니다. expo-sqlite 패키지. 다음 명령을 사용하여 설치하세요. npx expo install expo-sqlite

패키지를 설치한 후에는 프로젝트로 가져와서 해당 메서드를 사용할 수 있습니다.

SQLite 메서드

SQLite는 데이터베이스를 관리하기 위한 여러 가지 방법을 제공합니다. openDatabase, transaction및 SQL 실행 방법과 같은 executeSql.

오픈데이터베이스

그만큼 openDatabase 메서드는 데이터베이스를 열고 데이터베이스 객체를 반환합니다. 데이터베이스가 없으면 생성됩니다.

import * as SQLite from 'expo-sqlite';

const db = SQLite.openDatabase('myDatabase.db');

// Usage
const openDatabase = () => {
  return SQLite.openDatabase('myDatabase.db');
};

const db = openDatabase();

자바스크립트

거래

그만큼 transaction 이 방법은 여러 SQL 문을 단일 작업 단위로 실행할 수 있는 트랜잭션을 생성합니다.

db.transaction(tx => {
  // SQL statements go here
});

자바스크립트

실행Sql

그만큼 executeSql 방법은 데이터베이스에 대해 SQL 문을 실행합니다. 트랜잭션 내에서 사용할 수 있습니다.

const createTable = () => {
  db.transaction(tx => {
    tx.executeSql(
      'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY NOT NULL, name TEXT, age INTEGER);'
    );
  });
};

// Usage
createTable();

자바스크립트

기본 CRUD 작업

  1. 생성(데이터 삽입)

테이블에 데이터를 삽입하려면 다음을 사용하십시오. executeSql 트랜잭션 내의 메서드.

const insertData = (name, age) => {
  db.transaction(tx => {
    tx.executeSql(
      'INSERT INTO users (name, age) values (?, ?)',
      [name, age],
      (txObj, resultSet) => console.log('Data inserted', resultSet),
      (txObj, error) => console.error('Error inserting data', error)
    );
  });
};

// Usage
insertData('John Doe', 30);

자바스크립트

  1. 읽기(데이터 쿼리)

테이블에서 데이터를 검색하려면 다음을 사용하십시오. executeSql 트랜잭션 내의 메서드.

const queryData = () => {
  db.transaction(tx => {
    tx.executeSql(
      'SELECT * FROM users',
      [],
      (txObj, { rows: { _array } }) => console.log('Data retrieved', _array),
      (txObj, error) => console.error('Error querying data', error)
    );
  });
};

// Usage
queryData();

자바스크립트

  1. 업데이트(데이터 수정)

테이블의 기존 데이터를 업데이트하려면 다음을 사용하십시오. executeSql 트랜잭션 내의 메서드.

const updateData = (id, name, age) => {
  db.transaction(tx => {
    tx.executeSql(
      'UPDATE users SET name = ?, age = ? WHERE id = ?',
      [name, age, id],
      (txObj, resultSet) => console.log('Data updated', resultSet),
      (txObj, error) => console.error('Error updating data', error)
    );
  });
};

// Usage
updateData(1, 'Jane Doe', 25);

자바스크립트

  1. 삭제(데이터 제거)

테이블에서 데이터를 삭제하려면 다음을 사용하십시오. executeSql 트랜잭션 내의 메서드.

const deleteData = (id) => {
  db.transaction(tx => {
    tx.executeSql(
      'DELETE FROM users WHERE id = ?',
      [id],
      (txObj, resultSet) => console.log('Data deleted', resultSet),
      (txObj, error) => console.error('Error deleting data', error)
    );
  });
};

// Usage
deleteData(1);

자바스크립트

이러한 방법을 따르면 SQLite를 사용하여 React Native Expo 애플리케이션에서 복잡한 데이터 관계를 효과적으로 관리하고 대용량 데이터 세트를 처리할 수 있습니다.

일반적인 문제 해결

React Native Expo에서 로컬 스토리지를 구현할 때 몇 가지 일반적인 문제가 발생할 수 있습니다. 여기서는 이러한 문제를 논의하고 이러한 과제를 효과적으로 탐색하는 데 도움이 되는 실용적인 솔루션을 제공합니다.

비동기 저장소 문제

  1. 세션 간에 데이터가 지속되지 않음
    AsyncStorage의 일반적인 문제 중 하나는 앱 재시작 시 데이터가 유지되지 않는다는 것입니다. 이는 종종 비동기 작업을 잘못 처리하여 발생합니다. 올바르게 사용하고 있는지 확인하십시오. await 와 더불어 setItem 방법.

   await AsyncStorage.setItem('key', 'value');

자바스크립트

  1. 대용량 데이터 세트로 인한 성능 저하
    AsyncStorage는 소량의 데이터를 위해 설계되었습니다. 대용량 데이터 세트를 저장하려고 하면 상당한 성능 문제가 발생할 수 있습니다. 간단한 키-값 쌍과 소량의 데이터에는 AsyncStorage를 사용하는 것이 가장 좋습니다. 대용량 데이터 세트의 경우 방대한 데이터를 효율적으로 처리하는 데 더 적합한 SQLite를 사용하는 것이 좋습니다.
  2. 일관되지 않은 데이터 검색
    발생할 수 있는 또 다른 문제는 일관되지 않은 데이터 검색입니다. getItem 가끔씩 돌아온다 null. 이는 일반적으로 키 불일치 또는 비동기 처리 오류로 인해 발생합니다. 사용된 키가 getItem 에 사용된 것과 정확히 동일합니다. setItem 그리고 당신이 전화를 제대로 기다리고 있다는 것을 보여주세요.

   const value = await AsyncStorage.getItem('key');

자바스크립트

SecureStore 문제

  1. 데이터가 안전하게 저장되지 않음
    SecureStore는 데이터를 안전하게 저장하도록 설계되었지만 부적절하게 사용하면 암호화되지 않은 데이터 저장으로 이어질 수 있습니다. 항상 다음을 사용하세요. SecureStore.setItemAsync 기본적으로 데이터를 암호화하는 방법입니다.

   await SecureStore.setItemAsync('key', 'value');

자바스크립트

  1. 장치에서 SecureStore를 사용할 수 없음
    SecureStore는 모든 기기나 플랫폼에서 사용할 수 없을 수 있으며, 이로 인해 오류가 발생할 수 있습니다. SecureStore를 사용하기 전에 기기에서 사용 가능한지 확인하세요.

   const isAvailable = await SecureStore.isAvailableAsync();
   if (!isAvailable) {
     console.log('SecureStore is not available on this device.');
   }

자바스크립트

  1. 데이터 검색 문제
    때때로, getItemAsync 돌아올 수도 있다 null 데이터가 올바르게 저장되었더라도 이는 종종 키 불일치로 인해 발생합니다. 사용된 키가 getItemAsync 사용된 키와 일치합니다 setItemAsync.

   const value = await SecureStore.getItemAsync('key');

자바스크립트

SQLite 문제

  1. 데이터베이스가 열리지 않음
    SQLite의 일반적인 문제는 데이터베이스를 열지 못하는 것입니다. 올바른 데이터베이스 경로와 파일 이름이 사용되고 앱에 필요한 권한이 있는지 확인하세요.

   const db = SQLite.openDatabase('myDatabase.db');

자바스크립트

  1. SQL 구문 오류
    SQL 쿼리는 구문 오류로 인해 실패할 수 있습니다. 항상 SQL 구문을 두 번 확인하고 변수에 대한 플레이스홀더를 사용하여 SQL 주입 및 구문 오류를 방지합니다.

   db.transaction(tx => {
     tx.executeSql(
       'INSERT INTO users (name, age) values (?, ?)',
       ['John Doe', 30],
       (txObj, resultSet) => console.log('Data inserted'),
       (txObj, error) => console.error('SQL Error', error)
     );
   });

자바스크립트

  1. 거래가 실행되지 않음
    SQL 트랜잭션이 실행되지 않아 데이터가 데이터베이스에 기록되지 않을 수 있습니다. 트랜잭션 내의 모든 SQL 문이 유효한지 확인하고 올바른 콜백 함수를 사용하여 성공 및 오류 시나리오를 처리합니다.

   db.transaction(tx => {
     tx.executeSql(
       'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY NOT NULL, name TEXT, age INTEGER);'
     );
   });

자바스크립트

  1. 대용량 데이터 세트의 성능 문제
    쿼리는 큰 데이터 세트로 인해 느려질 수 있습니다. 성능을 최적화하려면 인덱싱과 효율적인 쿼리 구조를 사용하세요.

   db.transaction(tx => {
     tx.executeSql(
       'CREATE INDEX IF NOT EXISTS idx_users_name ON users (name);'
     );
   });

자바스크립트

이러한 일반적인 문제를 탐색하면 React Native Expo 프로젝트에서 로컬 스토리지 솔루션을 보다 효과적으로 사용하는 데 도움이 됩니다. 각 스토리지 옵션에는 강점과 이상적인 사용 사례가 있으므로 앱의 요구 사항에 가장 적합한 옵션을 선택하세요. 다른 문제에 직면한 경우 공식 문서와 커뮤니티 포럼을 참조하면 추가 지원을 받을 수 있습니다.

결론

로컬 데이터 스토리지는 모바일 애플리케이션에서 사용자 경험을 향상하고 데이터 지속성을 보장하는 데 필수적입니다. 이 가이드에서는 React Native Expo의 세 가지 주요 로컬 스토리지 솔루션인 AsyncStorage, SecureStore, SQLite를 살펴보았습니다.

비동기 저장소 사용자 선호도 및 설정과 같은 소량의 데이터를 저장하는 데 이상적입니다. 사용하기 쉽지만 암호화가 부족하기 때문에 민감한 데이터에는 피해야 합니다.

보안스토어 인증 토큰 및 사용자 자격 증명과 같은 민감한 정보를 저장하는 안전한 방법을 제공합니다. 높은 보안을 보장하지만 저장 용량이 제한되어 있고 구현이 약간 더 복잡합니다.

SQLite 대규모 데이터 세트와 복잡한 데이터 관계를 처리하기 위한 강력한 데이터베이스 관리 기능을 제공합니다. 오프라인 우선 애플리케이션과 고급 쿼리 기능이 필요한 애플리케이션에 적합하지만 SQL에 대한 지식과 신중한 관리가 필요합니다.

로컬 스토리지 솔루션을 선택할 때는 데이터 유형, 필요한 보안 및 성능 영향을 고려하세요. 이러한 스토리지 방법을 적절히 구현하면 애플리케이션의 안정성과 사용자 경험이 크게 향상될 수 있습니다.

앱의 필요에 가장 적합한 스토리지 솔루션을 파악하셨나요? 이러한 옵션을 실험하고 그에 따라 데이터 스토리지 전략을 최적화하세요. 문제가 발생하면 공식 문서와 커뮤니티 리소스를 참조하여 추가 지침을 확인하세요.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *