웹 패키지 배포용 매개 변수 구성

작성자: Jason Lee

이 항목에서는 웹 패키지를 원격 IIS 웹 서버에 배포할 때 IIS(인터넷 정보 서비스) 웹 애플리케이션 이름, 연결 문자열 및 서비스 엔드포인트와 같은 매개 변수 값을 설정하는 방법을 설명합니다.

웹 애플리케이션 프로젝트를 빌드할 때 빌드 및 패키징 프로세스는 다음 세 가지 키 파일을 생성합니다.

  • [프로젝트 이름].zip 파일입니다. 웹 애플리케이션 프로젝트의 웹 배포 패키지입니다. 이 패키지에는 원격 IIS 웹 서버에서 웹 애플리케이션을 다시 만드는 데 필요한 모든 어셈블리, 파일, 데이터베이스 스크립트 및 리소스가 포함되어 있습니다.
  • [프로젝트 이름].deploy.cmd 파일입니다. 여기에는 원격 IIS 웹 서버에 웹 배포 패키지를 게시하는 매개 변수가 있는 웹 배포(MSDeploy.exe) 명령 집합이 포함되어 있습니다.
  • [프로젝트 이름].SetParameters.xml 파일입니다. MSDeploy.exe 명령에 매개 변수 값 집합을 제공합니다. 이 파일의 값을 업데이트하고 웹 패키지를 배포할 때 명령줄 매개 변수로 웹 배포에 전달할 수 있습니다.

참고

빌드 및 패키징 프로세스에 대한 자세한 내용은 웹 애플리케이션 프로젝트 빌드 및 패키징을 참조하세요.

SetParameters.xml 파일은 웹 애플리케이션 프로젝트 파일 및 프로젝트 내의 모든 구성 파일에서 동적으로 생성됩니다. 프로젝트를 빌드하고 패키지할 때 WPP(웹 게시 파이프라인)는 대상 IIS 웹 애플리케이션과 데이터베이스 연결 문자열과 같이 배포 환경 간에 변경될 가능성이 있는 많은 변수를 자동으로 검색합니다. 이러한 값은 웹 배포 패키지에서 자동으로 매개 변수화되고 SetParameters.xml 파일에 추가됩니다. 예를 들어 웹 애플리케이션 프로젝트의 web.config 파일에 연결 문자열을 추가하는 경우 빌드 프로세스는 이 변경 내용을 검색하고 그에 따라 SetParameters.xml 파일에 항목을 추가합니다.

대부분의 경우 이 자동 매개 변수화로 충분합니다. 그러나 사용자가 애플리케이션 설정 또는 서비스 엔드포인트 URL과 같은 배포 환경 간에 다른 설정을 변경해야 하는 경우 배포 패키지에서 이러한 값을 매개 변수화하고 해당 항목을 SetParameters.xml 파일에 추가하도록 WPP에 지시해야 합니다. 다음 섹션에서는 이 작업을 수행하는 방법을 설명합니다.

자동 매개 변수화

웹 애플리케이션을 빌드하고 패키지할 때 WPP는 다음 항목을 자동으로 매개 변수화합니다.

  • 대상 IIS 웹 애플리케이션 경로 및 이름입니다.
  • web.config 파일의 모든 연결 문자열입니다.
  • 프로젝트 속성 페이지의 패키지/게시 SQL 탭에 추가하는 모든 데이터베이스에 대한 연결 문자열입니다.

예를 들어 어떤 방식으로든 매개 변수화 프로세스를 건드리지 않고 Contact Manager 샘플 솔루션을 빌드하고 패키지하려는 경우 WPP는 이 ContactManager.Mvc.SetParameters.xml 파일을 생성합니다.

<parameters>
  <setParameter 
    name="IIS Web Application Name" 
    value="Default Web Site/ContactManager.Mvc_deploy" />  
  <setParameter 
    name="ApplicationServices-Web.config Connection String" 
    value="Data Source=DEVWORKSTATION\SQLEXPRESS;Initial Catalog=CMAppServices;
           Integrated Security=true;" />
</parameters>

이 경우 다음과 같습니다.

  • IIS 웹 애플리케이션 이름 매개 변수는 웹 애플리케이션을 배포하려는 IIS 경로입니다. 기본값은 프로젝트 속성 페이지의 패키지/웹 게시 페이지에서 가져옵니다.
  • ApplicationServices-Web.config Connection String 매개 변수는 web.config 파일의 connectionStrings/add 요소에서 생성되었습니다. 애플리케이션이 멤버 자격 데이터베이스에 연결하는 데 사용해야 하는 연결 문자열을 나타냅니다. 여기서 제공하는 값은 배포된 web.config 파일로 대체됩니다. 기본값은 배포 전 web.config 파일에서 가져옵니다.

또한 WPP는 생성되는 배포 패키지에서 이러한 속성을 매개 변수화합니다. 배포 패키지를 설치할 때 이러한 속성에 대한 값을 제공할 수 있습니다. 수동으로 웹 패키지 설치에 설명된 대로 IIS 관리자를 통해 패키지를 수동으로 설치하는 경우 설치 마법사는 매개 변수에 대한 값을 제공하라는 메시지를 표시합니다. 웹 패키지 배포에 설명 된 대로 .deploy.cmd 파일을 사용하여 패키지를 원격으로 설치하는 경우 배포는 매개 변수 값을 제공하기 위해 이 SetParameters.xml 파일을 찾습니다. SetParameters.xml 파일의 값을 수동으로 편집하거나 자동화된 빌드 및 배포 프로세스의 일부로 파일을 사용자 지정할 수 있습니다. 이 프로세스는 이 항목의 뒷부분에 자세히 설명되어 있습니다.

사용자 지정 매개 변수화

더 복잡한 배포 시나리오에서는 프로젝트를 배포하기 전에 추가 속성을 매개 변수화해야 하는 경우가 많습니다. 일반적으로 대상 환경마다 다른 속성과 설정을 매개 변수화해야 합니다. 여기에는 다음이 포함될 수 있습니다.

  • web.config 파일의 서비스 엔드포인트입니다.
  • web.config 파일의 애플리케이션 설정입니다.
  • 사용자에게 지정하라는 메시지를 표시하려는 다른 선언적 속성입니다.

이러한 속성을 매개 변수화하는 가장 쉬운 방법은 웹 애플리케이션 프로젝트의 루트 폴더에 parameters.xml 파일을 추가하는 것입니다. 예를 들어 Contact Manager 솔루션에서 ContactManager.Mvc 프로젝트에는 루트 폴더에 parameters.xml 파일이 포함됩니다.

Contact Manager 솔루션에서 ContactManager.Mvc 프로젝트에는 루트 폴더에 parameters.xml 파일이 포함됩니다.

이 파일을 열면 단일 매개 변수 항목이 포함된 것을 볼 수 있습니다. 항목은 XPath(XML 경로 언어) 쿼리를 사용하여 web.config 파일에서 ContactService WCF(Windows Communication Foundation) 서비스의 엔드포인트 URL을 찾아 매개 변수화합니다.

<parameters>
  <parameter name="ContactService Service Endpoint Address"
             description="Specify the endpoint URL for the ContactService WCF 
                          service in the destination environment"
             defaultValue="http://localhost/ContactManagerService">
    <parameterEntry kind="XmlFile" scope="Web.config"
                    match="/configuration/system.serviceModel/client
                           /endpoint[@name='BasicHttpBinding_IContactService']
                           /@address" />
  </parameter>
</parameters>

WPP는 배포 패키지에서 엔드포인트 URL을 매개 변수화하는 것 외에도 배포 패키지와 함께 생성되는 SetParameters.xml 파일에 해당 항목을 추가합니다.

<parameters>
  ...  
  <setParameter 
    name="ContactService Service Endpoint Address" 
    value="http://localhost/ContactManagerService" />
  ...
</parameters>

배포 패키지를 수동으로 설치하는 경우 IIS 관리자는 자동으로 매개 변수화된 속성과 함께 서비스 엔드포인트 주소를 묻는 메시지를 표시합니다. .deploy.cmd 파일을 실행하여 배포 패키지를 설치하는 경우 SetParameters.xml 파일을 편집하여 자동으로 매개 변수화된 속성의 값과 함께 서비스 엔드포인트 주소의 값을 제공할 수 있습니다.

parameters.xml 파일을 만드는 방법에 대한 자세한 내용은 방법: 매개 변수를 사용하여 패키지 설치 시 배포 설정 구성을 참조하세요. Web.config 파일 설정에 배포 매개 변수를 사용하려면이라는 프로시저에서 단계별 지침을 제공합니다.

SetParameters.xml 파일 수정

.deploy.cmd 파일을 실행하거나 명령줄에서 MSDeploy.exe 실행하여 웹 애플리케이션 패키지를 수동으로 배포하려는 경우 배포 전에 SetParameters.xml 파일을 수동으로 편집하는 것을 막을 수 없습니다. 그러나 엔터프라이즈 규모 솔루션에서 작업하는 경우 더 크고 자동화된 빌드 및 배포 프로세스의 일부로 웹 애플리케이션 패키지를 배포해야 할 수 있습니다. 이 시나리오에서는SetParameters.xml파일을 수정하려면 MSBuild(Microsoft Build Engine)가 필요합니다. MSBuild XmlPoke 작업을 사용하여 이 작업을 수행할 수 있습니다.

Contact Manager 샘플 솔루션은 이 프로세스를 보여 줍니다. 다음 코드 예제는 이 예제와 관련된 세부 정보만 표시하도록 편집되었습니다.

참고

샘플 솔루션의 프로젝트 파일 모델에 대한 광범위한 개요와 일반적으로 사용자 지정 프로젝트 파일에 대한 소개는 프로젝트 파일 이해빌드 프로세스 이해를 참조하세요.

먼저 관심 있는 매개 변수 값은 환경별 프로젝트 파일(예: Env-Dev.proj)의 속성으로 정의됩니다.

<PropertyGroup> 
  <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
    DemoSite/ContactManager
  </ContactManagerIisPath>
  <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
    http://localhost:85/ContactManagerService/ContactService.svc
  </ContactManagerTargetUrl>
  <MembershipConnectionString Condition=" '$(MembershipConnectionString)'=='' ">
    Data Source=TESTDB1;Integrated Security=true;Initial Catalog=CMAppServices
  </MembershipConnectionString>  
</PropertyGroup>

참고

사용자 고유의 서버 환경에 대한 환경별 프로젝트 파일을 사용자 지정하는 방법에 대한 지침은 대상 환경에 대한 배포 속성 구성을 참조하세요.

다음으로 Publish.proj 파일은 이러한 속성을 가져옵니다. 각 SetParameters.xml 파일은 .deploy.cmd 파일과 연결되고 궁극적으로 프로젝트 파일이 각 .deploy.cmd 파일을 호출하도록 하므로 프로젝트 파일은 각 .deploy.cmd 파일에 대해 MSBuild 항목을 만들고 관심 있는 속성을 항목 메타데이터로 정의합니다.

<ItemGroup>
  <PublishPackages Include="$(_ContactManagerDest)ContactManager.Mvc.deploy.cmd"> 
    <ParametersXml>
      $(_ContactManagerDest)ContactManager.Mvc.SetParameters.xml
    </ParametersXml>
    <IisWebAppName>
      $(ContactManagerIisPath)
    </IisWebAppName> 
    <MembershipDBConnectionName>
      ApplicationServices-Web.config Connection String
    </MembershipDBConnectionName>
    <MembershipDBConnectionString>
      $(MembershipConnectionString.Replace(";","%3b"))
    </MembershipDBConnectionString>
    <ServiceEndpointParamName>
      ContactService Service Endpoint Address
    </ServiceEndpointParamName>
    <ServiceEndpointValue>
      $(ContactManagerTargetUrl)
    </ServiceEndpointValue>
  </PublishPackages>
  ...
</ItemGroup>

이 경우 다음과 같습니다.

  • ParametersXml 메타데이터 값은 SetParameters.xml 파일의 위치를 나타냅니다.
  • IisWebAppName 값은 웹 애플리케이션을 배포하려는 IIS 경로입니다.
  • MembershipDBConnectionString 값은 멤버 자격 데이터베이스의 연결 문자열이며 MembershipDBConnectionName 값은 SetParameters.xml 파일에 있는 해당 매개 변수의 이름 특성입니다.
  • ServiceEndpointValue 값은 대상 서버의 WCF 서비스에 대한 엔드포인트 주소이며 ServiceEndpointParamName 값은 SetParameters.xml 파일에 있는 해당 매개 변수의 이름 특성입니다.

마지막으로 Publish.proj 파일에서 PublishWebPackages 대상은 XmlPoke 작업을 사용하여 SetParameters.xml 파일에서 이러한 값을 수정합니다.

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter[@name='%(PublishPackages.ConnectionName)']
           /@value"
    Value="%(PublishPackages.ConnectionString)"
    Condition =" '%(PublishPackages.ConnectionName)'!=''" 
  />
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter
           [@name='%(PublishPackages.MembershipDBConnectionName)']/@value"
    Value='%(PublishPackages.MembershipDBConnectionString)'
    Condition =" '%(PublishPackages.MembershipDBConnectionName)'!=''" 
  />
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter[@name='IIS Web Application Name']/@value"
    Value="%(PublishPackages.IisWebAppName)"
    Condition =" '%(PublishPackages.IisWebAppName)'!=''" 
  />
  <XmlPoke 
    XmlInputPath="%(PublishPackages.ParametersXml)"
    Query="//parameters/setParameter
           [@name='%(PublishPackages.ServiceEndpointParamName)']/@value"
    Value="%(PublishPackages.ServiceEndpointValue)"
    Condition =" '%(PublishPackages.ServiceEndpointParamName)'!=''" 
  /> 
  <!--Execute the .deploy.cmd file--> 
  ...
</Target>

XmlPoke 작업은 네 가지 특성 값을 지정합니다.

  • XmlInputPath 특성은 수정할 파일을 찾을 위치를 태스크에 알려줍니다.
  • Query 특성은 변경하려는 XML 노드를 식별하는 XPath 쿼리입니다.
  • Value 특성은 선택한 XML 노드에 삽입할 새 값입니다.
  • Condition 특성은 태스크가 실행되거나 실행되지 않아야 하는 조건입니다. 이러한 경우 조건은 null 또는 빈 값을SetParameters.xml파일에 삽입하지 않도록 합니다.

결론

이 항목에서는 SetParameters.xml 파일의 역할을 설명하고 웹 애플리케이션 프로젝트를 빌드할 때 파일의 생성 방법을 설명했습니다. 프로젝트에 parameters.xml 파일을 추가하여 추가 설정을 매개 변수화하는 방법을 설명했습니다. 또한 프로젝트 파일에서 XmlPoke 작업을 사용하여 더 크고 자동화된 빌드 프로세스의 일부로 SetParameters.xml 파일을 수정하는 방법도 설명했습니다.

다음 항목인 웹 패키지 배포에서는 .deploy.cmd 파일을 실행하거나 MSDeploy.exe 명령을 직접 사용하여 웹 패키지를 배포하는 방법을 설명합니다. 두 경우 모두 SetParameters.xml 파일을 배포 매개 변수로 지정할 수 있습니다.

추가 정보

웹 패키지를 만드는 방법에 대한 자세한 내용은 웹 애플리케이션 프로젝트 빌드 및 패키징을 참조하세요. 실제로 웹 패키지를 배포하는 방법에 대한 지침은 웹 패키지 배포를 참조하세요. parameters.xml 파일을 만드는 방법에 대한 단계별 연습은 방법: 패키지를 설치할 때 매개 변수를 사용하여 배포 설정 구성을 참조하세요.

웹 배포의 매개 변수화에 대한 자세한 내용은 웹 배포 매개 변수화 in Action (블로그 게시물)을 참조하세요.