다음을 통해 공유


Visual Studio 또는 Visual Web Developer를 사용하여 SQL Server Compact를 사용하여 ASP.NET 웹 애플리케이션 배포: Web.Config 파일 변환 - 12개 중 3개

작성자: Tom Dykstra

시작 프로젝트 다운로드

이 자습서 시리즈에서는 Visual Studio 2012 RC 또는 Visual Studio Express 2012 RC for Web을 사용하여 SQL Server Compact 데이터베이스를 포함하는 ASP.NET 웹 애플리케이션 프로젝트를 배포(게시)하는 방법을 보여 줍니다. 웹 게시 업데이트를 설치하는 경우 Visual Studio 2010을 사용할 수도 있습니다. 시리즈에 대한 소개는 시리즈의 첫 번째 자습서를 참조 하세요.

Visual Studio 2012의 RC 릴리스 이후 도입된 배포 기능을 보여 주는 자습서에서는 SQL Server Compact 이외의 SQL Server 버전을 배포하는 방법과 Azure 앱 Service Web Apps에 배포하는 방법을 보여 줍니다. Visual Studio를 사용하여 ASP.NET 웹 배포를 참조하세요.

개요

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

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

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

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

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

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

게시 프로필에 대한 변환 파일 만들기

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

Web.config_transform_files

Web.config 파일을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 구성 변환 추가를 선택하여 사용자 지정 빌드 구성에 대한 변환 파일을 만들 수 있지만 이 자습서에서는 그렇게 할 필요가 없습니다.

빌드 구성이 아닌 배포 대상과 관련된 변경 내용을 구성하려면 두 개의 변환 파일이 더 필요합니다. 이러한 종류의 설정의 일반적인 예는 테스트와 프로덕션에 대해 다른 WCF 엔드포인트입니다. 이후 자습서에서는 Test 및 Production이라는 게시 프로필을 만들므로 Web.Test.config 파일과 Web.Production.config 파일이 필요합니다.

게시 프로필에 연결된 변환 파일을 수동으로 만들어야 합니다. 솔루션 탐색기 ContosoUniversity 프로젝트를 마우스 오른쪽 단추로 클릭하고 Windows 탐색기에서 폴더 열기를 선택합니다.

Open_folder_in_Windows_Explorer

Windows 탐색기에서 Web.Release.config 파일을 선택하고 파일을 복사한 다음 두 복사본을 붙여넣습니다. 이러한 복사본의 이름을 Web.Production.configWeb.Test.config로 바꾼 다음 Windows 탐색기를 닫습니다.

솔루션 탐색기 새로 고침을 클릭하여 새 파일을 확인합니다.

새 파일을 선택하고 마우스 오른쪽 단추를 클릭한 다음 상황에 맞는 메뉴에서 프로젝트에 포함을 클릭합니다.

프로젝트에 테스트 및 프로덕션 구성 파일 포함

이러한 파일이 배포되지 않도록 하려면 솔루션 탐색기 파일을 선택한 다음 속성 창에서 빌드 작업 속성을 콘텐츠에서 없음으로 변경합니다. (빌드 구성을 기반으로 하는 변환 파일은 자동으로 배포할 수 없습니다.)

이제 Web.config 변환 파일을 Web.config 변환 파일에 입력할 준비가 되었습니다.

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

애플리케이션이 실행되는 동안 오류가 발생하면 애플리케이션은 시스템 생성 오류 페이지 대신 일반 오류 페이지를 표시하고 오류 로깅 및 보고에 Elmah NuGet 패키지를 사용합니다. customErrors 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 페이지가 표시됩니다.

Error_page

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

Elmah_log_page

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

개발 컴퓨터에서는 오류 로그 페이지에 대한 무료 액세스를 허용하는 것이 편리하지만 프로덕션 환경에서는 보안 위험이 있습니다. 프로덕션 사이트의 경우 Web.Production.config 파일에서 변환을 구성하여 관리자에게만 오류 로그 액세스를 제한하는 권한 부여 규칙을 추가할 수 있습니다.

Web.Production.config를 열고 여기에 표시된 대로 여 configuration 는 태그 바로 다음에 새 location 요소를 추가합니다. (일부 컨텍스트를 location 제공하기 위해서만 여기에 표시된 주변 태그가 아닌 요소만 추가해야 합니다.)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <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.Test.config 파일에 이 코드를 추가할 필요가 없습니다.

참고 항목

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

환경 표시기 설정

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

Environment_indicator

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

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

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

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

Web.Production.config를 열고 앞에서 추가한 appSettings 요소의 location 여는 태그 바로 앞에 요소를 추가합니다.

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

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

다음으로 Web.Test.config 파일에 동일한 변경 사항을 적용합니다. 단, "Prod" 대신 "Test"로 설정합니다value. 완료되면 Web.Test.configappSettings 섹션은 다음 예제와 같습니다.

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

디버그 모드 사용 안 림

릴리스 빌드의 경우 배포하는 환경에 관계없이 디버깅을 사용하지 않도록 설정하지 않습니다. 기본적으로 Web.Release.config 변환 파일은 요소에서 compilation 특성을 제거하는 debug 코드를 사용하여 자동으로 만들어집니다.

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>

이 특성은 Transform debug 릴리스 빌드를 배포할 때마다 배포된 Web.config 파일에서 특성을 생략합니다.

이 변환은 릴리스 변환 파일을 복사하여 만들었기 때문에 테스트 및 프로덕션 변환 파일에 있습니다. 복제할 필요가 없으므로 각 파일을 열고, 컴파일 요소를 제거하고, 각 파일을 저장하고 닫습니다.

연결 문자열 설정

대부분의 경우 게시 프로필에서 연결 문자열 지정할 수 있으므로 연결 문자열 변환을 설정할 필요가 없습니다. 그러나 SQL Server Compact 데이터베이스를 배포하고 Entity Framework Code First 마이그레이션 사용하여 대상 서버에서 데이터베이스를 업데이트하는 경우 예외가 있습니다. 이 시나리오에서는 서버에서 데이터베이스 스키마를 업데이트하는 데 사용할 추가 연결 문자열 지정해야 합니다. 이 변환을 설정하려면 Web.Test.config 및 Web.Production.config 변환 파일 모두에서 열기 <구성> 태그 바로 후에 connectionStrings> 요소를 추가<합니다.

<connectionStrings>
  <add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>

이 특성은 Transform 이 연결 문자열 배포된 Web.config 파일의 connectionStrings 요소에 추가되도록 지정합니다. (게시 프로세스는 이 추가 연결 문자열 존재하지 않는 경우 자동으로 만듭니다. 그러나 기본적으로 providerName 특성은 SQL Server Compact에서 작동하지 않는 것으로 System.Data.SqlClient설정됩니다. 연결 문자열 수동으로 추가하면 배포 프로세스가 잘못된 공급자 이름으로 연결 문자열 요소를 만들지 못하게 합니다.)

이제 테스트 및 프로덕션을 위해 Contoso University 애플리케이션을 배포하는 데 필요한 모든 Web.config 변환을 지정했습니다. 다음 자습서에서는 프로젝트 속성을 설정해야 하는 배포 설정 작업을 처리합니다.

추가 정보

이 자습서에서 다루는 항목에 대한 자세한 내용은 ASP.NET 배포 콘텐츠 맵의 Web.config 변환 시나리오를 참조하세요.