다음을 통해 공유


애플리케이션 설정 관리

이 콘텐츠는 ‘.NET MAUI를 사용하는 엔터프라이즈 애플리케이션 패턴’ eBook에서 발췌한 것으로, .NET Docs에서 제공되거나 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공됩니다.

‘.NET MAUI를 사용하는 엔터프라이즈 애플리케이션 패턴’ 전자책 표지 썸네일

설정을 사용하면 코드에서 앱의 동작을 구성하는 데이터를 분리할 수 있으므로 앱을 다시 빌드하지 않고도 동작을 변경할 수 있습니다. 설정에는 앱 설정과 사용자 설정의 두 가지 유형이 있습니다.

앱 설정은 앱이 만들고 관리하는 데이터입니다. 고정 웹 서비스 엔드포인트, API 키 및 런타임 상태와 같은 데이터를 포함할 수 있습니다. 앱 설정은 핵심 기능에 연결되며 해당 앱에만 의미가 있습니다.

사용자 설정은 앱의 동작에 영향을 미치고 자주 다시 조정할 필요가 없는 앱의 사용자 지정 가능한 설정입니다. 예를 들어 앱에서 사용자가 데이터를 검색할 위치와 이를 화면에 표시하는 방법을 지정할 수 있습니다.

설정 인터페이스 만들기

기본 설정 관리자는 애플리케이션에서 직접 사용할 수 있지만 애플리케이션을 기본 설정 관리자 구현과 긴밀하게 결합하는 단점이 있습니다. 이 결합은 애플리케이션이 동작을 가로챌 직접적인 방법이 없으므로 단위 테스트를 만들거나 기본 설정 관리의 기능을 확장하는 것이 제한된다는 것을 의미합니다. 이 문제를 해결하기 위해 기본 설정 관리를 위한 프록시로 작동하도록 인터페이스를 만들 수 있습니다. 인터페이스를 사용하면 요구 사항에 맞는 구현을 제공할 수 있습니다. 예를 들어, 단위 테스트를 작성할 때 필요에 따라 특정 설정을 적용할 수 있으며 인터페이스는 테스트에 대해 이 데이터를 일관되게 설정하는 쉬운 방법을 제공합니다. 다음 코드 예제에서는 eShop 다중 플랫폼 앱의 인터페이스를 보여줍니다 ISettingsService .

namespace eShop.Services.Settings;

public interface ISettingsService
{
    string AuthAccessToken { get; set; }
    string AuthIdToken { get; set; }
    bool UseMocks { get; set; }
    string IdentityEndpointBase { get; set; }
    string GatewayShoppingEndpointBase { get; set; }
    string GatewayMarketingEndpointBase { get; set; }
    bool UseFakeLocation { get; set; }
    string Latitude { get; set; }
    string Longitude { get; set; }
    bool AllowGpsLocation { get; set; }
}

설정 추가

.NET MAUI에는 사용자의 런타임 설정을 저장하는 방법을 제공하는 기본 설정 관리자가 포함되어 있습니다. 이 기능은 Microsoft.Maui.Storage.Preferences 클래스를 사용하여 애플리케이션 내의 어디에서나 액세스할 수 있습니다. 기본 설정 관리자는 각 플랫폼에서 제공하는 네이티브 설정 관리를 사용하는 동안 앱 및 사용자 설정을 유지하고 검색하기 위한 일관된 형식 안전 플랫폼 간 접근 방식을 제공합니다. 또한 데이터 바인딩을 사용하여 라이브러리에서 노출하는 설정 데이터에 액세스하는 것은 간단합니다. 자세한 내용은 Microsoft 개발자 센터의 기본 설정을 참조하세요.

기본 설정은 비교적 작은 데이터를 저장하는 데 사용됩니다. 더 크거나 더 복잡한 데이터를 저장해야 하는 경우 로컬 데이터베이스 또는 파일 시스템을 사용하여 데이터를 저장하는 것이 좋습니다.

애플리케이션은 Preferences 클래스를 사용하여 ISettingsService 인터페이스를 구현합니다. 아래 코드는 eShop 다중 플랫폼 앱이 SettingsServiceUseMocks 속성을 구현하는 방법을 보여 줍니다AuthTokenAccess.

public sealed class SettingsService : ISettingsService
{
    private const string AccessToken = "access_token";
    private const string AccessTokenDefault = string.Empty;

    private const string IdUseMocks = "use_mocks";
    private const bool UseMocksDefault = true;

    public string AuthAccessToken
    {
        get => Preferences.Get(AccessToken, AccessTokenDefault);
        set => Preferences.Set(AccessToken, value);
    }

    public bool UseMocks
    {
        get => Preferences.Get(IdUseMocks, UseMocksDefault);
        set => Preferences.Set(IdUseMocks, value);
    }
}

각 설정은 프라이빗 키, 프라이빗 기본값 및 공용 속성으로 구성됩니다. 키는 항상 고유한 이름을 정의하는 const 문자열이며 설정의 기본값은 필수 형식의 정적 읽기 전용 값 또는 상수 값입니다. 기본값을 제공하면 설정되지 않은 설정을 검색할 경우 유효한 값을 사용할 수 있습니다. 이 서비스 구현은 애플리케이션 전체의 뷰 모델 또는 기타 서비스에 사용하기 위해 애플리케이션에 종속성 주입을 통해 제공할 수 있습니다.

사용자 설정에 대한 데이터 바인딩

eShop 다중 플랫폼 앱 SettingsView 에서 사용자가 런타임에 구성할 수 있는 여러 설정을 노출합니다. 이러한 설정에는 앱이 Docker 컨테이너로 배포된 마이크로 서비스에서 데이터를 검색해야 하는지 아니면 앱이 인터넷 연결이 필요하지 않은 모의 서비스에서 데이터를 검색해야 하는지 여부를 구성하는 것이 포함됩니다. 컨테이너화된 마이크로 서비스에서 데이터를 검색할 때 마이크로 서비스에 대한 기본 엔드포인트 URL을 지정해야 합니다. 아래 이미지는 사용자가 컨테이너화된 마이크로 서비스에서 데이터를 검색하도록 선택한 경우의 SettingsView를 보여줍니다.

eShop 다중 플랫폼 앱에서 노출하는 사용자 설정입니다.

데이터 바인딩을 사용하여 ISettingService 인터페이스에서 노출하는 설정을 검색하고 설정할 수 있습니다. 이는 뷰 바인딩의 컨트롤을 통해 이루어지며 ISettingService 인터페이스의 속성에 액세스하고 값이 변경된 경우 속성 변경 알림을 발생시키는 모델 속성을 볼 수 있습니다.

다음 코드 예제에서는 사용자가 컨테이너화된 마이크로 서비스에 대한 base ID 엔드포인트 URL을 입력할 수 있는 SettingsViewEntry 컨트롤을 보여줍니다.

<Entry Text="{Binding IdentityEndpoint, Mode=TwoWay}" />

Entry 컨트롤은 양방향 바인딩을 사용하여 SettingsViewModel 클래스의 IdentityEndpoint 속성에 바인딩됩니다. 다음 코드 예제에서는 IdentityEndpoint 속성을 보여줍니다.

private readonly ISettingsService _settingsService;

private string _identityEndpoint;

public SettingsViewModel(
    ILocationService locationService, IAppEnvironmentService appEnvironmentService,
    IDialogService dialogService, INavigationService navigationService, ISettingsService settingsService)
    : base(dialogService, navigationService, settingsService)
{
    _settingsService = settingsService;

    _identityEndpoint = _settingsService.IdentityEndpointBase;
}

public string IdentityEndpoint
{
    get => _identityEndpoint;
    set
    {
        SetProperty(ref _identityEndpoint, value);

        if (!string.IsNullOrWhiteSpace(value))
        {
            UpdateIdentityEndpoint();
        }
    }
}

IdentityEndpoint 속성이 설정되면 제공된 값이 유효한 경우 UpdateIdentityEndpoint 메서드가 호출됩니다. 다음 코드 예제는 UpdateIdentityEndpoint 메서드를 보여줍니다.

private void UpdateIdentityEndpoint()
{
    _settingsService.IdentityEndpointBase = _identityEndpoint;
}

이 메서드는 IdentityEndpointBase 인터페이스 구현의 ISettingService 속성을 사용자가 입력한 base 엔드포인트 URL 값으로 업데이트합니다. SettingsService 클래스가 _settingsService에 대한 구현으로 제공되는 경우 값은 플랫폼별 스토리지에 유지됩니다.

요약

설정을 사용하면 코드에서 앱의 동작을 구성하는 데이터를 분리할 수 있으므로 앱을 다시 빌드하지 않고도 동작을 변경할 수 있습니다. 앱 설정은 앱이 만들고 관리하는 데이터이며, 사용자 설정은 앱의 동작에 영향을 미치고 자주 다시 조정할 필요가 없는 앱의 사용자 지정 가능한 설정입니다.

Microsoft.Maui.Storage.Preferences 클래스는 앱 및 사용자 설정을 유지 및 검색하기 위한 일관된 형식 안전 플랫폼 간 접근 방식을 제공합니다.