ASP.NET 웹 응용 프로그램 프로젝트 배포 개요

Visual Studio 2010에서 ASP.NET 웹 응용 프로그램 프로젝트 또는 ASP.NET 웹 사이트 프로젝트를 만든 후에는 일반적으로 다른 사용자가 응용 프로그램에 액세스할 수 있는 웹 서버에 프로젝트를 배포합니다. 배포에는 단순히 한 서버에서 다른 서버로 응용 프로그램 파일을 복사하는 것 이상의 작업이 관련됩니다. 다음과 같은 추가 작업을 수행해야 할 수도 있습니다.

  • 디버깅 또는 데이터베이스 연결 문자열에 대한 설정 등 대상 환경에서 달라져야 하는 Web.config 파일 설정 변경

  • 웹 응용 프로그램에서 사용하는 데이터베이스의 데이터나 데이터 구조 전파

  • 대상 컴퓨터에서 응용 프로그램 풀, 인증 방법, 디렉터리 검색이 허용되는지 여부 및 오류 처리와 같은 IIS 설정 구성

  • 보안 인증서 설치

  • 대상 컴퓨터의 레지스트리에서 값 설정

  • 대상 컴퓨터의 GAC(전역 어셈블리 캐시)에 응용 프로그램 어셈블리 설치

웹 배포라는 이름의 Microsoft Internet Information Services (IIS) 확장은 대부분의 배포 작업을 자동화할 수 있습니다. Visual Studio에서는 웹 배포와 함께 작동하여 웹 응용 프로그램 프로젝트의 배포를 보다 쉽게 해 주는 도구를 제공합니다.

참고

이 항목은 웹 응용 프로그램 프로젝트 템플릿을 사용하여 만드는 웹 응용 프로그램과 관련된 내용입니다.웹 응용 프로그램은 웹 사이트 프로젝트 템플릿을 사용하여 만들 수도 있습니다.웹 사이트 프로젝트를 배포하는 방법에 대한 자세한 내용은 ASP.NET 웹 사이트 프로젝트 배포 개요를 참조하십시오.

이 항목에는 다음과 같은 단원이 포함되어 있습니다.

  • 웹 배포 패키지

  • One-Click 게시

  • 엔터프라이즈 시나리오

  • 타사 호스팅 시나리오

  • Web.config 파일 변환

  • SQL Server 데이터베이스 배포

  • 웹 게시 파이프라인 확장

이 개요에서 설명하는 항목에 대한 자세한 내용은 ASP.NET 배포 콘텐츠 맵을 참조하십시오.

웹 배포 패키지

Visual Studio를 사용하여 웹 배포 패키지를 만들고 이 패키지를 대상 서버에 설치하여 웹 응용 프로그램 프로젝트를 배포할 수 있습니다. 배포 패키지는 IIS에서 응용 프로그램을 설치하고 응용 프로그램 파일을 해당 위치에 복사하고 데이터베이스 등의 관련 리소스를 설치하는 데 필요한 모든 정보를 포함하는 압축 파일(.zip)입니다.

배포 패키지를 만들고 설치하는 단계는 별도 프로세스로 수행할 수 있습니다. 또는 한 번의 단계로 원격에서 배포할 수 있게 하는 One-Click 게시를 사용할 수도 있습니다. 기본적으로 One-Click 게시에서는 패키지를 만들지 않지만 필요한 경우 패키지를 만들도록 지정할 수 있습니다.

배포 패키지에는 응용 프로그램의 소스 파일 및 이진 파일 외에도 일반적으로 다음 유형의 정보가 들어 있는 파일이 포함됩니다.

  • 응용 프로그램 풀, 인증 방법, 디렉터리 검색이 허용되는지 여부 및 오류 처리와 같은 IIS 설정

  • 변경 내용을 데이터베이스 데이터 또는 데이터베이스 구조로 전파하는 데 사용되는 데이터베이스 스크립트

  • 디버깅 또는 연결 문자열 설정과 같이 패키지를 설치할 때 변경해야 하는 값이 들어 있는 매개 변수

Visual Studio 패키지 작성 프로세스는 확장 가능합니다. 다음은 패키지에 포함할 수 있지만 사용자 지정 확장이 필요한 정보의 몇 가지 예입니다.

  • 보안 인증서

  • Windows 레지스트리 설정

  • 대상 컴퓨터의 GAC에 설치되어야 하는 어셈블리(.dll 파일)

배포 패키지에 포함할 항목 지정

Visual Studio에서는 프로젝트 속성 페이지의 패키지 및 게시 탭에서 사용자가 만든 설정을 사용하여 배포 패키지에 포함할 항목을 결정합니다. 다음 그림은 패키지 및 게시 탭을 보여 줍니다.

패키지/게시 대화 상자

패키지 작성에 영향을 주는 데이터베이스 관련 설정은 이 항목의 뒷부분에 설명된 SQL 패키지 및 게시 탭에서 입력합니다.

이 두 탭에서 가장 일반적으로 사용하는 설정을 업데이트할 수 있습니다. 비교적 덜 사용되는 다른 설정은 Visual Studio 프로젝트 파일(.csproj 또는 .vbproj)에 저장되며 이 파일을 직접 편집하여 변경할 수 있습니다.

배포 패키지 만들기

다음과 같은 방법으로 패키지를 만들 수 있습니다.

  • Visual Studio의 도구를 사용합니다.

  • 명령줄에서 직접 MSBuild 명령을 사용합니다.

  • PowerShell 또는 팀 빌드에서 간접적으로 MSBuild 명령을 사용합니다.

배포 패키지 설치

배포 패키지를 만든 후에는 대상 컴퓨터에 이를 설치할 수 있습니다. 웹 배포에서는 패키지에 포함된 정보를 사용하여 IIS 구성, 데이터베이스 설정, 폴더 구조 만들기 및 폴더 구조로 파일 복사 등을 수행하고 응용 프로그램 배포에 필요한 다른 모든 작업을 수행합니다.

패키지는 다음과 같은 방법으로 설치할 수 있습니다.

  • 명령줄에서 웹 배포를 사용합니다.

  • 패키지를 설치하는 웹 배포 명령을 포함하도록 Visual Studio에서 만들어진 .cmd 파일을 사용합니다. 웹 배포 명령은 길고 복잡할 수 있으므로 명령줄에서 패키지를 보다 쉽게 설치할 수 있도록 이 파일이 제공됩니다.

  • IIS 관리자를 사용합니다.

  • PowerShell을 사용하여 웹 배포 명령을 실행합니다.

패키지를 만들 때 패키지에 매개 변수를 포함할 수 있습니다. 이러한 매개 변수는 이름-값 쌍으로, 패키지를 만들 때 기본값을 제공할 수 있지만 패키지를 설치할 때는 해당 매개 변수에 대해 새 값을 제공할 수 있습니다. IIS 관리자를 사용하여 패키지를 설치할 경우 새 값을 입력할 수 있도록 텍스트 상자에 매개 변수 이름이 표시됩니다. 명령줄에서 웹 배포를 사용하여 설치할 경우에는 XML 파일에서 매개 변수 값을 지정할 수 있습니다.

패키지 폴더의 위치 및 내용

기본적으로 Visual Studio에서는 MSBuild IntermediateOutputPath 속성으로 식별되는 폴더에 배포 패키지가 생성됩니다. IntermediateOutputPath 속성은 다음 그림의 솔루션 탐색기 창에서처럼 프로젝트의 obj\Configuration 폴더를 참조합니다.

배포 패키지 파일을 보여 주는 솔루션 탐색기

Configuration에 대해 미리 정의된 이름은 앞의 그림과 같이 DebugRelease입니다. 다른 빌드 구성을 추가로 정의할 수도 있습니다.

패키지는 Package라는 폴더에 만들어집니다. Package 폴더에는 다음 파일이 포함됩니다.

  • projectname.zip. 이 파일은 실제 배포 패키지입니다.

  • projectname.deploy.cmd. 이 파일은 명령줄에서 패키지를 보다 쉽게 설치할 수 있도록 웹 배포를 호출하는 명령줄 배치 파일입니다.

  • projectname.SetParameters.xml. 이 파일에는 deploy.cmd 파일을 사용하여 패키지를 설치할 때 웹 배포로 전달되는 매개 변수가 포함됩니다. 각 매개 변수에 대해 Visual Studio 패키지 설정에 따라 결정되는 기본값이 지정됩니다. 예를 들어 각 서버에 서로 다른 설정을 사용하여 여러 서버에 웹 응용 프로그램을 설치하려면 이 값을 변경하면 됩니다.

  • projectname.SourceManifest.xml. 이 파일에는 Visual Studio에서 웹 배포로 전달되고 웹 배포에서 웹 패키지를 만드는 데 사용된 설정이 포함됩니다. 이 파일은 웹 배포에서 패키지를 만드는 데만 필요하며, 패키지를 설치할 때는 사용되지 않습니다.

패키지를 .zip 파일로 만들지 않도록 선택한 경우 .zip 파일에 저장되던 파일은 Archive라는 폴더에 포함됩니다. 이 경우 deploy.cmd, SetParameter.xml 및 SourceManifest.xml 파일 이름의 첫 번째 노드는 projectname이 아니라 "Archive"가 됩니다.

다음 그림에서는 Visual Studio, 웹 배포 및 이러한 파일 간의 상호 관계를 보여 줍니다.

Visual Studio에서 만든 배포 패키지 파일

One-Click 게시

Visual Studio의 one-click 게시 기능을 사용하여 원격으로 배포할 수도 있습니다. 이 경우 Visual Studio에서 응용 프로그램을 배포하는 방법 및 위치는 게시 프로필에 지정됩니다. 다음 그림에서는 게시 프로필 대화 상자를 보여 줍니다.

게시 프로필 대화 상자

One-Click 게시를 사용하여 응용 프로그램을 타사 호스팅 업체에 배포하려는 경우 게시 프로필 대화 상자에 필요한 설정은 일반적으로 해당 호스팅 업체에서 제공합니다.

게시 설정을 모두 지정한 후 이 대화 상자나 한 번 클릭으로 웹 게시 도구 모음에서 게시 단추를 클릭할 수 있습니다. 그러면 Visual Studio에서 응용 프로그램을 대상 서버에 배포합니다. 웹 응용 프로그램 프로젝트가 이미 배포된 후에 게시 단추를 클릭하면 변경된 항목만 다시 배포됩니다.

프로필을 여러 개 만들어 두면 서로 다른 서버에 게시하거나 다양한 설정으로 동일한 서버에 게시할 수 있습니다.

엔터프라이즈 시나리오

엔터프라이즈 환경에서는 일반적으로 개발 컴퓨터에서 하나 이상의 중간 환경, 즉 테스트 서버 또는 스테이징 서버로 배포하게 됩니다. 그런 다음 중간 환경 중 하나에서 프로덕션 환경으로 배포합니다.

개발 환경에서 최초로 배포할 경우 일반적인 시나리오에는 다음이 포함됩니다.

  • Visual Studio를 사용하여 배포 패키지를 만들고 이를 수동으로 설치합니다.

  • 명령줄 프로세스를 사용하여 배포 패키지를 만들고 설치합니다. 이 절차는 일반적으로 소스 제어 리포지토리에서 MSBuild를 사용하여 일괄 처리 모드로 수행됩니다.

  • one-click 게시 사용 이 옵션은 개발 컴퓨터가 원격으로 대상 환경에 액세스할 수 있고 대상 컴퓨터가 선택한 게시 방법에 맞게 설정되어 있으며 사용자가 대상 컴퓨터에서 적절한 사용 권한을 가진 경우에 사용할 수 있습니다. 기본적으로 One-Click 게시에서는 패키지를 만들지 않습니다. 그러나 보관 또는 백업용으로 사용하기 위해 패키지를 만들도록 지정할 수도 있습니다.

최초 배포 이후에 한 환경에서 다음 환경으로 배포하려면 최초 배포를 위해 만든 것과 동일한 패키지를 사용하면 됩니다. 또는 웹 배포를 사용하여 배포를 시작한 컴퓨터에서 새 패키지를 만들어도 됩니다.

다음 그림에서는 일반적인 엔터프라이즈 시나리오를 보여 줍니다.

엔터프라이즈 웹 배포를 위한 일반적인 시나리오

타사 호스팅 시나리오

타사 호스팅 업체를 이용 중이고 개발 컴퓨터에서 해당 호스팅 업체로 직접 배포하는 경우에는 다음 옵션이 제공됩니다.

  • Visual Studio one-click 게시를 사용합니다.

  • 패키지를 만들고 IIS 관리자를 사용하여 원격으로 패키지를 설치합니다.

호스팅 업체에서 응용 프로그램은 공유 환경 또는 전용 서버에 있을 수 있습니다. 공유 환경에서 호스팅되는 응용 프로그램의 경우 일반적으로 환경을 구성하는 데 상당한 제약이 따릅니다. 예를 들어 공유 호스팅 환경에서는 IIS 설정을 변경할 수 없는 것이 일반적입니다.

다음 그림에서는 일반적인 타사 호스팅 시나리오를 보여 줍니다.

일반적인 타사 호스팅 배포 시나리오

Web.config 파일 변환

Web.config 파일에는 주로 응용 프로그램이 실행되는 환경에 따라 달라져야 하는 설정이 포함됩니다. 예를 들어 Web.config 파일을 대상 서버로 배포할 경우 다음과 같은 사항을 변경해야 할 수도 있습니다.

  • 프로덕션 데이터베이스를 가리키도록 데이터베이스 연결 문자열을 변경합니다.

  • 프로덕션 환경에서 디버깅을 사용할 수 없게 합니다.

  • 패키지를 커뮤니티 사이트에 제공하는 경우 등에는 연결 문자열 같은 중요한 정보를 제거합니다.

Web.config 파일의 변경 사항을 수동으로 관리하기 위해 다음을 수행할 수 있습니다.

  • 프로젝트가 배포될 때마다 대상 서버에서 Web.config 파일을 편집합니다.

  • 폴더를 분리하거나 고유한 이름을 사용하여 각 환경별로 Web.config 파일의 개별 버전을 유지하고, 배포 시 대상 환경에 적합한 버전만 복사합니다.

  • XSLT 파일을 만들어 Web.config를 변환하고 응용 프로그램 배포 시 이 변환을 적용합니다.

웹 응용 프로그램 프로젝트의 경우 ASP.NET에서는 배포 시 Web.config 파일의 변경(변환) 프로세스를 자동화하는 도구를 제공합니다. 배포 대상 환경 각각에 대해 해당 환경별로 Web.config 파일의 차이점만 지정하는 변환 파일을 만드십시오.

변환 파일 이름에는 대상 환경 이름(빌드 구성 이름)이 "Web"과 "config" 사이에 추가 노드로 포함됩니다. 예를 들어 디버그 빌드 구성에 대한 변환 파일은 Web.Debug.Config입니다. Visual Studio 솔루션 탐색기 창에서는 다음 그림과 같이 이러한 파일이 Web.config 파일 아래에 자동으로 그룹화됩니다.

Web.config 변환 파일이 있는 솔루션 탐색기

변환 파일은 Web.config 파일이 어떻게 변경되어야 하는지 지정하는 XML 파일입니다. 변환 파일에서는 Web.config 파일을 배포에 적합하게 변환하기 위해 특별히 디자인된 XML 특성이 사용됩니다. 예를 들어 Web.config 파일에 다음 연결 문자열 섹션이 있는 경우를 가정해 봅니다.

<connectionStrings>
  <add name="ApplicationServices"
      connectionString="[TestDatabase]" />
</connectionStrings>

다음 변환 파일에서는 웹 응용 프로그램을 배포할 때 ApplicationServices라는 연결 문자열이 프로덕션 데이터베이스를 가리키게끔 자동으로 변환되도록 지정합니다.

<?xml version="1.0"?>
<configuration xmlns:xdt="https://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="ApplicationServices" 
        connectionString="[ProductionDatabase]" 
        xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>

이 예제에서 Locator 특성 값 Match(name)는 동일한 이름(ApplicationServices)의 add 요소만 변경되도록 지정합니다. Transform 특성 값 Replace는 배포 프로세스에서 전체 add 요소를 바꾸도록 지정합니다.

SQL Server 데이터베이스 배포

SQL Server 데이터베이스를 사용하는 웹 응용 프로그램을 배포하는 경우 데이터 구조, 데이터 또는 둘 모두를 전파해야 할 수도 있습니다. Visual Studio에서는 대상 데이터베이스에서 이 작업을 수행하기 위해 자동으로 스크립트(.sql 파일)가 작성될 수 있으며, 이러한 스크립트는 웹 패키지에 포함될 수 있습니다. 사용자 지정 SQL Server 스크립트를 포함한 후 스크립트의 실행 순서를 지정할 수도 있습니다. 배포 패키지가 설치될 때 웹 배포는 대상 서버에서 스크립트를 실행합니다.

SQL Server 배포 옵션은 프로젝트의 속성 페이지에 있는 SQL 패키지 및 게시 탭에서 지정할 수 있습니다. 다음 그림은 SQL 패키지 및 게시 탭을 보여 줍니다.

프로젝트 속성의 SQL 패키지 및 게시 탭

웹 게시 파이프라인 확장

WPP(웹 게시 파이프라인)는 배포 패키지를 만들거나 One-Click 게시를 사용할 때 Visual Studio에서 사용되는 프로세스입니다. WPP에서 수행되는 작업은 실제로는 MSBuild와 웹 배포에 의해 수행됩니다. 따라서 Visual Studio에서 배포하든 명령줄 도구를 사용하여 배포하든 동일한 기능을 사용할 수 있습니다.

MSBuild 동작을 제어하는 XML 파일을 수정하여 WPP의 일부 요소를 확장할 수 있습니다. 예를 들어 XML 파일을 수정하여 처리할 수 있는 작업에는 다음이 포함됩니다.

  • 특정 웹 응용 프로그램 파일 또는 폴더를 패키지에서 제외

  • 패키지를 만들기 전에 웹 응용 프로그램 미리 컴파일

  • 대상 서버의 GAC에 응용 프로그램 어셈블리 설치

  • 대상 서버의 레지스트리 키 업데이트

  • 대상 서버에 SSL 인증서 설치

다른 작업의 경우에는 MSBuild와 웹 배포를 모두 확장해야 합니다. 예를 들어 웹 응용 프로그램에서 MSMQ를 사용하는 경우 MSMQ 배포를 자동화하려면 웹 배포용 MSMQ 공급자를 만든 다음 MSBuild를 제어하는 파일을 수정하여 WPP에 이 공급자를 추가하면 됩니다.

웹 배포에서는 .NET Framework 공급자 모델이 사용됩니다. 배포에 대해 관리해야 하는 각 정보 종류는 공급자에 의해 처리됩니다. 예를 들어 IIS 설정, SQL Server 데이터베이스, 웹 콘텐츠(예: .html 파일 및 .aspx 파일) 등을 위한 공급자가 따로 있습니다.

웹 배포에서는 패키지를 만들 때 각 공급자를 호출하여 배포할 응용 프로그램과 관련된 정보를 수집합니다. 웹 배포에서는 공급자를 호출하여 정보를 serialize하고 이를 파일에 저장합니다. 웹 배포에서 패키지를 설치할 때 공급자는 해당 패키지용으로 만들어진 파일을 읽고 대상 환경에 원래 설정을 다시 만드는 데 필요한 정보를 deserialize합니다. 공급자는 설치 시 매개 변수를 처리할 수 있어야 합니다. 즉, IIS 관리자 UI나 Parameters.xml 파일에서 설치 시 제공된 값을 처리할 수 있어야 합니다.

다음 그림에서는 웹 응용 프로그램의 정보, 웹 배포 공급자, 웹 배포 API, 배포 패키지 및 매개 변수 파일 간의 데이터 흐름을 보여 줍니다. 이 그림에서 Parameters.xml은 해당 역할을 보여 주기 위해 패키지 .zip 파일 옆에 표시되어 있습니다. 그러나 Parameters.xml은 실제로는 패키지 .zip 파일에 포함되어 있습니다.

개발 컴퓨터

개발 컴퓨터의 웹 배포 공급자

웹 서버

대상 서버의 웹 배포 공급자

웹 배포에서는 웹 응용 프로그램과 관련된 대부분의 리소스 종류에 적합한 공급자를 제공합니다. 그러나 기본 제공 공급자가 요구 사항에 적합하지 않은 경우에는 사용자 지정 공급자를 작성할 수 있습니다. 사용할 수 있는 공급자 목록을 보려면 Microsoft TechNet 웹 사이트의 Web Deploy Providers를 참조하십시오.

다음 그림에서는 웹 배포를 사용하여 패키지하거나 게시할 때 WPP의 일반적인 단계 순서를 보여 줍니다. 이 그림에서 보여 주는 WPP는 다음 단계를 추가하여 확장되었습니다.

  • 지정된 파일 제외

  • 웹 응용 프로그램 미리 컴파일

  • GAC 어셈블리, COM 어셈블리 및 레지스트리 키 배포

  • SSL 인증서 배포

WPP(웹 게시 파이프라인)

One-Click 게시와 함께 웹 배포 이외의 방법을 사용하여 배포하려는 경우 다음 그림과 같이 WPP 중 웹 배포에 적용되지 않는 부분만 확장할 수 있습니다.

웹 배포가 없는 WPP(웹 게시 파이프라인)

웹 게시 파이프라인을 특정 시나리오에 맞게 확장하는 방법을 설명하는 예제는 Visual Web Developer 팀 블로그의 다음 항목을 참조하십시오.

참고 항목

개념

ASP.NET 배포 콘텐츠 맵