IRONSOFTWAREHOME

C# 세트 플래그 열거형 이해하기: 플래그 지정

C#의 옵션 패턴을 10분 안에 배우기

Tim Corey

10분 39초

구성 관리는 C#으로 확장 가능하고 유지 관리가 용이한 애플리케이션을 구축하는 데 필수적인 요소입니다. 구성 설정을 처리하는 가장 효과적인 방법 중 하나는 옵션 패턴을 사용하는 것입니다. Tim Corey는 자신의 비디오 "C#의 옵션 패턴 10분 이내 배우기" 에서 이 패턴에 대한 간결하면서도 통찰력 있는 설명과 효율적인 구현 방법을 제공합니다. 이 글에서는 Tim의 설명과 영상 시연을 통해 옵션 패턴을 살펴보겠습니다.

소개

Tim은 구성 파일에서 정보를 가져와 의존성 주입(DI)에 삽입하는 강력하면서도 간단한 방법인 옵션 패턴을 소개하면서 시작합니다. 그는 이 패턴의 몇 가지 장점을 다음과 같이 강조합니다.

  • 런타임 값 변경을 관리할 수 있는 기능.
  • 내장 데이터 유효성 검사 지원 기능.
  • Blazor 애플리케이션을 포함한 다양한 C# 프로젝트 유형과의 호환성.

팀은 평소에는 심도 있는 기술 교육을 제공하지만, 이 영상은 옵션 패턴 구현을 위한 빠른 시작 가이드 로 제작되었다고 강조합니다.

프로젝트 설정

Tim은 먼저 Visual Studio를 열고 Blazor 웹 앱(서버 측 렌더링만 해당)을 실행합니다. 그는 시연 속도를 높이기 위해 이미 몇 가지 수정을 가했습니다. 핵심 설정은 다음과 같습니다.

  • 세 개의 키-값 쌍을 포함하는 CloudInfo 섹션을 가진 appsettings.json 파일 생성.
  • 이러한 구성 값에 매핑되는 CloudInfoOptions이라는 일반 CLR 객체 (POCO) 모델 사용.

구성 파일

appsettings.json 파일에는 다음 섹션이 포함되어 있습니다:

{
  "CloudInfo": {
    "Storage": "Azure Storage",
    "Website": "Azure Static Web Apps",
    "API": "Azure Web App"
  }
}
JSON

틈은 appsettings.json을 사용 중이지만 구성 값은 다음에서도 올 수 있다고 명확히 합니다:

  • appsettings.Development.json
  • secrets.json
  • 환경 변수

바인딩 구성을 옵션에 연결

이제 틈은 구성 값을 CloudInfoOptions 클래스와 바인딩하고 DI에 주입하는 방법을 설명합니다.

Program.cs 파일에 옵션 등록하기

Program.cs에서 틈은 builder.Services 내부에 다음 줄을 추가합니다:

builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));

이는 appsettings.json의 CloudInfo 섹션을 CloudInfoOptions 클래스에 바인딩합니다. 팀은 이 단계를 통해 의존성 주입에서 값을 사용할 수 있게 된다고 언급합니다.

Razor 컴포넌트에 옵션 삽입하기

틈은 홈 페이지 컴포넌트 (Index.razor)로 이동하여 구성 값을 동적으로 표시하도록 수정합니다.

그는 컴포넌트에 IOptions 인터페이스를 주입합니다:

@inject IOptions<CloudInfoOptions> CloudInfoOptions
Text

실제 값을 검색하기 위해 그는 이를 OnInitialized 내에 할당합니다:

protected override void OnInitialized()
{
    CloudInfo = CloudInfoOptions.Value;
}

틈은 IOptions<t>이 구성 값의 싱글톤 인스턴스를 제공하며, 이는 애플리케이션 전체 수명 동안 일정하게 유지됨을 설명합니다. 애플리케이션이 실행되면 구성 값이 페이지에 올바르게 표시됩니다.

다양한 옵션 인터페이스 살펴보기

Tim은 옵션 패턴을 사용하는 세 가지 다른 방법을 소개합니다.

1. 싱글턴 옵션

기본적으로, IOptions<t>싱글톤 인스턴스를 제공합니다. Tim은 앱이 실행 중인 동안 구성 파일을 업데이트하면 앱을 다시 시작하지 않는 한 변경 사항이 반영되지 않는다는 것을 보여줍니다.

2. Scoped 옵션 - IOptionsSnapshot<t> 사용

요청별 업데이트를 활성화하기 위해 Tim은 주입 방식을 다음과 같이 수정합니다.

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
Text

이렇게 하면 모든 새로운 HTTP 요청에 최신 구성 값이 적용됩니다. 틈은 appsettings.json을 수정하고, 페이지를 새로고침하여 업데이트된 값이 이제 즉시 나타남을 보여줌으로써 이를 테스트합니다.

그는 IOptionsSnapshot<t>앱을 재시작하지 않고도 변경 사항이 반영되어야 하는 시나리오에서 유용하지만 실시간 모니터링이 필요하지 않음을 설명합니다.

3. 변경 모니터링 - IOptionsMonitor<t> 사용

마지막으로, 틈은 실시간 변경 감지를 가능하게 하는 IOptionsMonitor<t>을 소개합니다. 그는 주사를 다음과 같이 업데이트합니다:

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
Text

IOptionsSnapshot과는 달리, 이는 요청당 업데이트되지만, IOptionsMonitor<t>구성 값이 변경될 때 이벤트를 트리거할 수 있습니다. 이는 구성 변경에 동적으로 대응해야 할 때 특히 유용합니다.

틈은 IOptionsMonitor<t>싱글톤에 의해 지원되지만 기본 구성 파일이 변경될 때 값이 동적으로 새로고침될 수 있음을 주목합니다.

결론

팀은 영상 말미에 세 가지 접근 방식의 주요 차이점을 요약합니다.

인터페이스일생변경 사항 업데이트
IOptions<t>하나씩 일어나는 것아니요
IOptionsSnapshot<t>범위요청에 따라
IOptionsMonitor<t>하나씩 일어나는 것

그는 옵션 패턴이 구성 관리를 단순화하는 동시에 이러한 다양한 변형을 이해하는 것이 프로젝트 요구 사항에 따라 올바른 접근 방식을 선택하는 데 도움이 된다고 강조합니다.

Tim의 접근 방식을 따르면 개발자는 애플리케이션 설정을 효율적으로 관리하고 , 원활한 의존성 주입을 보장하며, 런타임 구성 변경을 효과적으로 처리할 수 있습니다. 더 잘 이해하시려면 전체 영상을 시청해 주시고, 그의 채널을 방문하시면 C#에 대한 더 유익한 영상들을 보실 수 있습니다.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

OR
bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.