여러 환경 작업Working with multiple environments

으로 Steve SmithBy Steve Smith

ASP.NET Core 개발, 스테이징 및 프로덕션 등의 여러 환경에 걸쳐 앱 동작을 제어 하기 위한 지원을 제공 합니다.ASP.NET Core provides support for controlling app behavior across multiple environments, such as development, staging, and production. 환경 변수는 해당 환경에 구성 된 응용 프로그램 런타임 환경을 나타내는 데 사용 됩니다.Environment variables are used to indicate the runtime environment, allowing the app to be configured for that environment.

보거나 다운로드 샘플 코드 (다운로드 하는 방법을)View or download sample code (how to download)

개발, 스테이징 프로덕션Development, Staging, Production

특정 환경 변수를 참조 하는 ASP.NET Core ASPNETCORE_ENVIRONMENT 를 응용 프로그램에서 현재 실행 중인 환경에 설명 합니다.ASP.NET Core references a particular environment variable, ASPNETCORE_ENVIRONMENT to describe the environment the application is currently running in. 이 변수를 설정 값을 원하는 하지만 규칙에 따라 3 개의 값 사용: Development, Staging, 및 Production합니다.This variable can be set to any value you like, but three values are used by convention: Development, Staging, and Production. 이러한 샘플에서 사용 되는 값 및 ASP.NET Core와 함께 제공 되는 서식 파일을 찾을 수 있습니다.You will find these values used in the samples and templates provided with ASP.NET Core.

현재 환경 설정은 응용 프로그램 내에서 프로그래밍 방식으로 검색할 수 있습니다.The current environment setting can be detected programmatically from within your application. 환경을 사용할 수는 또한 태그 도우미 의 특정 섹션에 포함 하도록 프로그램 보기 현재 응용 프로그램 환경에 따라 합니다.In addition, you can use the Environment tag helper to include certain sections in your view based on the current application environment.

참고: Windows 및 macOS에서 지정한 환경 이름을 대/소문자 구분.Note: On Windows and macOS, the specified environment name is case insensitive. 이 변수를 설정 하는지 여부를 Development 또는 development 또는 DEVELOPMENT 결과 같은 됩니다.Whether you set the variable to Development or development or DEVELOPMENT the results will be the same. 그러나 Linux는는 대/소문자 구분 기본적으로 운영 체제.However, Linux is a case sensitive OS by default. 환경 변수, 파일 이름 및 설정을 대/소문자 구분을 해야합니다.Environment variables, file names and settings require case sensitivity.

개발Development

이 응용 프로그램을 개발할 때 사용 되는 환경 이어야 합니다.This should be the environment used when developing an application. 앱을 실행할 때 프로덕션 환경에서와 같은 사용 가능 하도록 해서는 안 되는 기능을 활성화 하는 일반적으로 개발자 예외 페이지합니다.It is typically used to enable features that you wouldn't want to be available when the app runs in production, such as the developer exception page.

Visual Studio를 사용 하는 경우 프로젝트의 디버그 프로필에 환경을 구성할 수 있습니다.If you're using Visual Studio, the environment can be configured in your project's debug profiles. 디버그 프로필 지정는 서버 를 설정할 응용 프로그램 및 모든 환경 변수를 시작할 때 사용 하도록 합니다.Debug profiles specify the server to use when launching the application and any environment variables to be set. 프로젝트는 환경 변수를 서로 다르게 설정 하는 여러 디버그 프로필을 가질 수 있습니다.Your project can have multiple debug profiles that set environment variables differently. 사용 하 여이 프로필을 관리 하는 디버그 웹 응용 프로그램 프로젝트의 탭 속성 메뉴.You manage these profiles by using the Debug tab of your web application project's Properties menu. 프로젝트 속성에 설정 된 값에 유지 되는 launchSettings.json 파일과 있습니다 또한 프로필을 구성할 수 해당 파일을 직접 편집 하 여 합니다.The values you set in project properties are persisted in the launchSettings.json file, and you can also configure profiles by editing that file directly.

IIS Express에 대 한 프로필은 다음과 같습니다.The profile for IIS Express is shown here:

프로젝트 속성 설정 환경 변수

다음은 한 launchSettings.json 프로필에 대 한 포함 된 파일 DevelopmentStaging:Here is a launchSettings.json file that includes profiles for Development and Staging:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:40088/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express (Staging)": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    }
  }
}

사용 되는 웹 서버를 다시 시작 될 때까지 프로젝트 프로필에 대 한 변경 내용이 적용 되지 않을 수 있습니다 (특히 Kestrel를 다시 시작 해야 해당 환경에 대해 변경 내용을 감지 합니다).Changes made to project profiles may not take effect until the web server used is restarted (in particular, Kestrel must be restarted before it will detect changes made to its environment).

경고

에 저장 된 환경 변수가 launchSettings.json 어떤 방식으로든에서 보호 하지 않는 하 고 사용 하는 경우 프로젝트에 대 한 소스 코드 리포지토리의 일부가 됩니다.Environment variables stored in launchSettings.json are not secured in any way and will be part of the source code repository for your project, if you use one. 이 파일에 자격 증명 또는 기타 보안 데이터를 저장 하지 마십시오.Never store credentials or other secret data in this file. 사용 하 여 이러한 데이터를 저장 해야 할 경우는 암호 관리자 에 설명 된 도구 개발 하는 동안 앱 암호의 안전한 저장소합니다.If you need a place to store such data, use the Secret Manager tool described in Safe storage of app secrets during development.

스테이징Staging

일반적으로는 Staging 환경은 프로덕션에 배포 하기 전에 최종 테스트에 사용 되는 사전 프로덕션 환경입니다.By convention, a Staging environment is a pre-production environment used for final testing before deployment to production. 이상적으로 실제 특성도 그대로 반영 해야 프로덕션, 프로덕션 환경에서 발생할 수 있는 모든 문제는 사용자에 게 영향을 주지 않고 해결할 수 있습니다를 스테이징 환경에서 먼저 발생 합니다.Ideally, its physical characteristics should mirror that of production, so that any issues that may arise in production occur first in the staging environment, where they can be addressed without impact to users.

프로덕션Production

Production 환경은 응용 프로그램이 라이브 상태일 때 실행 하는 환경 이며 최종 사용자가 사용 되 고 있습니다.The Production environment is the environment in which the application runs when it is live and being used by end users. 이 환경 보안, 성능 및 응용 프로그램의 견고성을 최대화 하기 위해 구성 되어야 합니다.This environment should be configured to maximize security, performance, and application robustness. 다음과 같은 몇 가지 일반적인 프로덕션 환경에 있을 수 있는 것 다른 설정을 개발Some common settings that a production environment might have that would differ from development include:

  • 캐싱 설정Turn on caching

  • 모든 클라이언트 측 리소스가 번들로, 축소, 및 CDN에서 잠재적으로 제공Ensure all client-side resources are bundled, minified, and potentially served from a CDN

  • 진단 ErrorPages 해제Turn off diagnostic ErrorPages

  • 오류 페이지 설정Turn on friendly error pages

  • 프로덕션 로깅 및 모니터링을 사용 하도록 설정 (예를 들어 Application Insights)Enable production logging and monitoring (for example, Application Insights)

이 속성은 결코 전체 목록은으로 제공 됩니다.This is by no means meant to be a complete list. 응용 프로그램의 많은 부분에서 환경 검사 분산 되지 않도록 하는 것이 좋습니다.It's best to avoid scattering environment checks in many parts of your application. 응용 프로그램의 내에서 이러한 검사를 수행 하는 방법이 권장된 되는 대신, Startup 클래스가 가능Instead, the recommended approach is to perform such checks within the application's Startup class(es) wherever possible

환경 설정Setting the environment

환경 설정에 대 한 메서드는 운영 체제에 따라 달라 집니다.The method for setting the environment depends on the operating system.

WindowsWindows

설정 하는 ASPNETCORE_ENVIRONMENT 를 사용 하 여 앱이 시작 하는 경우 현재 세션에 대 한 dotnet run, 다음 명령을 사용 하는To set the ASPNETCORE_ENVIRONMENT for the current session, if the app is started using dotnet run, the following commands are used

명령줄Command line

set ASPNETCORE_ENVIRONMENT=Development

PowerShellPowerShell

$Env:ASPNETCORE_ENVIRONMENT = "Development"

이 명령은 현재 창에 대해서만 적용 됩니다.These commands take effect only for the current window. 창이 닫히면 ASPNETCORE_ENVIRONMENT 설정을 기본 설정 또는 컴퓨터 값 되돌아갑니다.When the window is closed, the ASPNETCORE_ENVIRONMENT setting reverts to the default setting or machine value. Windows 열 값을 전역으로 설정 된 제어판 > 시스템 > 고급 시스템 설정 추가 하거나는 편집ASPNETCORE_ENVIRONMENT 값입니다.In order to set the value globally on Windows open the Control Panel > System > Advanced system settings and add or edit the ASPNETCORE_ENVIRONMENT value.

시스템의 고급 속성

ASPNET 코어 환경 변수

web.configweb.config

참조는 환경 변수 설정 의 섹션은 ASP.NET Core 모듈 구성 참조 항목입니다.See the Setting environment variables section of the ASP.NET Core Module configuration reference topic.

IIS 응용 프로그램 풀 당Per IIS Application Pool

격리된 응용 프로그램 풀(IIS 10.0 이상에서 지원됨)에서 실행되는 개별 응용 프로그램에 대한 환경 변수를 설정해야 하는 경우 <environmentVariables> 환경 변수 항목의 AppCmd.exe 명령 섹션을 참조하세요.If you need to set environment variables for individual apps running in isolated Application Pools (supported on IIS 10.0+), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

MacOSmacOS

MacOS에 대 한 현재 환경 설정 구성 방법은 인라인 응용 프로그램을 실행 하는 경우Setting the current environment for macOS can be done in-line when running the application;

ASPNETCORE_ENVIRONMENT=Development dotnet run

사용 하 여 또는 export 응용 프로그램을 실행 하기 전에 설정할 수 있습니다.or using export to set it prior to running the app.

export ASPNETCORE_ENVIRONMENT=Development

시스템 수준 환경 변수 설정는 .bashrc 또는 .bash_profile 파일입니다.Machine level environment variables are set in the .bashrc or .bash_profile file. 임의의 텍스트 편집기를 사용 하 여 파일을 편집 하 고 다음 문을 추가 합니다.Edit the file using any text editor and add the following statment.

export ASPNETCORE_ENVIRONMENT=Development

LinuxLinux

사용 하 여 Linux 배포판는 export 세션 변수 설정을 기반으로 하는 명령줄에서 명령 및 bash_profile 시스템 수준 환경 설정에 대 한 파일입니다.For Linux distros, use the export command at the command line for session based variable settings and bash_profile file for machine level environment settings.

런타임 시 환경 확인Determining the environment at runtime

IHostingEnvironment 서비스 환경 작업에 대 한 핵심 추상화를 제공 합니다.The IHostingEnvironment service provides the core abstraction for working with environments. 이 서비스 제공 되며 ASP.NET에서 호스팅 계층을 통해 시작 논리에 삽입할 수 종속성 주입합니다.This service is provided by the ASP.NET hosting layer, and can be injected into your startup logic via Dependency Injection. Visual Studio에서 ASP.NET Core 웹 사이트 템플릿을 사용 하는이 방식 (있는 경우) 환경 관련 구성 파일을 로드 하 고 응용 프로그램의 오류 처리 설정을 사용자 지정할 수 있습니다.The ASP.NET Core web site template in Visual Studio uses this approach to load environment-specific configuration files (if present) and to customize the app's error handling settings. 두 경우 모두이 문제를 호출 하 여 현재 지정 된 환경 참조에 의해 이루어집니다 EnvironmentName 또는 IsEnvironment 인스턴스의 IHostingEnvironment 적절 한 메서드에 전달 합니다.In both cases, this behavior is achieved by referring to the currently specified environment by calling EnvironmentName or IsEnvironment on the instance of IHostingEnvironment passed into the appropriate method.

참고

응용 프로그램이 사용 하 여 특정 한 환경에서 실행 되 고 있는지 여부를 확인 하는 경우 env.IsEnvironment("environmentname") 이후 대/소문자를 무시 올바르게 됩니다 (하는 경우를 확인 하는 대신 env.EnvironmentName == "Development" 예를 들어).If you need to check whether the application is running in a particular environment, use env.IsEnvironment("environmentname") since it will correctly ignore case (instead of checking if env.EnvironmentName == "Development" for example).

예를 들어 Configure 메서드 환경 특정 오류 처리를 설정 하려면 다음 코드를 사용할 수 있습니다.For example, you can use the following code in your Configure method to setup environment specific error handling:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

응용 프로그램에서 실행 중인 경우는 Development 이면 환경 사용 하면 Visual Studio, 개발 특정 오류 페이지 (일반적으로 실행 해서는 안 프로덕션 환경에서) 및 특별 한 데이터베이스 오류 "BrowserLink" 기능을 사용 하는 데 필요한 런타임 지원 페이지 (마이그레이션을 적용 하는 방법을 제공 하 고 개발에만 사용 하므로 해야) 합니다.If the app is running in a Development environment, then it enables the runtime support necessary to use the "BrowserLink" feature in Visual Studio, development-specific error pages (which typically should not be run in production) and special database error pages (which provide a way to apply migrations and should therefore only be used in development). 그렇지 않으면 응용 프로그램 개발 환경에서 실행 되지 않는 경우 처리 되지 않은 예외에 대 한 응답에 표시 되는 표준 오류 처리 페이지 구성 됩니다.Otherwise, if the app is not running in a development environment, a standard error handling page is configured to be displayed in response to any unhandled exceptions.

현재 환경에 따라 런타임에 클라이언트에 보내도록 내용을 결정 해야 합니다.You may need to determine which content to send to the client at runtime, depending on the current environment. 예를 들어 개발 환경에서 하면 일반적으로 사용할 최소화 하지 않은 스크립트 및 스타일 시트를 디버깅을 보다 쉽게 해줍니다.For example, in a development environment you generally serve non-minimized scripts and style sheets, which makes debugging easier. 프로덕션 환경과 테스트 환경 축소 된 버전을 제공 해야 하 고 CDN에서 일반적으로 합니다.Production and test environments should serve the minified versions and generally from a CDN. 환경을 사용 하 여 수행할 수 있습니다 태그 도우미합니다.You can do this using the Environment tag helper. 환경 태그 도우미 됩니다 현재 환경을 사용 하 여 지정 하는 환경 중 하 나와 일치 하는 경우에 해당 콘텐츠를 렌더링 된 names 특성입니다.The Environment tag helper will only render its contents if the current environment matches one of the environments specified using the names attribute.

<environment names="Development">
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment names="Staging,Production">
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
          asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
          asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
    <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>

태그 도우미를 사용 하 여 응용 프로그램 보고를 시작 하려면 태그 도우미 소개합니다.To get started with using tag helpers in your application see Introduction to Tag Helpers.

시작 규칙Startup conventions

ASP.NET Core 응용 프로그램의 시작을 현재 환경에 따라 구성 하는 규칙 기반 방식을 지원 합니다.ASP.NET Core supports a convention-based approach to configuring an application's startup based on the current environment. 또한 프로그래밍 방식으로 환경의을 만들고 사용자 지정 규칙을 관리할 수에 따라 응용 프로그램의 동작을 제어할 수 있습니다.You can also programmatically control how your application behaves according to which environment it is in, allowing you to create and manage your own conventions.

ASP.NET Core 응용 프로그램 시작 되 면는 Startup 클래스 부트스트랩 하는 응용 프로그램, 등 구성 설정을 로드 하는 데 사용 됩니다 (ASP.NET 시작에 대 한 자세한).When an ASP.NET Core application starts, the Startup class is used to bootstrap the application, load its configuration settings, etc. (learn more about ASP.NET startup). 그러나 클래스가 있는 경우 라는 Startup{EnvironmentName} (예를 들어 StartupDevelopment), 및 ASPNETCORE_ENVIRONMENT 해당 이름 다음에 일치 하는 환경 변수 Startup 클래스 대신 사용 됩니다.However, if a class exists named Startup{EnvironmentName} (for example StartupDevelopment), and the ASPNETCORE_ENVIRONMENT environment variable matches that name, then that Startup class is used instead. 따라서 구성할 수 있습니다. Startup 개발을 위한 별도 있지만 저마다 StartupProduction 프로덕션 환경에서 앱을 실행할 때 사용할 수는 있습니다.Thus, you could configure Startup for development, but have a separate StartupProduction that would be used when the app is run in production. 또는 그 반대의 경우도 마찬가지입니다.Or vice versa.

참고

호출 WebHostBuilder.UseStartup<TStartup>() 구성 섹션을 재정의 합니다.Calling WebHostBuilder.UseStartup<TStartup>() overrides configuration sections.

사용 하 여 완전히 별개의 Startup 현재 환경에 따라 클래스 내에서 응용 프로그램은 구성 하는 방법에 대 한 조정이 만들 수도 있습니다는 Startup 클래스입니다.In addition to using an entirely separate Startup class based on the current environment, you can also make adjustments to how the application is configured within a Startup class. Configure()ConfigureServices() 유사한 환경 관련 버전을 지원 하는 메서드는 Startup 클래스 형식의 자체 Configure{EnvironmentName}()Configure{EnvironmentName}Services()합니다.The Configure() and ConfigureServices() methods support environment-specific versions similar to the Startup class itself, of the form Configure{EnvironmentName}() and Configure{EnvironmentName}Services(). 메서드를 정의 하는 경우 ConfigureDevelopment() 대신 호출 됩니다 Configure() 개발 환경 설정 된 경우.If you define a method ConfigureDevelopment() it will be called instead of Configure() when the environment is set to development. 마찬가지로, ConfigureDevelopmentServices() 대신 이라고 ConfigureServices() 동일한 환경에서 합니다.Likewise, ConfigureDevelopmentServices() would be called instead of ConfigureServices() in the same environment.

요약Summary

ASP.NET Core 다양 한 기능 및 다양 한 환경에서 응용 프로그램의 동작 방식을 쉽게 제어할 수 있는 규칙을 제공 합니다.ASP.NET Core provides a number of features and conventions that allow developers to easily control how their applications behave in different environments. 프로덕션 환경에 스테이징 개발에서 응용 프로그램을 게시할 때 환경 변수 설정 적절 하 게 환경에 대 한 허용 적절 하 게 디버깅, 테스트 또는 프로덕션 용도로 응용 프로그램의 최적화를 위해 합니다.When publishing an application from development to staging to production, environment variables set appropriately for the environment allow for optimization of the application for debugging, testing, or production use, as appropriate.

추가 리소스Additional Resources