하나의 어플리케이션이 호스트 되는 환경은 다양하게 구성(Configuration)될 수 있습니다. 흔한 예로 개발 환경과 운영 환경이 나눠지는 경우가 있습니다. 그리고 분산된 어플리케이션들과 통신하기 위해 각 어플리케이션에 대한 호스팅 정보를 구성하는데 사용되기도 합니다. 또한 구성 요소를 통해 서버의 설정이나 로거의 메시지 출력 수준을 조정하는 등 모듈의 동작 수준을 설정할 수 있습니다.
이러한 경우, 코드와 구성 요소를 분리하여 코드 변경 없이 동작 수준을 조정할 수 있는 방법을 고려해야 합니다.
.NET에서는 다양한 구성 공급자를 제공하고 통합된 보기 환경을 위해 추상화된 인터페이스를 제공합니다.(Configuration - .NET | Microsoft Learn)
이번 글에서는 클래스를 이용하여 구성 요소에 대한 강력한 형식의 접근을 제공하는 옵션 패턴에 대해 설명합니다.
옵션 패턴을 통해 애플리케이션에서 사용하는 모든 구성 요소는 하나의 거대한 클래스가 아닌, 사용 목적에 따라 별개의 세부 클래스로 분리할 수 있습니다. 이를 통해 각 설정은 다른 설정에 종속되거나 결합되지 않으며, 설정을 사용하는 클래스는 자신이 필요로 하는 설정에만 의존하게 됩니다.
글에서 사용한 코드는 여기를 참조 바랍니다.
json 파일을 구성 요소로 사용하고 옵션 패턴을 통해 값을 읽는 방법을 알아보겠습니다.
먼저 사용할 json 파일은 다음과 같습니다.
{
"TestSettingValue": "just string value",
"CustomConfigurationOptions": {
"Deadline": "00:00:30",
"Enabled": true,
"Retry": 2,
"Level": "Warning"
}
}
옵션 패턴은 IOpions<TOpions> 형식으로 제공됩니다. (IOpions 외에 다른 인터페이스 형식도 사용할 수 있습니다. 다른 인터페이스 형식에 대해서는 여기에서 설명합니다.) CustomConfigurationOptions의 값을 사용하는 시나리오를 생각해봅시다. 먼저 CustomConfigurationOptions 클래스를 만듭니다.
public class CustomConfigurationOptions
{
public TimeSpan Deadline { get; set; }
public bool Enabled { get; set; }
public int Retry { get; set; }
public string Level { get; set; }
}
옵션 패턴에 사용되는 클래스는 다음과 같은 제약 사항을 따라야 합니다
json 파일에 설정된 구성 요소를 불러들이고 클래스를 통해 값을 읽습니다. program.cs에 다음 코드를 추가합니다.