설정 및 기타 앱 데이터 저장 및 검색

중요합니다

이 문서에 설명된 ApplicationData API는 패키지된 앱용으로 설계되었습니다. 패키지되지 않은 앱은 시스템 관리 앱 데이터 저장소에 액세스할 수 없으며 직접 파일 I/O 또는 레지스트리 액세스와 같은 대체 스토리지 메커니즘을 사용해야 합니다.

앱 데이터는 특정 앱 에서 만들고 관리하는 변경 가능한 데이터입니다. 여기에는 런타임 상태, 앱 설정, 사용자 기본 설정, 참조 콘텐츠(예: 사전 앱의 사전 정의) 및 기타 설정이 포함됩니다. 앱 데이터는 사용자 데이터, 사용자가 앱을 사용할 때 만들고 관리하는 데이터와 다릅니다. 사용자 데이터에는 문서 또는 미디어 파일, 전자 메일 또는 통신 기록 또는 사용자가 만든 콘텐츠를 보관하는 데이터베이스 레코드가 포함됩니다. 사용자 데이터는 둘 이상의 앱에 유용하거나 의미가 있을 수 있습니다. 사용자가 문서와 같이 앱 자체와 독립적으로 엔터티로 조작하거나 전송하려는 데이터인 경우가 많습니다.

앱 데이터에 대한 중요한 참고 사항: 앱 데이터의 수명은 앱의 수명에 연결됩니다. 앱이 제거되면 결과적으로 모든 앱 데이터가 손실됩니다. 앱 데이터를 사용하여 사용자 데이터 또는 사용자가 중요하고 대체할 수 없는 것으로 인식할 수 있는 모든 것을 저장하지 마세요. 이러한 종류의 정보를 저장하는 데는 사용자의 라이브러리와 Microsoft OneDrive 사용하는 것이 좋습니다. 앱 데이터는 앱별 사용자 기본 설정, 설정 및 즐겨찾기를 저장하는 데 적합합니다.

앱 데이터 형식

앱 데이터에는 설정과 파일의 두 가지 유형이 있습니다.

Settings

설정을 사용하여 사용자 기본 설정 및 애플리케이션 상태 정보를 저장합니다. 앱 데이터 API를 사용하면 설정을 쉽게 만들고 검색할 수 있습니다(이 문서의 뒷부분에서 몇 가지 예제를 보여 드리겠습니다).

앱 설정에 사용할 수 있는 데이터 형식은 다음과 같습니다.

  • UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double
  • Boolean
  • Char16, String
  • DateTime, TimeSpan
  • GUID, Point, Size, Rect
  • ApplicationDataCompositeValue: 원자성으로 직렬화 및 역직렬화해야 하는 관련 앱 설정 집합입니다. 복합 설정을 사용하여 상호 종속된 설정의 원자성 업데이트를 쉽게 처리할 수 있습니다. 시스템은 동시 액세스 및 로밍 중에 복합 설정의 무결성을 보장합니다. 복합 설정은 적은 양의 데이터에 최적화되어 있으며 큰 데이터 집합에 사용하는 경우 성능이 저하될 수 있습니다.

Files

파일을 사용하여 이진 데이터를 저장하거나 사용자 지정된 직렬화된 형식을 사용하도록 설정합니다.

앱 데이터 저장소에 앱 데이터 저장

앱이 설치되면 시스템은 설정 및 파일에 대한 자체 사용자별 데이터 저장소를 제공합니다. 시스템이 물리적 스토리지를 관리하여 데이터가 다른 앱 및 다른 사용자와 격리되도록 하기 때문에 이 데이터가 있는 위치 또는 방법을 알 필요가 없습니다. 로밍셋은 Microsoft Store 업데이트를 통해 유지되지 않을 수 있지만 사용자가 앱에 업데이트를 설치할 때 일반적으로 이러한 데이터 저장소의 콘텐츠를 유지합니다(데이터 탐색 참조). 앱 업데이트를 유지해야 하는 설정의 경우 LocalSettings를 사용합니다. 앱이 제거되면 시스템에서 이러한 데이터 저장소의 콘텐츠를 완전하고 깔끔하게 제거합니다.

앱 데이터 저장소 내에서 각 앱에는 시스템 정의 루트 디렉터리가 있습니다. 하나는 로컬 파일용, 다른 하나는 로밍 파일용, 다른 하나는 임시 파일용입니다. 앱은 이러한 각 루트 디렉터리에 새 파일 및 새 컨테이너를 추가할 수 있습니다.

로컬 앱 데이터

로컬 앱 데이터는 앱 세션 간에 유지되어야 하며 로밍 앱 데이터에 적합하지 않은 모든 정보에 사용해야 합니다. 다른 디바이스에 적용되지 않는 데이터도 여기에 저장해야 합니다. 저장된 로컬 데이터에 대한 일반적인 크기 제한은 없습니다. 로밍하는 데 의미가 없는 데이터 및 큰 데이터 집합에 로컬 앱 데이터 저장소를 사용합니다. 로컬 앱 데이터는 앱 업데이트를 통해 안정적으로 유지되므로 LocalSettings는 업데이트 Microsoft Store 유지되어야 하는 사용자 기본 설정 및 앱 상태에 권장되는 선택입니다.

로컬 앱 데이터 저장소 검색

로컬 앱 데이터를 읽거나 쓰려면 먼저 로컬 앱 데이터 저장소를 검색해야 합니다. 로컬 앱 데이터 저장소를 검색하려면 ApplicationData.LocalSettings 속성을 사용하여 앱의 로컬 설정을 ApplicationDataContainer 개체로 가져옵니다. ApplicationData.LocalFolder 속성을 사용하여 StorageFolder 개체에서 파일을 가져옵니다. ApplicationData.LocalCacheFolder 속성을 사용하여 백업 및 복원에 포함되지 않은 파일을 저장할 수 있는 로컬 앱 데이터 저장소의 폴더를 가져옵니다.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

간단한 로컬 설정 만들기 및 검색

설정을 만들거나 쓰려면 ApplicationDataContainer.Values 속성을 사용하여 이전 단계에서 가져온 컨테이너의 localSettings 설정에 액세스합니다. 이 예제에서는 라는 exampleSetting설정을 만듭니다.

// Simple setting

localSettings.Values["exampleSetting"] = "Hello Windows";

설정을 검색하려면 설정을 만드는 데 사용한 것과 동일한 ApplicationDataContainer.Values 속성을 사용합니다. 이 예제에서는 방금 만든 설정을 검색하는 방법을 보여줍니다.

// Simple setting
Object value = localSettings.Values["exampleSetting"];

로컬 복합 값 만들기 및 검색

복합 값을 만들거나 쓰려면 ApplicationDataCompositeValue 개체를 만듭니다. 이 예제에서는 이름이 exampleCompositeSetting인 복합 설정을 만들어 localSettings 컨테이너에 추가합니다.

// Composite setting

Windows.Storage.ApplicationDataCompositeValue composite = 
    new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1;
composite["strVal"] = "string";

localSettings.Values["exampleCompositeSetting"] = composite;

이 예제에서는 방금 만든 복합 값을 검색하는 방법을 보여줍니다.

// Composite setting

Windows.Storage.ApplicationDataCompositeValue composite = 
   (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];

if (composite == null)
{
   // No data
}
else
{
   // Access data in composite["intVal"] and composite["strVal"]
}

로컬 파일 만들기 및 읽기

로컬 앱 데이터 저장소에서 파일을 만들고 업데이트하려면 Windows 같은 파일 API를 사용합니다. Storage.StorageFolder.CreateFileAsyncWindows. Storage.FileIO.WriteTextAsync. 이 예제에서는 컨테이너에 명명된 dataFile.txtlocalFolder 파일을 만들고 현재 날짜와 시간을 파일에 씁니다. ReplaceExisting 값은 CreationCollisionOption 열거형이 이미 있는 경우 파일을 바꾸도록 나타냅니다.

async void WriteTimestamp()
{
   Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter = 
       new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");

   StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt", 
       CreationCollisionOption.ReplaceExisting);
   await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTimeOffset.Now));
}

로컬 앱 데이터 저장소에서 파일을 열고 읽으려면 Windows 같은 파일 API를 사용합니다. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsyncWindows. Storage.FileIO.ReadTextAsync. 다음은 이전 단계에서 만든 파일을 열고 dataFile.txt 파일에서 날짜를 읽는 예제입니다. 다양한 위치에서 파일 리소스를 로드하는 방법에 대한 자세한 내용은 파일 리소스를 로드하는 방법을 참조하세요.

async void ReadTimestamp()
{
   try
   {
      StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
      String timestamp = await FileIO.ReadTextAsync(sampleFile);
      // Data is contained in timestamp
   }
   catch (Exception)
   {
      // Timestamp not found
   }
}

로밍 데이터

경고

로밍 데이터 및 설정은 Windows 11 기준으로 더 이상 지원되지 않습니다. 권장되는 대체는 Azure App Service입니다. Azure App Service 널리 지원되고, 잘 문서화되고, 신뢰할 수 있으며, iOS, Android 및 웹과 같은 플랫폼 간/에코시스템 간 시나리오를 지원합니다.

중요합니다

RoamingSettings 데이터는 Windows 10 경우에도 Microsoft Store 앱 업데이트를 통해 유지되지 않을 수 있습니다. 앱 업데이트를 유지해야 하는 설정의 경우 LocalSettings 를 대신 사용합니다.

임시 앱 데이터

임시 앱 데이터 저장소는 캐시처럼 작동합니다. 해당 파일은 로밍되지 않으며 언제든지 제거할 수 있습니다. 시스템 유지 관리 작업은 언제든지 이 위치에 저장된 데이터를 자동으로 삭제할 수 있습니다. 사용자는 디스크 정리를 사용하여 임시 데이터 저장소에서 파일을 지울 수도 있습니다. 임시 앱 데이터는 앱 세션 중에 임시 정보를 저장하는 데 사용할 수 있습니다. 필요한 경우 시스템이 사용된 공간을 회수할 수 있으므로 이 데이터가 앱 세션이 끝날 때까지 유지된다는 보장은 없습니다. 위치는 temporaryFolder 속성을 통해 사용할 수 있습니다.

임시 데이터 컨테이너 검색

ApplicationData.TemporaryFolder 속성을 사용하여 파일을 가져옵니다. 다음 단계에서는 이 단계의 변수를 temporaryFolder 사용합니다.

Windows.Storage.StorageFolder temporaryFolder = ApplicationData.Current.TemporaryFolder;

임시 파일 만들기 및 읽기

임시 앱 데이터 저장소에서 파일을 만들고 업데이트하려면 파일 API(예: Windows)를 사용합니다. Storage.StorageFolder.CreateFileAsyncWindows. Storage.FileIO.WriteTextAsync. 이 예제에서는 컨테이너에 명명된 dataFile.txttemporaryFolder 파일을 만들고 현재 날짜와 시간을 파일에 씁니다. ReplaceExisting 값은 CreationCollisionOption 열거형이 이미 있는 경우 파일을 바꾸도록 나타냅니다.

async void WriteTimestamp()
{
   Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter = 
       new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");

   StorageFile sampleFile = await temporaryFolder.CreateFileAsync("dataFile.txt", 
       CreateCollisionOption.ReplaceExisting);
   await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTimeOffset.Now));
}

임시 앱 데이터 저장소에서 파일을 열고 읽으려면 파일 API(예: Windows)를 사용합니다. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsyncWindows. Storage.FileIO.ReadTextAsync. 다음은 이전 단계에서 만든 파일을 열고 dataFile.txt 파일에서 날짜를 읽는 예제입니다. 다양한 위치에서 파일 리소스를 로드하는 방법에 대한 자세한 내용은 파일 리소스를 로드하는 방법을 참조하세요.

async void ReadTimestamp()
{
   try
   {
      StorageFile sampleFile = await temporaryFolder.GetFileAsync("dataFile.txt");
      String timestamp = await FileIO.ReadTextAsync(sampleFile);
      // Data is contained in timestamp
   }
   catch (Exception)
   {
      // Timestamp not found
   }
}

컨테이너를 사용하여 앱 데이터 구성

앱 데이터 설정 및 파일을 구성하는 데 도움이 되도록 디렉터리에서 직접 작업하는 대신 컨테이너(ApplicationDataContainer 개체로 표시됨)를 만듭니다. 로컬, 로밍 및 임시 앱 데이터 저장소에 컨테이너를 추가할 수 있습니다. 컨테이너는 최대 32단계 깊이까지 중첩할 수 있습니다.

설정 컨테이너를 만들려면 ApplicationDataContainer.CreateContainer 메서드를 호출합니다. 이 예제에서는 명명 exampleContainer 된 로컬 설정 컨테이너를 만들고 명명 exampleSetting된 설정을 추가합니다. Always 값은 ApplicationDataCreateDisposition 열거형이 없는 경우 컨테이너가 생성되었음을 나타냅니다.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Setting in a container
Windows.Storage.ApplicationDataContainer container = 
   localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);

if (localSettings.Containers.ContainsKey("exampleContainer"))
{
   localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";
}

앱 설정 및 컨테이너 삭제

앱에 더 이상 필요하지 않은 간단한 설정을 삭제하려면 ApplicationDataContainerSettings.Remove 메서드를 사용합니다. 다음은 앞에서 만든 로컬 설정을 삭제하는 exampleSetting 예제입니다.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Delete simple setting

localSettings.Values.Remove("exampleSetting");

복합 설정을 삭제하려면 ApplicationDataCompositeValue.Remove 메서드를 사용합니다. 다음은 이전 예제에서 만든 로컬 exampleCompositeSetting 복합 설정을 삭제하는 예제입니다.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Delete composite setting

localSettings.Values.Remove("exampleCompositeSetting");

컨테이너를 삭제하려면 ApplicationDataContainer.DeleteContainer 메서드를 호출합니다. 다음은 앞에서 만든 로컬 exampleContainer 설정 컨테이너를 삭제하는 예제입니다.

Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = 
    Windows.Storage.ApplicationData.Current.LocalFolder;

// Delete container

localSettings.DeleteContainer("exampleContainer");

앱 데이터 버전 관리

필요에 따라 앱에 대한 앱 데이터의 버전을 지정할 수 있습니다. 이렇게 하면 이전 버전의 앱과 호환성 문제를 일으키지 않고 앱 데이터의 형식을 변경하는 앱의 이후 버전을 만들 수 있습니다. 앱은 데이터 저장소에서 앱 데이터의 버전을 확인하고, 버전이 앱에서 예상하는 버전보다 작으면 앱에서 앱 데이터를 새 형식으로 업데이트하고 버전을 업데이트해야 합니다. 자세한 내용은Application.Version 속성 및 ApplicationData.SetVersionAsync 메서드를 참조하세요.