웹 패키지 배포

작성자: Jason Lee

이 항목에서는 IIS(인터넷 정보 서비스) 웹 배포 도구(웹 배포) 2.0을 사용하여 원격 서버에 웹 배포 패키지를 게시하는 방법을 설명합니다.

원격 서버에 웹 패키지를 배포할 수 있는 두 가지 기본 방법이 있습니다.

  • MSDeploy.exe 명령줄 유틸리티를 직접 사용할 수 있습니다.
  • 빌드 프로세스에서 생성하는 [프로젝트 이름].deploy.cmd 파일을 실행할 수 있습니다.

최종 결과는 사용하는 방법에 관계없이 동일합니다. 기본적으로 .deploy.cmd 파일은 미리 정해진 값으로 MSDeploy.exe 실행하므로 패키지를 배포하기 위해 많은 정보를 제공할 필요가 없습니다. 이렇게 하면 배포 프로세스가 간소화됩니다. 반면에 MSDeploy.exe 직접 사용하면 패키지 배포 방식에 대한 유연성이 훨씬 더 높아집니다.

사용하는 방법은 배포 프로세스에 필요한 제어의 양과 웹 배포 원격 에이전트 서비스 또는 웹 배포 처리기를 대상으로 하는지 여부 등 다양한 요인에 따라 달라집니다. 이 항목에서는 각 방법을 사용하는 방법을 설명하고 각 접근 방식이 적절한 시기를 식별합니다.

이 항목의 작업 및 연습에서는 다음을 가정합니다.

웹 패키지를 배포하는 가장 간단한 방법은 [프로젝트 이름].deploy.cmd 파일을 실행하는 것입니다. 특히 .deploy.cmd 파일을 사용하면 MSDeploy.exe 직접 사용하는 데 비해 다음과 같은 이점이 있습니다.

  • 웹 배포 패키지의 위치를 지정할 필요가 없습니다 . .deploy.cmd 파일은 이미 위치를 알고 있습니다.
  • .deploy.cmd 파일이 어디에 있는지 이미 알고 있으므로 SetParameters.xml 파일의 위치를 지정할 필요가 없습니다.
  • 원본 및 대상 MSDeploy 공급자를 지정할 필요가 없습니다. .deploy.cmd 파일은 사용할 값을 이미 알고 있습니다.
  • MSDeploy 작업 설정을 지정할 필요가 없습니다. .deploy.cmd 파일은 일반적으로 필요한 값을 MSDeploy.exe 명령에 자동으로 추가합니다.

.deploy.cmd 파일을 사용하여 웹 패키지를 배포하기 전에 다음을 확인해야 합니다.

  • .deploy.cmd 파일인 [프로젝트 이름]입니다. SetParameters.xml 파일 및 웹 패키지([프로젝트 이름])zip)은 동일한 폴더에 있습니다.
  • .deploy.cmd 파일을 실행하는 컴퓨터에 웹 배포(MSDeploy.exe)가 설치됩니다.

.deploy.cmd 파일은 다양한 명령줄 옵션을 지원합니다. 명령 프롬프트에서 파일을 실행하는 경우 기본 구문은 다음과 같습니다.

[project name].deploy.cmd [/T | /Y]
                          [/M:<computer name>]
                          [/A:<Basic | NTLM>]
                          [/U:<user name>]
                          [/P:<password>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

각각 평가판 실행 또는 라이브 배포를 수행할지 여부를 나타내려면 /T 플래그 또는 /Y 플래그를 지정해야 합니다(동일한 명령에서 두 플래그를 모두 사용하지 않음). 이 표에서는 이러한 각 플래그의 용도를 설명합니다.

플래그 설명
/T 평가판 실행을 나타내는 –whatif 플래그를 사용하여 MSDeploy.exe 호출합니다. 패키지를 배포하는 대신 패키지를 배포한 경우 어떤 일이 발생할지에 대한 보고서를 만듭니다.
/Y –whatif 플래그 없이 MSDeploy.exe 호출합니다. 그러면 패키지를 로컬 컴퓨터 또는 지정된 대상 서버에 배포합니다.
/M 대상 서버 이름 또는 서비스 URL을 지정합니다. 여기에서 제공할 수 있는 값에 대한 자세한 내용은 이 항목의 엔드포인트 고려 사항 섹션을 참조하세요. /M 플래그를 생략하면 패키지가 로컬 컴퓨터에 배포됩니다.
/A MSDeploy.exe 배포를 수행하는 데 사용해야 하는 인증 유형을 지정합니다. 가능한 값은 NTLMBasic입니다. /A 플래그를 생략하면 웹 배포 원격 에이전트 서비스 및 웹 배포 처리기에 배포하기 위한 기본값으로 인증 유형이 NTLM로 설정됩니다.
/U 사용자 이름을 지정합니다. 이는 기본 인증을 사용하는 경우에만 적용됩니다.
/P 암호를 지정합니다. 이는 기본 인증을 사용하는 경우에만 적용됩니다.
/L 패키지를 로컬 IIS Express instance 배포해야 했음을 나타냅니다.
/G tempAgent 공급자 설정을 사용하여 패키지가 배포되도록 지정합니다. /G 플래그를 생략하면 기본값은 false입니다.

참고

빌드 프로세스는 웹 패키지를 만들 때마다 이러한 배포 옵션을 설명하는 [프로젝트 이름].deploy-readme.txt 파일을 만듭니다.

이러한 플래그 외에도 웹 배포 작업 설정을 추가 .deploy.cmd 매개 변수로 지정할 수 있습니다. 지정한 추가 설정은 단순히 기본 MSDeploy.exe 명령으로 전달됩니다. 이러한 설정에 대한 자세한 내용은 웹 배포 작업 설정을 참조하세요.

.deploy.cmd 파일을 실행하여 ContactManager.Mvc 웹 애플리케이션 프로젝트를 테스트 환경에 배포한다고 가정합니다. 테스트 환경은 웹 배포 게시용 웹 서버 구성(원격 에이전트)에 설명된 대로 웹 배포 원격 에이전트 서비스를 사용하도록 구성됩니다. 웹 애플리케이션을 배포하려면 다음 단계를 완료해야 합니다.

.deploy.cmd 파일을 사용하여 웹 애플리케이션을 배포하려면

  1. 웹 애플리케이션 프로젝트 빌드 및 패키징에 설명된 대로 웹 애플리케이션 프로젝트를 빌드하고 패키징합니다.

  2. 웹 패키지 배포에 대한 매개 변수 구성에 설명된 대로 테스트 환경에 대한 올바른 매개 변수 값을 포함하도록 ContactManager.Mvc.SetParameters.xml 파일을 수정합니다.

  3. 명령 프롬프트 창을 열고 ContactManager.Mvc.deploy.cmd 파일의 위치로 이동합니다.

  4. 이 명령을 입력한 다음 Enter 키를 누릅니다.

    ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
    

이 예제에서는 다음이 적용됩니다.

  • /Y 플래그는 평가판 실행을 수행하는 대신 패키지를 실제로 배포하려고 했음을 나타냅니다.
  • /M 플래그는 TESTWEB1이라는 서버에 패키지를 배포할 것임을 나타냅니다. 이 값에서 MSDeploy.exe 에서 웹 배포 원격 에이전트 서비스에 패키지를 배포하려고 시도합니다. http://TESTWEB1/MSDeployAgentService.
  • /A 플래그는 NTLM 인증을 사용하려는 경우를 나타냅니다. 따라서 사용자 이름과 암호를 지정할 필요가 없습니다.

.deploy.cmd 파일을 사용하여 배포 프로세스를 간소화하는 방법을 설명하려면 위에 표시된 옵션을 사용하여 ContactManager.Mvc.deploy.cmd를 실행할 때 생성되고 실행되는 MSDeploy.exe 명령을 살펴보세요.

msdeploy.exe 
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
 includeAcls='False' 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
 ContactManager.Mvc.SetParameters.xml"

.deploy.cmd 파일을 사용하여 웹 패키지를 배포하는 방법에 대한 자세한 내용은 방법: deploy.cmd 파일을 사용하여 배포 패키지 설치를 참조하세요.

MSDeploy.exe 사용

.deploy.cmd 파일을 사용하면 일반적으로 배포 프로세스가 간소화되지만 MSDeploy.exe 직접 사용하는 것이 더 좋은 경우가 있습니다. 예:

  • 관리자가 아닌 사용자로 웹 배포 처리기에 배포하려는 경우 .deploy.cmd 파일을 사용할 수 없습니다. 이는 엔드포인트 고려 사항에 설명된 대로 웹 배포 2.0의 버그 때문입니다.
  • 다른 위치에 있는 다른 SetParameters.xml 파일 간에 수동으로 전환하려는 경우 MSDeploy.exe 직접 사용하는 것이 좋습니다.
  • 여러 MSDeploy.exe 명령줄 인수를 재정의하려는 경우 MSDeploy.exe 직접 사용하는 것이 좋습니다.

MSDeploy.exe 사용하는 경우 다음 세 가지 주요 정보를 제공해야 합니다.

  • 데이터의 출처를 나타내는 –source 매개 변수입니다.
  • 데이터가 어디로 가는지 나타내는 –dest 매개 변수입니다.
  • 수행하려는 작업을 나타내는 –verb 매개 변수입니다.

MSDeploy.exe 웹 배포 공급자를 사용하여 원본 및 대상 데이터를 처리합니다. 웹 배포에는 작업할 수 있는 애플리케이션 및 데이터 원본의 범위를 나타내는 많은 공급자가 포함되어 있습니다. 예를 들어 SQL Server 데이터베이스, IIS 웹 서버, 인증서, GAC(전역 어셈블리 캐시) 어셈블리, 다양한 구성 파일 및 기타 많은 유형의 데이터에 대한 공급자가 있습니다. –source 매개 변수와 –dest 매개 변수는 모두 –source:[providerName]=[location] 형식으로 공급자를 지정해야 합니다. IIS 웹 사이트에 웹 패키지를 배포하는 경우 다음 값을 사용해야 합니다.

  • –source 공급자는 항상 패키지입니다. 예:

    -source:package='[path to web package]'
    
  • –dest 공급자는 항상 자동입니다. 예를 들어:

    -dest:auto='[server name or service URL]'
    
  • –동사는 항상 동기화됩니다.

    -verb:sync
    

또한 다양한 다른 공급자별 설정 및 일반 작업 설정을 지정해야 합니다. 예를 들어 ContactManager.Mvc 웹 애플리케이션을 스테이징 환경에 배포하려는 경우를 가정해 보겠습니다. 배포는 웹 배포 처리기를 대상으로 하며 기본 인증을 사용해야 합니다. 웹 애플리케이션을 배포하려면 다음 단계를 완료해야 합니다.

MSDeploy.exe사용하여 웹 애플리케이션을 배포하려면

  1. 웹 애플리케이션 프로젝트 빌드 및 패키징에 설명된 대로 웹 애플리케이션 프로젝트를 빌드하고 패키징합니다.

  2. 웹 패키지 배포에 대한 매개 변수 구성에 설명된 대로 스테이징 환경에 대한 올바른 매개 변수 값을 포함하도록 ContactManager.Mvc.SetParameters.xml 파일을 수정합니다.

  3. 명령 프롬프트 창을 열고 MSDeploy.exe 위치로 이동합니다. 일반적으로 %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe.

  4. 이 명령을 입력한 다음 Enter 키를 누릅니다(줄 바꿈 무시).

    MSDeploy.exe
      -source:package="[path]\ContactManager.Mvc.zip"
      -dest:auto,
            computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
            username="FABRIKAM\stagingdeployer",
            $CREDENTIAL_PLACEHOLDER$,
            authtype="Basic",
            includeAcls="False"
      -verb:sync
      -disableLink:AppPoolExtension
      -disableLink:ContentExtension
      -disableLink:CertificateExtension
      -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
      -allowUntrusted
    

이 예제에서는 다음이 적용됩니다.

  • –source 매개 변수는 패키지 공급자를 지정하고 웹 패키지의 위치를 나타냅니다.
  • –dest 매개 변수는 자동 공급자를 지정합니다. computerName 설정은 대상 서버에서 웹 배포 처리기의 서비스 URL을 제공합니다. 인증 설정은 기본 인증을 사용하려고 하므로 사용자 이름과암호를 제공해야 했음을 나타냅니다. 마지막으로 includeAcls="False" 설정은 원본 웹 애플리케이션에 있는 파일의 ACL(액세스 제어 목록)을 대상 서버에 복사하지 않음을 나타냅니다.
  • –verb:sync 인수는 대상 서버에서 원본 콘텐츠를 복제할 것임을 나타냅니다.
  • –disableLink 인수는 대상 서버에서 애플리케이션 풀, 가상 디렉터리 구성 또는 SSL(Secure Sockets Layer) 인증서를 복제하지 않으려는 것임을 나타냅니다. 자세한 내용은 웹 배포 링크 확장을 참조하세요.
  • –setParamFile 매개 변수는 SetParameters.xml 파일의 위치를 제공합니다.
  • –allowUntrusted 스위치는 웹 배포가 신뢰할 수 있는 인증 기관에서 발급하지 않은 SSL 인증서를 수락해야 임을 나타냅니다. 웹 배포 처리기에 배포하고 자체 서명된 인증서를 사용하여 서비스 URL을 보호한 경우 이 스위치를 포함해야 합니다.

웹 패키지 배포 자동화

많은 엔터프라이즈 시나리오에서는 더 큰 단일 단계 또는 자동화된 배포의 일부로 웹 패키지를 배포하려고 합니다. .deploy.cmd 파일을 실행하거나 MSDeploy.exe 직접 사용하여 웹 패키지를 배포할지 여부에 관계없이 명령을 매개 변수화하고 MSBuild(Microsoft Build Engine) 프로젝트 파일의 대상에서 호출할 수 있습니다.

Contact Manager 샘플 솔루션에서 Publish.proj 파일의 PublishWebPackages 대상을 살펴봅니다. 이 대상은 PublishPackages라는 항목 목록으로 식별되는 각 .deploy.cmd 파일에 대해 한 번 실행됩니다. 대상은 속성 및 항목 메타데이터를 사용하여 각 .deploy.cmd 파일에 대한 전체 인수 값 집합을 빌드한 다음 Exec 작업을 사용하여 명령을 실행합니다.

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  ...
  <PropertyGroup>
    <_WhatIfSwitch>/Y</_WhatIfSwitch>
    <_WhatIfSwitch Condition=" '$(_WhatIf)'=='true' ">/T</_WhatIfSwitch>
    <_Cmd>
      %(PublishPackages.FullPath) $(_WhatifSwitch) /M:$(MSDeployComputerName) 
      /U:$(MSDeployUsername) /P:$(Password) /A:$(MSDeployAuth) 
      %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

참고

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

엔드포인트 고려 사항

.deploy.cmd 파일을 실행하거나 MSDeploy.exe 직접 사용하여 웹 패키지를 배포하든 관계없이 배포에 대한 컴퓨터 이름 또는 서비스 엔드포인트를 지정해야 합니다.

대상 웹 서버가 웹 배포 원격 에이전트 서비스를 사용하여 배포하도록 구성된 경우 대상 서비스 URL을 대상으로 지정합니다.

http://[server name]/MSDeployAgentService

또는 서버 이름만 대상으로 지정할 수 있으며 웹 배포는 원격 에이전트 서비스 URL을 유추합니다.

[server name]

대상 웹 서버가 웹 배포 처리기를 사용하여 배포하도록 구성된 경우 IIS WMSvc(웹 관리 서비스)의 엔드포인트 주소를 대상으로 지정해야 합니다. 기본적으로 다음과 같은 형식을 사용합니다.

https://[server name]:8172/MSDeploy.axd

.deploy.cmd 파일을 사용하거나 직접 MSDeploy.exe 사용하여 이러한 엔드포인트를 대상으로 지정할 수 있습니다. 그러나 웹 배포 게시용 웹 서버 구성(웹 배포 처리기)에 설명된 대로 관리자가 아닌 사용자로 웹 배포 처리기에 배포하려는 경우 서비스 엔드포인트 주소에 쿼리 문자열을 추가해야 합니다.

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

관리자가 아닌 사용자는 IIS에 대한 서버 수준 액세스 권한이 없기 때문입니다. 특정 IIS 웹 사이트에만 액세스할 수 있습니다. 쓰기 시 WPP(웹 게시 파이프라인)의 버그로 인해 쿼리 문자열이 포함된 엔드포인트 주소를 사용하여 .deploy.cmd 파일을 실행할 수 없습니다. 이 시나리오에서는 MSDeploy.exe 직접 사용하여 웹 패키지를 배포해야 합니다.

참고

웹 배포 원격 에이전트 서비스 및 웹 배포 처리기에 대한 자세한 내용은 웹 배포에 적합한 방법 선택을 참조하세요. 이러한 엔드포인트에 배포하도록 환경별 프로젝트 파일을 구성하는 방법에 대한 지침은 대상 환경에 대한 배포 속성 구성을 참조하세요.

인증 고려 사항

.deploy.cmd 파일을 실행하거나 MSDeploy.exe 직접 사용하여 웹 패키지를 배포하든 관계없이 인증 유형을 지정해야 합니다. Web Deploy는 NTLM 또는 Basic의 두 가지 가능한 값을 허용 합니다. 기본 인증을 지정하는 경우 사용자 이름과 암호도 제공해야 합니다. 인증 유형을 선택할 때 알아야 할 다양한 요소가 있습니다.

  • 웹 배포 원격 에이전트 서비스에 배포하는 경우 NTLM 인증을 사용해야 합니다. 원격 에이전트 서비스는 기본 인증 자격 증명을 허용하지 않습니다.
  • 웹 배포 처리기에 배포하는 경우 NTLM 또는 기본 인증을 사용할 수 있습니다. 기본 설정은 기본 인증입니다. 기본 인증은 일반 텍스트로 전송되는 사용자 이름과 암호를 사용하지만 웹 배포 처리기가 항상 SSL 암호화를 사용하므로 자격 증명이 보호됩니다.
  • 웹 패키지에 데이터베이스가 포함되어 있고 웹 서버와 데이터베이스 서버가 별도의 컴퓨터인 경우 NTLM "더블 홉" 제한으로 인해 NTLM 인증을 사용하여 데이터베이스를 배포할 수 없습니다. 배포 연결 문자열에서 SQL Server 자격 증명을 사용하거나 웹 배포에 기본 인증 자격 증명을 제공해야 합니다. 이 문제는 엔터프라이즈 환경에 멤버 자격 데이터베이스 배포에 자세히 설명되어 있습니다.

결론

이 항목에서는 .deploy.cmd 파일을 실행하거나 MSDeploy.exe 직접 사용하여 웹 패키지를 배포하는 방법을 설명했습니다. 각 방법이 적절한 경우를 설명하고 더 큰 단일 단계 또는 자동화된 빌드 프로세스의 일부로 배포 명령을 매개 변수화하고 실행하는 방법을 설명했습니다.

추가 정보

웹 배포 패키지를 만들고 매개 변수화하는 방법에 대한 지침은 웹 애플리케이션 프로젝트 빌드 및 패키징웹 패키지 배포에 대한 매개 변수 구성을 참조하세요. TFS(Team Foundation Server) instance 웹 패키지를 빌드하고 배포하는 방법에 대한 지침은 자동화된 웹 배포를 위한 Team Foundation Server 구성을 참조하세요. 배포 프로세스를 사용자 지정하고 문제를 해결하는 방법에 대한 자세한 내용은 배포 에서 파일 및 폴더 제외를 참조하세요.