스토리지 옵션 비교

완료됨

.NET MAUI는 데이터의 특성, 구조 및 크기에 따라 디바이스에서 로컬로 데이터를 캐싱하기 위한 여러 스토리지 옵션을 제공합니다. .NET MAUI 앱에 로컬로 데이터를 저장하는 데 가장 일반적으로 사용되는 세 가지 옵션은 다음과 같습니다.

  • 기본 설정: 데이터를 키-값 쌍으로 저장합니다.
  • 파일 시스템: 파일 시스템 액세스를 통해 느슨한 파일을 디바이스에 직접 저장합니다.
  • 데이터베이스: 데이터를 완전 관계형 데이터베이스에 저장합니다.

Diagram of the common local storage options available to a .NET MAUI app.

이 단원에서는 이러한 스토리지 옵션과 각 옵션이 가장 적합한 상황을 살펴봅니다.

기본 설정을 사용하는 경우

기본 설정은 사용자 선택 항목과 같은 간단한 데이터 조각 작업을 할 때 편리합니다. 사용자가 애플리케이션을 구성하도록 허용할 때 자주 사용됩니다. 이 데이터를 키/값 쌍 집합으로 저장합니다. 예를 들어 사용자가 앱에서 세션 간에 사용자 이름과 암호를 저장할지를 지정할 수 있도록 하려는 경우를 가정해보겠습니다. 기본 설정에 사용자의 선택을 저장할 수 있습니다.

아래 코드는 saveLoginDetails 변수에 기록된 부울 값을 SaveLogin(이)라는 기본 설정에 저장한 다음, 나중에 이 데이터를 다시 읽는 방법을 보여줍니다. Get 메서드는 지정된 기본 설정을 찾을 수 없는 경우 기본값을 제공할 것으로 예상함을 볼 수 있습니다.

bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);

또한 Preferences 클래스에는 명명된 기본 설정이 있는지 확인(ContainsKey), 기본 설정 삭제(Remove) 및 모든 기본 설정 데이터(Clear) 제거를 위한 메서드가 포함되어 있습니다.

참고

단순 데이터 형식만 기본 설정으로 저장해야 합니다. 목록, 컬렉션 및 배열과 같은 큰 개체에 대한 참조는 저장할 수 없습니다. 이러한 유형의 데이터에는 파일 시스템 또는 데이터베이스를 사용합니다.

파일 시스템을 사용하는 경우

모바일 및 데스크톱 디바이스에는 폴더와 파일의 계층적 디렉터리 구조가 포함된 실제 파일 시스템이 있습니다. 파일 시스템은 XML, 이진 또는 텍스트 파일과 같은 느슨한 파일이 있을 때 사용하면 편리합니다. 예를 들어 디바이스 로컬에 로그 데이터를 저장한다고 가정하겠습니다. 텍스트 파일을 만들어서 이 파일을 파일 시스템에 저장하고 이벤트가 발생할 때 로그를 기록할 수 있습니다. 큰 데이터 구조를 파일에 직렬화하고, 앱이 종료될 때 저장해야 하는 경우 파일 시스템에 로컬로 캐시할 수도 있습니다. 앱이 다시 시작되면 이 데이터를 메모리로 다시 읽을 수 있습니다. 다음 코드에서는 데이터를 파일에 직렬화하고 나중에 이 파일을 저장한 다음 데이터를 다시 읽고 메모리로 다시 역직렬화하는 예제를 보여 줍니다. 여기서는 직렬화 형식으로 JSON을 사용하지만, 데이터의 특성 및 앱의 보안 요구 사항에 가장 적합하다고 생각되는 형식으로 데이터를 저장할 수 있습니다.

using System.Text.Json;
using System.IO;

// Data to be written to the file system, and read back later
List<Customer> customers = ...;

// Serialize and save
string fileName = ...;
var serializedData = JsonSerializer.Serialize(customers);
File.WriteAllText(fileName, serializedData);
...

// Read and deserialize
var rawData = File.ReadAllText(fileName);
customers = JsonSerializer.Deserialize<List<Customer>>(rawData);

앱 샌드박스에 액세스

이러한 XML 파일과 같은 느슨한 파일로 작업하는 경우 이를 파일 시스템의 적절한 위치에 저장해야 합니다. 이 데이터 중 일부는 중요할 수 있으며 다른 앱 또는 사용자가 쉽게 액세스할 수 있는 위치에 저장하고 싶지 않을 것입니다. .NET MAUI 앱은 앱 샌드박스를 제공합니다. 앱 샌드박스는 애플리케이션이 작동할 수 있는 프라이빗 영역입니다. 기본적으로 운영 체제를 제외한 다른 애플리케이션은 이 영역에 액세스할 수 없습니다. FileSystem 클래스의 AppDataDirectory 정적 속성을 사용하여 샌드박스에 액세스할 수 있습니다.

string path = FileSystem.AppDataDirectory;

이 코드에서 path 변수에는 애플리케이션이 사용할 파일을 저장할 수 있는 위치에 대한 파일 경로가 포함됩니다. 파일 시스템 사용 시기 섹션에 표시된 기술을 사용하여 이 폴더의 파일에 데이터를 읽고 쓸 수 있습니다.

참고

FileSystem.AppDataDirectory 속성은 디바이스별 경로의 추상화이며 Android, iOS 및 WinUI3의 서로 다른 폴더에 대해 평가합니다. 이 추상화를 사용하면 샌드박스가 실행되는 플랫폼으로부터 독립된 방식으로 샌드박스를 참조하는 코드를 작성할 수 있습니다. 코드에서 디바이스별 경로를 명시적으로 참조하는 대신 이 추상화를 사용합니다.

iOS 앱에서 데이터를 저장하기 위한 지침

Apple은 파일을 저장해야 하는 위치에 대한 iOS 지침을 규정했습니다. 기본적으로 기본 폴더 위치는 두 개가 있습니다.

  • 라이브러리 폴더: 이 폴더는 앞에서 설명한 대로 FileSystem.AppDataDirectory 속성에 의해 반환됩니다. Library 폴더는 앱에서 생성한 데이터를 저장할 때 사용합니다.

  • 문서 폴더: 다음 코드 조각은 docFolder 변수에서 이 폴더를 참조하는 방법을 보여줍니다. Documents 폴더는 사용자가 생성한 데이터만 저장하는 데 사용하세요. 이 데이터는 사용자 동작에 직접 응답하여 만들어집니다. 예를 들어 Microsoft Word와 같은 텍스트 편집 애플리케이션을 만드는 경우 문서 폴더에 문서를 저장합니다.

    string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    

데이터베이스를 사용하는 경우

데이터 관계가 있거나 시간에 따라 데이터를 필터링하려는 경우에는 로컬 데이터베이스를 사용하는 것이 좋습니다. 예를 들어 소셜 미디어 시나리오에서 각 게시물에는 타임스탬프와 콘텐츠와 같은 게시물에 대한 데이터가 포함됩니다. 각 게시물에는 이것을 게시한 사용자와의 관계도 있습니다. 게시물 간의 데이터 중복을 방지하고 데이터 검색의 효율성을 높이기 위해서는 이러한 관계를 데이터베이스에 표시하는 것이 합리적입니다.

SQLite 데이터베이스는 파일이므로 적절한 위치에 저장해야 합니다. 이상적으로는 샌드박스의 AppDataDirectory 폴더 아래에 폴더를 만들고 이 폴더에 데이터베이스를 만들어야 합니다.

1.

사용자가 음악을 만들 수 있는 iOS .NET MAUI 애플리케이션을 빌드한다고 가정해 보겠습니다. 사용자가 자신의 작업을 파일에 저장했다가 애플리케이션을 다시 시작하면 중단된 부분에서 작업을 계속할 수 있게 하려고 합니다. iOS 앱 샌드박스에서는 이 파일을 어떤 폴더에 저장하면 될까요?

2.

애플리케이션 실행 간에 액세스할 수 있도록 간단한 데이터를 저장한다고 가정하겠습니다. 가장 적합한 데이터 스토리지 옵션은 무엇인가요?