다음을 통해 공유


Visual Studio를 사용하여 웹 배포 ASP.NET: Web.config 파일 변환

작성자: Tom Dykstra

시작 프로젝트 다운로드

이 자습서 시리즈에서는 Visual Studio 2012 또는 Visual Studio 2010을 사용하여 ASP.NET 웹 애플리케이션을 Azure 앱 Service Web Apps 또는 타사 호스팅 공급자에 배포(게시)하는 방법을 보여 줍니다. 시리즈에 대한 자세한 내용은 시리즈의 첫 번째 자습서를 참조하세요.

개요

이 자습서에서는 다른 대상 환경에 배포할 때 Web.config 파일을 변경하는 프로세스를 자동화하는 방법을 보여 줍니다. 대부분의 애플리케이션에는 애플리케이션이 배포될 때 달라야 하는 Web.config 파일의 설정이 있습니다. 이러한 변경을 수행하는 프로세스를 자동화하면 배포할 때마다 수동으로 수행할 필요가 없으므로 지루하고 오류가 발생하기 쉽습니다.

미리 알림: 자습서를 진행하는 동안 오류 메시지가 표시되거나 문제가 해결되지 않는 경우 문제 해결 페이지를 확인해야 합니다.

Web.config 변환과 웹 배포 매개 변수 비교

Web.config 파일 설정을 변경하는 프로세스를 자동화하는 방법에는 Web.config 변환 및 웹 배포 매개 변수가 있습니다. Web.config 변환 파일에는 Web.config 파일이 배포될 때 변경하는 방법을 지정하는 XML 태그가 포함되어 있습니다. 특정 빌드 구성 및 특정 게시 프로필에 대해 다른 변경 내용을 지정할 수 있습니다. 기본 빌드 구성은 디버그 및 릴리스이며 사용자 지정 빌드 구성을 만들 수 있습니다. 게시 프로필은 일반적으로 대상 환경에 해당합니다. (에서 프로필 게시에 대해 자세히 알아봅니다 .IIS에 테스트 환경 으로 배포 자습서.)

웹 배포 매개 변수를 사용하여 Web.config 파일에 있는 설정을 포함하여 배포 중에 구성해야 하는 다양한 종류의 설정을 지정할 수 있습니다. Web.config 파일 변경 내용을 지정하는 데 사용되는 경우 웹 배포 매개 변수는 설정하기 더 복잡하지만 배포할 때까지 설정할 값을 모를 때 유용합니다. 예를 들어 엔터프라이즈 환경에서는 배포 패키지를 만들어 프로덕션 환경에 설치할 IT 부서의 담당자에게 제공할 수 있으며, 해당 사용자는 사용자가 모르는 연결 문자열 또는 암호를 입력할 수 있어야 합니다.

이 자습서 시리즈에서 다루는 시나리오의 경우 Web.config 파일에 대해 수행해야 하는 모든 작업을 미리 알고 있으므로 웹 배포 매개 변수를 사용할 필요가 없습니다. 사용된 빌드 구성에 따라 다른 일부 변환과 사용된 게시 프로필에 따라 다른 변환을 구성합니다.

Azure에서 Web.config 설정 지정

변경하려는 Web.config 파일 설정이 해당 또는 <appSettings> 요소에 <connectionStrings> 있고 Azure 앱 Service의 Web Apps에 배포하는 경우 배포 중에 변경 내용을 자동화하는 다른 옵션이 있습니다. 웹앱에 대한 관리 포털 페이지의 구성 탭에서 Azure에서 적용하려는 설정을 입력할 수 있습니다(앱 설정연결 문자열 섹션까지 아래로 스크롤). 프로젝트를 배포하면 Azure에서 변경 내용을 자동으로 적용합니다. 자세한 내용은 Windows Azure 웹 사이트: 애플리케이션 문자열 및 연결 문자열 작동 방식을 참조하세요.

기본 변환 파일

솔루션 탐색기 Web.config를 확장하여 두 기본 빌드 구성에 대해 기본적으로 생성되는 Web.Debug.configWeb.Release.config 변환 파일을 확인합니다.

Web.config_transform_files

Web.config 파일을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 구성 변환 추가를 선택하여 사용자 지정 빌드 구성을 위한 변환 파일을 만들 수 있습니다 . 이 자습서에서는 사용자 지정 빌드 구성을 만들지 않았기 때문에 이 작업을 수행할 필요가 없으며 메뉴 옵션을 사용할 수 없습니다.

나중에 테스트, 스테이징 및 프로덕션 게시 프로필에 각각 하나씩 세 개의 변환 파일을 추가로 만듭니다. 게시 프로필 변환 파일은 대상 환경에 따라 달라지므로 게시 프로필 변환 파일에서 처리할 설정의 일반적인 예는 테스트와 프로덕션에 대해 다른 WCF 엔드포인트입니다. 이후 자습서에서 게시 프로필 변환 파일을 만든 후 게시 프로필 변환 파일을 만듭니다.

디버그 모드 사용 안 함

대상 환경이 아닌 빌드 구성에 의존하는 설정의 예는 특성입니다 debug . 릴리스 빌드의 경우 일반적으로 배포하는 환경에 관계없이 디버깅을 사용하지 않도록 설정하려고 합니다. 따라서 기본적으로 Visual Studio 프로젝트 템플릿은 요소에서 compilation 특성을 제거하는 코드를 사용하여 Web.Release.config 변환 파일을 만듭니debug. 다음은 기본 Web.Release.config입니다. 주석 처리되는 일부 샘플 변환 코드 외에도 특성을 제거하는 요소의 compilation 코드가 포함됩니다 debug .

<?xml version="1.0" encoding="utf-8"?>

<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

이 특성은 xdt:Transform="RemoveAttributes(debug)" 배포된 Web.config 파일의 debug system.web/compilation 요소에서 특성을 제거하도록 지정합니다. 릴리스 빌드를 배포할 때마다 이 작업이 수행됩니다.

관리자에 대한 오류 로그 액세스 제한

애플리케이션이 실행되는 동안 오류가 발생하면 애플리케이션은 시스템 생성 오류 페이지 대신 일반 오류 페이지를 표시하고 오류 로깅 및 보고에 Elmah NuGet 패키지를 사용합니다. customErrors Application Web.config 파일의 요소는 오류 페이지를 지정합니다.

<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
  <error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>

오류 페이지를 보려면 요소의 customErrors 특성을 일시적으로 "RemoteOnly"에서 "On"으로 변경 mode 하고 Visual Studio에서 애플리케이션을 실행합니다. Studentsxxx.aspx 같은 잘못된 URL을 요청하여 오류를 발생합니다. IIS에서 생성된 "리소스를 찾을 수 없음" 오류 페이지 대신 GenericErrorPage.aspx 페이지가 표시됩니다.

오류 페이지

오류 로그를 보려면 포트 번호 뒤의 URL에 있는 모든 항목을 elmah.axd(예http://localhost:51130/elmah.axd: )로 바꾸고 Enter 키를 누릅니다.

ELMAH 페이지

완료되면 요소를 "RemoteOnly" 모드로 다시 설정하는 customErrors 것을 잊지 마세요.

개발 컴퓨터에서는 오류 로그 페이지에 대한 무료 액세스를 허용하는 것이 편리하지만 프로덕션 환경에서는 보안 위험이 있습니다. 프로덕션 사이트의 경우 관리자에 대한 오류 로그 액세스를 제한하는 권한 부여 규칙을 추가하고 테스트 및 스테이징에서도 제한 사항이 작동하는지 확인하려고 합니다. 따라서 릴리스 빌드를 배포할 때마다 구현하려는 또 다른 변경 내용이므로 Web.Release.config 파일에 속합니다.

Web.Release.config를 열고 여기에 표시된 대로 닫는 configuration 태그 바로 앞에 새 location 요소를 추가합니다.

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
  <location path="elmah.axd" xdt:Transform="Insert">
    <system.web>
      <authorization>
        <allow roles="Administrator" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
</configuration>

Transform"Insert"의 특성 값을 사용하면 이 location 요소가 Web.config 파일의 기존 location 요소에 형제로 추가됩니다. (크레딧 업데이트 페이지에 대한 권한 부여 규칙을 지정하는 요소가 이미 하나 location 있습니다.)

이제 변환을 미리 보기하여 올바르게 코딩했는지 확인할 수 있습니다.

솔루션 탐색기 Web.Release.config를 마우스 오른쪽 단추로 클릭하고 변환 미리 보기를 클릭합니다.

변환 미리 보기 메뉴

왼쪽의 개발 Web.config 파일과 배포된 Web.config 파일이 오른쪽에 어떻게 표시되는지, 변경 내용이 강조 표시된 페이지가 열립니다.

디버그 변환 미리 보기

왼쪽에 개발 파일이 있는 Web.config 미리 보기 및 변경 내용이 강조 표시된 오른쪽에 배포된 파일의 모양을 보여 주는 스크린샷

(미리 보기에서는 변환을 작성하지 않은 몇 가지 추가 변경 내용을 확인할 수 있습니다. 일반적으로 기능에 영향을 주지 않는 공백을 제거하는 작업이 포함됩니다.)

배포 후 사이트를 테스트할 때 인증 규칙이 효과적인지 테스트합니다.

참고 항목

보안 참고 프로덕션 애플리케이션에서 오류 세부 정보를 일반에 표시하거나 해당 정보를 공용 위치에 저장하지 않습니다. 공격자는 오류 정보를 사용하여 사이트에서 취약성을 검색할 수 있습니다. 자체 애플리케이션에서 ELMAH를 사용하는 경우 보안 위험을 최소화하도록 ELMAH를 구성합니다. 이 자습서의 ELMAH 예제는 권장 구성으로 간주해서는 안 됩니다. 애플리케이션에서 파일을 만들 수 있어야 하는 폴더를 처리하는 방법을 설명하기 위해 선택한 예제입니다. 자세한 내용은 ELMAH 엔드포인트 보안을 참조 하세요.

게시 프로필 변환 파일에서 처리할 설정

일반적인 시나리오는 배포하는 각 환경에서 서로 달라야 하는 Web.config 파일 설정을 갖는 것입니다. 예를 들어 WCF 서비스를 호출하는 애플리케이션은 테스트 및 프로덕션 환경에서 다른 엔드포인트가 필요할 수 있습니다. Contoso University 애플리케이션에는 이러한 종류의 설정도 포함되어 있습니다. 이 설정은 개발, 테스트 또는 프로덕션과 같은 현재 환경을 알려주는 사이트 페이지에 표시되는 표시기를 제어합니다. 설정 값은 애플리케이션이 Site.Master 마스터 페이지의 기본 제목에 "(Dev)" 또는 "(Test)"를 추가할지 여부를 결정합니다.

환경 표시기

애플리케이션이 스테이징 또는 프로덕션에서 실행 중일 때 환경 표시기가 생략됩니다.

Contoso University 웹 페이지는 애플리케이션이 실행 중인 환경을 확인하기 위해 Web.config 파일에 설정된 appSettings 값을 읽습니다.

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

이 값은 테스트 환경에서는 "Test"이고 스테이징 및 프로덕션의 경우 "Prod"여야 합니다.

변환 파일의 다음 코드는 이 변환을 구현합니다.

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

xdt:Transform 특성 값 "SetAttributes"는 이 변환의 목적은 Web.config 파일에 있는 기존 요소의 특성 값을 변경하는 것임을 나타냅니다. 특성 값 "Match(key)"는 xdt:Locator 수정할 요소가 여기에 지정된 특성과 key 일치하는 key 특성임을 나타냅니다. 요소의 add 유일한 다른 특성은 value배포된 Web.config 파일에서 변경될 특성입니다. 여기에 표시된 코드는 배포된 Web.config 파일에서 요소의 appSettings Environment 특성을 "Test"로 설정하도록 합니다value.

이 변환은 아직 만들지 않은 게시 프로필 변환 파일에 속합니다. 테스트, 스테이징 및 프로덕션 환경에 대한 게시 프로필을 만들 때 이 변경을 구현하는 변환 파일을 만들고 업데이트합니다. IIS배포하고 프로덕션 자습서에 배포할 때 이 작업을 수행합니다.

참고 항목

이 설정은 요소에 <appSettings> 있으므로 Azure 앱 Service에서 Web Apps에 배포할 때 변환을 지정하는 다른 대안이 있습니다. 이 항목의 앞부분에서 Azure에서 Web.config 설정 지정을 참조하세요.

연결 문자열 설정

기본 변환 파일에는 연결 문자열 업데이트하는 방법을 보여 주는 예제가 포함되어 있지만 대부분의 경우 게시 프로필에 연결 문자열 지정할 수 있으므로 연결 문자열 변환을 설정할 필요가 없습니다. IIS배포하고 프로덕션 자습서에 배포할 때 이 작업을 수행합니다.

요약

이제 게시 프로필을 만들기 전에 Web.config 변환을 최대한 많이 수행했으며 배포된 Web.config 파일에 있는 항목에 대한 미리 보기를 살펴보았습니다.

왼쪽에 원래 Web.config 파일이 있는 Web.config 미리 보기와 변경 내용이 강조 표시된 오른쪽의 Transformed Web.config 파일을 보여 주는 스크린샷

다음 자습서에서는 프로젝트 속성을 설정해야 하는 배포 설정 작업을 처리합니다.

추가 정보

이 자습서 에서 다루는 항목에 대한 자세한 내용은 Web.config 변환을 사용하여 Visual Studio용 웹 배포 콘텐츠 맵 및 ASP.NET 배포 하는 동안 대상 Web.config 파일 또는 app.config 파일의 설정을 변경하는 방법을 참조하세요.