다음을 통해 공유


ASP.NET Core Blazor 환경

비고

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 10 버전을 참조하세요.

경고

이 버전의 ASP.NET Core는 더 이상 지원되지 않습니다. 자세한 내용은 .NET 및 .NET Core 지원 정책을 참조 하세요. 현재 버전을 보려면 이 문서의 .NET 9 버전 을 참조하십시오.

이 기사는 앱에서 Blazor을 구성하고 읽는 방법을 설명합니다.

애플리케이션을 로컬에서 실행할 때 환경은 기본적으로 Development로 설정됩니다. 앱이 게시되면 환경은 Production로 기본 설정됩니다.

다음의 관례를 권장합니다:

  • 항상 로컬 개발에서는 "Development" 환경 이름을 사용하세요. ASP.NET Core 프레임워크가 애플리케이션의 로컬 개발 실행을 위해 애플리케이션 및 도구를 구성할 때 정확히 그 이름을 기대하기 때문입니다.

  • 테스트, 스테이징 및 프로덕션 환경에서는 항상 앱을 게시하고 배포하십시오. 게시된 앱의 경우 원하는 환경 네이밍 체계를 사용할 수 있지만, 환경 이름과 정확히 일치하는 환경 세그먼트의 대소문자가 포함된 앱 설정 파일 이름을 항상 사용하십시오. 스테이징에는 환경 이름으로 "Staging" (대문자 "S")를 사용하고, 이를 맞추기 위해 앱 설정 파일의 이름을 "appsettings.Staging.json"로 지정하십시오. 프로덕션에서는 "Production" (대문자 "P")를 환경 이름으로 사용하고, 앱 설정 파일을 동일하게 이름 지정하십시오 (appsettings.Production.json).

환경을 설정하세요

환경은 다음 접근 방식 중 하나를 사용하여 설정됩니다:

클라이언트 Blazor Web App에서 환경은 개발자가 상호 작용하지 않는 HTML 주석을 통해 서버에서 결정됩니다.

<!--Blazor-WebAssembly:{"environmentName":"Development", ...}-->

독립 실행형 Blazor WebAssembly 앱의 경우 앱의 프로젝트 파일(<WasmApplicationEnvironmentName>)에서 MSBuild 속성을 사용하여 환경을 .csproj 설정합니다. 다음 예제에서는 Staging 환경을 설정합니다.

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

기본 환경은 Development 빌드 및 Production 게시용입니다.

빌드/게시 작업 중에 독립 실행형 Blazor WebAssembly 앱에서 환경을 설정하는 몇 가지 방법과 클라이언트에서 시작 또는 실행되는 앱에 대한 한 가지 방법이 있습니다.

  • dotnet build 또는 dotnet publish이 실행될 때 속성 값을 설정합니다. 앱을 게시할 때 다음 예제에서 Staging 환경을 설정합니다.

    dotnet publish -p:WasmApplicationEnvironmentName=Staging
    
  • Visual Studio에서 앱의 구성에 따라 빌드 또는 게시하는 동안 속성을 설정합니다. 앱의 프로젝트 파일 또는 게시 구성 파일(.pubxml)에서 다음 속성 그룹을 사용할 수 있습니다. 사용 중인 다른 빌드 구성에 대한 추가 속성 그룹을 추가합니다.

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • 게시 프로필의 사용에 따라 환경을 설정할 수 있습니다. 다음 예제에서 첫 번째 조건은 게시 프로필이 사용되지 않는 경우(프로필 없이 빌드 및 게시 작업에 모두 적용됨) 환경을 Development 설정하는 반면, 두 번째 조건은 게시 프로필이 사용되는 시점으로 환경을 설정하는 방법을 Production 다룹니다.

    <PropertyGroup Condition="'$(PublishProfile)' == ''">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(PublishProfile)' != ''">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • 사용자 지정 서버 쪽 웹 API 엔드포인트를 만듭니다. 독립 실행형 Blazor WebAssembly 앱은 실행되는 동안 앱 시작 시 또는 주문형 웹 API에서 해당 환경을 요청합니다. 값은 WebAssemblyStartOptions에 전달되거나 withApplicationEnvironment와 함께 전달되어야 합니다.

    비고

    문서 링크는 .NET 참조 소스를 가리키며, 일반적으로 저장소의 기본 브랜치를 로드합니다. 이는 .NET의 다음 릴리스를 위한 현재 개발 상태를 나타냅니다. 특정 릴리스를 위한 태그를 선택하려면 Switch branches or tags 드롭다운 목록을 사용하세요. 자세한 내용은 ASP.NET Core 소스 코드(dotnet/AspNetCore.Docs #26205)의 버전 태그를 선택하는 방법을 참조하세요.

클라이언트에서 Blazor Web App에 대한 환경은 서버로부터 미들웨어를 통해 결정되며, 이 미들웨어는 Blazor-Environment라는 이름의 헤더를 통해 환경을 브라우저로 전달합니다. ko-KR: 헤더는 클라이언트 측 WebAssemblyHost 파일 (Program)에서 WebAssemblyHostBuilder.CreateDefault이 생성될 때 환경을 설정합니다.

단독 Blazor WebAssembly 앱이 로컬에서 실행되는 경우, 개발 서버는 호스팅 환경에서 받은 환경 이름과 함께 Blazor-Environment 헤더를 추가합니다. 호스팅 환경은 프로젝트의 ASPNETCORE_ENVIRONMENT 파일에 의해 설정된 Properties/launchSettings.json 환경 변수에서 환경을 설정합니다. 프로젝트 템플릿 Blazor WebAssembly에서 생성된 프로젝트의 환경 변수의 기본 값은 Development입니다. 자세한 내용은 헤더를 통해 클라이언트 측 환경 설정 섹션을 참조하십시오.

Blazor WebAssembly이라는 앱을 호스팅하는 클라이언트에서 환경은 Blazor-Environment 헤더를 통해 브라우저에 전달하는 미들웨어를 통해 서버를 통해 결정됩니다. ko-KR: 헤더는 클라이언트 측 WebAssemblyHost 파일 (Program)에서 WebAssemblyHostBuilder.CreateDefault이 생성될 때 환경을 설정합니다.

단독 Blazor WebAssembly 앱이 로컬에서 실행되는 경우, 개발 서버는 호스팅 환경에서 받은 환경 이름과 함께 Blazor-Environment 헤더를 추가합니다. 호스팅 환경은 프로젝트의 ASPNETCORE_ENVIRONMENT 파일에 의해 설정된 Properties/launchSettings.json 환경 변수에서 환경을 설정합니다. 프로젝트 템플릿 Blazor WebAssembly에서 생성된 프로젝트의 환경 변수의 기본 값은 Development입니다. 자세한 내용은 헤더를 통해 클라이언트 측 환경 설정 섹션을 참조하십시오.

로컬에서 개발 중 실행되는 앱의 경우, 앱은 Development 환경을 기본값으로 합니다. 앱을 게시하면 환경은 기본적으로 Production로 설정됩니다.

ASP.NET Core 앱 구성에 대한 일반적인 지침은 ASP.NET Core 런타임 환경을 참조하세요. 개발 및 테스트 중 환경 이외의 Development 환경에서 정적 파일이 있는 서버 쪽 앱 구성의 경우(예: StagingASP.NET Core의 정적 파일을 참조하세요.

클라이언트 측 환경을 Blazor 시작 구성으로 설정하세요.

호스트 이름에 Blazor가 포함되어 있으면 다음 예제는 Staging 환경에서 localhost을 시작합니다. 그렇지 않으면 환경이 기본값으로 설정됩니다.

Blazor Web App:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      webAssembly: {
        environment: "Staging"
      }
    });
  } else {
    Blazor.start();
  }
</script>

앞의 예제 {BLAZOR SCRIPT} 에서 자리 표시자는 스크립트 경로 및 파일 이름입니다 Blazor . 스크립트의 위치는 ASP.NET Core Blazor 프로젝트 구조를 참조하세요.

비고

Blazor Web App 설정에서 webAssembly>environment 속성을 설정하는 Blazor.start의 경우, 서버 측 환경을 environment 속성에 설정한 환경과 일치시키는 것이 좋습니다. 그렇지 않으면 서버의 미리 렌더링은 클라이언트에서 렌더링하는 것과 다른 환경에서 작동하므로 임의 효과가 발생합니다. 환경 설정에 대한 Blazor Web App일반적인 지침은 ASP.NET Core 런타임 환경을 참조하세요.

독립형 Blazor WebAssembly:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      environment: "Staging"
    });
  } else {
    Blazor.start();
  }
</script>

앞의 예제 {BLAZOR SCRIPT} 에서 자리 표시자는 스크립트 경로 및 파일 이름입니다 Blazor . 스크립트의 위치는 ASP.NET Core Blazor 프로젝트 구조를 참조하세요.

environment 속성을 사용하면 Blazor-Environment 헤더에 의해 설정된 환경을 무시합니다.

이전 접근 방식은 Blazor-Environment 헤더의 값을 변경하지 않고 클라이언트의 환경을 설정합니다. 또한 Blazor Web App가 글로벌 상호작용 WebAssembly 렌더링을 채택한 경우, 서버 프로젝트의 시작 환경에 대한 콘솔 로깅도 변경하지 않습니다.

독립 실행형 Blazor WebAssembly 앱 또는 .Client의 Blazor Web App 프로젝트에서 환경을 콘솔에 기록하려면, ProgramWebAssemblyHost로 생성한 후 프로젝트를 빌드하고 실행하는 줄 (WebAssemblyHostBuilder.CreateDefault) 이전에 다음 C# 코드를 await builder.Build().RunAsync(); 파일에 배치하십시오.

Console.WriteLine(
    $"Client Hosting Environment: {builder.HostEnvironment.Environment}");

Blazor 시작에 대한 자세한 내용은 ASP.NET Core Blazor 시작을 참조하세요.

헤더를 통해 클라이언트 측 환경을 설정하십시오.

Blazor WebAssembly 앱은 Blazor-Environment 헤더를 사용하여 환경을 설정할 수 있습니다. 구체적으로, _framework/blazor.boot.json 파일에 대해 응답 헤더를 설정해야 하지만 다른 Blazor 파일 요청을 위한 파일 서버 응답이나 전체 Blazor 배포에 대한 헤더를 설정해도 문제는 없습니다.

Blazor 프레임워크는 헤더 이름을 혼합된 대소문자로 된 케밥 케이스(Blazor-Environment)로 제공합니다. 그러나 사용자는 전부 소문자 또는 전부 대문자 케밥 케이스(blazor-environment, BLAZOR-ENVIRONMENT)를 사용할 수 있습니다.

로컬 개발 실행 시 Blazor의 내장 개발 서버를 사용하면, 프로젝트의 Blazor-Environment 파일에 있는 ASPNETCORE_ENVIRONMENT 환경 변수를 설정하여 Properties/launchSettings.json 헤더의 값을 제어할 수 있습니다. 개발 서버를 사용하여 로컬에서 실행할 때 앱 환경을 결정하는 우선 순위는 Blazor.start 구성 (environment 키)>Blazor-Environment 응답 헤더 (blazor.boot.json 파일) >ASPNETCORE_ENVIRONMENT 환경 변수 (launchSettings.json)입니다. 배포된 ASPNETCORE_ENVIRONMENT 앱에는 launchSettings.json 환경 변수(Blazor WebAssembly) 접근 방식을 사용할 수 없습니다. 이 기술은 개발 서버가 앱의 로컬 실행 시에만 작동합니다.

IIS

다음 IIS 예시에서, 사용자 지정 헤더 (Blazor-Environment)는 게시된 web.config 파일에 추가됩니다. web.config 파일은 bin/Release/{TARGET FRAMEWORK}/publish 폴더에 있으며, 여기에서 {TARGET FRAMEWORK} 플레이스홀더는 대상 프레임워크입니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    ...
    <httpProtocol>
      <customHeaders>
        <add name="Blazor-Environment" value="Staging" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

비고

IIS에서 앱이 web.config 폴더에 게시될 때 덮어쓰지 않도록 사용자 정의 publish 파일을 사용하는 방법은 ASP.NET Core Blazor WebAssembly를 IIS로 호스트하고 배포하기를 참조하십시오.

Nginx

Nginx 서버의 경우, add_header 지시문을 ngx_http_headers_module에서 사용하십시오.

http {
    server {
        ...
        location / {
            ...
            add_header Blazor-Environment "Staging";
        }
    }
}

자세한 내용은 다음 리소스를 참조하세요.

아파치

Apache 서버의 경우 모듈의 Header 지시문을 mod_headers 사용합니다.

<VirtualHost *:80>
    ...
    Header set Blazor-Environment "Staging"
    ...
</VirtualHost>

자세한 내용은 다음 리소스를 참조하세요.

Azure App Service에 대한 환경 설정

독립형 Blazor WebAssembly 앱의 경우 시작 구성 또는 Blazor-Environment 헤더를 통해 환경을 수동으로 설정할 수 있습니다.

서버 쪽 앱의 경우 Azure에서 앱 설정을 통해 ASPNETCORE_ENVIRONMENT 환경을 설정합니다.

  1. 앱 설정 파일 이름에서 환경 세그먼트의 대소문자가 해당 환경 이름의 대소문자와 정확히 일치하는지 확인하십시오. 예를 들어, Staging 환경에 대한 매칭 앱 설정 파일 이름은 appsettings.Staging.json입니다. 파일 이름이 appsettings.staging.json (소문자 "s")인 경우, 파일을 찾을 수 없으며, 파일의 설정은 Staging 환경에서 사용되지 않습니다.

  2. Visual Studio 배포를 위해, 앱이 올바른 배포 슬롯에 배포되었는지 확인하십시오. 이름이 BlazorAzureAppSample인 앱의 경우, 해당 앱은 Staging 배포 슬롯에 배포됩니다.

  3. 환경의 배포 슬롯에 대한 Azure 포털에서, ASPNETCORE_ENVIRONMENT 앱 설정을 사용하여 환경을 설정하십시오. BlazorAzureAppSample라는 이름의 앱의 경우, 스테이징 앱 서비스 슬롯은 BlazorAzureAppSample/Staging라는 이름을 갖습니다. Staging 슬롯의 구성을 위해 ASPNETCORE_ENVIRONMENT에 대한 앱 설정을 생성하고, 값으로 Staging를 설정하십시오. 배포 슬롯 설정이 설정에 대해 사용됩니다.

브라우저에서 요청 받으면, BlazorAzureAppSample/Staging 앱은 Staging 환경에서 https://blazorazureappsample-staging.azurewebsites.net에 로드됩니다.

브라우저에서 앱이 로드되면, blazor.boot.json에 대한 응답 헤더 컬렉션은 Blazor-Environment 헤더 값이 Staging임을 나타냅니다.

앱의 환경을 나타내는 appsettings.{ENVIRONMENT}.json 자리 표시자가 있는 {ENVIRONMENT} 파일의 앱 설정은 앱에 의해 로드됩니다. 이전 예제에서는 appsettings.Staging.json 파일에서 설정이 로드됩니다.

Blazor WebAssembly 앱의 환경 읽기

속성을 삽입 IWebAssemblyHostEnvironment 하고 읽어 구성 요소에서 앱의 환경을 가져옵니다 Environment .

ReadEnvironment.razor:

@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env

<h1>Environment example</h1>

<p>Environment: @Env.Environment</p>

환경을 클라이언트 측에서 읽습니다 Blazor Web App

컴포넌트나 앱에 대해 사전 렌더링이 비활성화되지 않은 경우, .Client 프로젝트의 컴포넌트는 서버에서 사전 렌더링됩니다. 서버에 등록된 IWebAssemblyHostEnvironment 서비스가 없기 때문에, 서버 사전 렌더링 동안 서비스 구현의 호스트 환경 확장 메서드 및 속성을 주입하고 사용할 수 없습니다. 서비스를 인터랙티브 웹어셈블리 또는 인터랙티브 자동 구성 요소에 주입하면 다음 실행 오류가 발생합니다.

There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.

이를 해결하기 위해 서버에서 IWebAssemblyHostEnvironment에 대한 사용자 정의 서비스 구현을 생성하십시오. 자세한 내용 및 예제 구현은 설명서의 뒷부분에 나오는 미리 렌더링 문서의 서버 섹션에서 사용자 지정 서비스 구현을 Blazor 참조하세요.

시작 시 클라이언트 측 환경을 읽기

시작할 때 WebAssemblyHostBuilderIWebAssemblyHostEnvironment 속성을 통해 HostEnvironment을 공개하여 호스트 빌더 코드에서 환경별 로직을 사용할 수 있게 합니다.

Program 파일에서:

if (builder.HostEnvironment.Environment == "Custom")
{
    ...
};

다음의 편리한 확장 메서드는 WebAssemblyHostEnvironmentExtensions를 통해 제공되며, 현재 환경에서 Development, Production, Staging, 그리고 사용자 지정 환경 이름을 확인할 수 있습니다.

Program 파일에서:

if (builder.HostEnvironment.IsStaging())
{
    ...
};

if (builder.HostEnvironment.IsEnvironment("Custom"))
{
    ...
};

IWebAssemblyHostEnvironment.BaseAddress 속성은 NavigationManager 서비스가 사용할 수 없을 때 시작 시 사용할 수 있습니다.

추가 리소스