연습: 웹 배포 패키지를 사용하여 웹 응용 프로그램 프로젝트 배포(3/4부)

이 연습은 웹 배포 패키지를 사용하여 웹 응용 프로그램 프로젝트를 배포하는 방법을 보여 주는 시리즈 중 세 번째 연습입니다. 시리즈에 대한 자세한 내용은 연습: 웹 배포 패키지를 사용하여 웹 응용 프로그램 프로젝트 배포(1/4부)를 참조하십시오.

이 연습에서는 웹 응용 프로그램 프로젝트를 스테이징 환경에 배포하는 데 사용될 배포 패키지를 만듭니다. 패키지는 설치 시 일부 구성 값을 변경할 수 있도록 하는 매개 변수를 사용하여 만들어집니다. 이렇게 하면 프로덕션 서버에 배포할 때도 동일한 패키지를 사용할 수 있습니다. 이 연습에서는 다음 작업을 수행합니다.

  • 릴리스 빌드 구성에 대한 패키지 만들기

  • 대상 환경에 대한 Web.config 파일 설정 변환

  • 배포 중에 사용자 지정 SQL 스크립트 포함

  • 기본 ASP.NET 멤버 자격 데이터베이스 배포(로컬 컴퓨터에서 만들어진 계정 정보는 제외)

  • 패키지가 설치될 때 변경할 수 있도록 할 구성 값에 사용자 지정 배포 매개 변수 사용

처음 두 연습에서 디버그 빌드 구성에 대해 수행한 것처럼 App_Data 폴더에 있는 두 데이터베이스의 내용을 단일 데이터베이스에 배포합니다.

다른 사용자가 대상 환경을 대신 설정하는 경우 해당 사용자가 대상 데이터베이스에 대한 연결 문자열을 제공해야 합니다. 대상 데이터베이스를 직접 만드는 경우에는 첫 번째 연습에서 수행한 것과 유사한 다음 절차를 수행할 수 있습니다.

참고참고

대상 서버에서 데이터베이스에 액세스할 수 있는 한 대상 서버나 다른 컴퓨터에서 다음 절차를 수행할 수 있습니다. 대상 서버가 아닌 컴퓨터에서 데이터베이스를 만드는 경우 원격 연결을 통해 데이터베이스에 액세스할 수 있는지 확인해야 합니다. 이렇게 하는 방법에 대한 설명은 이 연습의 범위를 벗어납니다. 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.

대상 데이터베이스를 만들려면

  1. 서버 탐색기에서 데이터 연결을 마우스 오른쪽 단추로 클릭한 다음 새 SQL Server 데이터베이스 만들기를 클릭합니다.

    새 SQL Server 데이터베이스 만들기 대화 상자가 표시됩니다.

  2. 서버 이름 상자에 localhost\SQLExpress를 입력합니다.

  3. 새 데이터베이스 이름 상자에 AdventureWorksStaging을 입력합니다.

  4. 확인을 클릭합니다.

이 시리즈의 이전 연습에서 디버그 빌드 구성에 대한 배포 설정을 구성했습니다. 그러나 일부 배포 설정은 스테이징 서버와 프로덕션 서버를 대상으로 배포하는 경우 다르게 지정되어야 합니다. 예를 들어 .pdb 파일은 디버깅에만 사용되기 때문에 일반적으로 스테이징 서버나 프로덕션 서버에는 .pdb 파일을 배포하지 않습니다. 따라서 릴리스 빌드 구성에 대한 새 배포 설정을 만들어야 합니다. 이 프로세스의 첫 번째 단계는 릴리스 빌드 구성이 선택되어 있는지 확인하는 것입니다.

활성 빌드 구성을 설정하려면

  1. 빌드 메뉴에서 구성 관리자를 클릭합니다.

    구성 관리자 대화 상자가 표시됩니다.

  2. 활성 솔루션 구성 드롭다운 목록에서 릴리스를 선택합니다.

    활성 솔루션 구성 목록은 일반적으로 표준 도구 모음에도 표시됩니다. 목록이 이 도구 모음에 표시되는 경우 구성 관리자를 열지 않고 빌드 구성을 확인하거나 변경할 수 있습니다.

  3. 구성 관리자를 닫습니다.

다음 단계는 릴리스 구성에 대해 배포할 파일 및 IIS 설정과 패키지를 만드는 방법을 지정하는 것입니다. 다음 절차에서는 프로젝트의 속성 페이지에 있는 웹 패키지 및 게시 탭을 사용하여 이 작업을 수행합니다.

릴리스 구성에 대한 배포 패키지 설정을 지정하려면

  1. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  2. 웹 패키지 및 게시 탭을 선택합니다.

  3. 구성 드롭다운 목록에서 활성(Release)이 선택되어 있는지 확인합니다.

  4. 배포할 항목(모든 배포 방법에 적용) 드롭다운 목록에서 이 응용 프로그램을 실행하는 데 필요한 파일만이 선택되어 있는지 확인합니다.

  5. 생성된 디버그 기호 제외 확인란을 선택합니다.

    스테이징 또는 프로덕션에서 디버깅을 사용하도록 설정할 계획이 없으므로 .pdf 파일을 배포하지 않으려고 합니다.

  6. App_Data 폴더에서 파일 제외 확인란을 선택합니다.

  7. SQL 패키지 및 게시 탭에서 구성된 모든 데이터베이스 포함 확인란이 선택되어 있는지 확인합니다.

  8. 배포 패키지를 ZIP 파일로 만들기 확인란이 선택되어 있는지 확인합니다.

  9. 패키지를 만들 위치 상자에 다음 값(AdventureWorks를 프로젝트 이름으로 지정한 경우 기본값)이 포함되어 있는지 확인합니다.

    obj\Release\Package\AdventureWorks.zip

  10. 대상 서버에서 사용할 IIS 웹 사이트 및 응용 프로그램 이름 상자에 Default Web Site/AdventureWorks를 입력합니다.

  11. 웹 패키지 및 게시 탭에 변경 사항을 저장합니다.

스테이징 서버와 프로덕션 서버에 배포하기 위한 데이터베이스 배포 설정은 디버그 빌드 구성에 대해 입력한 설정과 유사하며, 차이점은 ASP.NET 멤버 자격 시스템에 입력한 테스트 사용자 계정을 배포하지 않는 것입니다. 그러나 ASP.NET 멤버 자격 데이터베이스에 대해 스키마만 데이터베이스 배포를 지정할 수는 없습니다. 이는 데이터베이스의 테이블 중 하나에 ASP.NET 멤버 자격 시스템에 필요한 구성 데이터가 포함되어 있기 때문입니다. 따라서 사용자 지정 스크립트를 만들어 구성 데이터를 추가합니다.

두 스크립트가 배포 시 실행되도록 지정합니다. 첫 번째 스크립트는 스키마만 설정에 대해 자동으로 생성된 것이고, 두 번째 스크립트는 사용자 지정 스크립트입니다.

다음 절차에서는 구성 데이터를 배포된 aspnet_SchemaVersions 테이블에 삽입하는 사용자 지정 스크립트를 만듭니다.

데이터를 배포된 aspnet_SchemaVersions 테이블에 삽입하는 사용자 지정 스크립트를 만들려면

  1. 명령줄 프롬프트에서 다음 웹 배포 명령을 입력합니다.

    "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dbfullsql="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename= [full path to aspnetdb.mdf] \aspnetdb.mdf;User Instance=true" -dest:dbfullsql="c:\temp\aspnet_SchemaVersions.sql

    이 웹 배포 명령은 aspnet_SchemaVersions.sql이라는 데이터베이스 스크립트를 만들고 C:\Temp 폴더에 스크립트를 저장합니다. 이 스크립트는 멤버 자격 데이터베이스를 만듭니다.

    원하는 폴더에 스크립트를 저장할 수 있습니다. 이 연습의 뒷부분에서 스크립트에 액세스하기 때문에 이 위치를 기억해 둡니다.

    [full path to aspnetdb.mdf]를 aspnetdb.mdf 파일의 실제 경로로 바꿉니다. Program Files 폴더가 다른 드라이브에 있는 경우 적절한 드라이브 문자로 바꿉니다. 솔루션 탐색기에서 aspnetmdb.mdf를 선택할 때 속성 창의 전체 경로 속성에서 aspnetmdb.mdf 파일의 경로를 찾을 수 있습니다.

  2. 메모장과 같은 텍스트 편집기에서 aspnet_SchemaVersions.sql을 열고 aspnet_SchemaVersions 테이블에 대한 Insert 문을 제외하고 모든 항목을 삭제합니다.

    aspnet_SchemaVersions.sql 파일은 이제 다음 예제와 유사합니다.

    INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'common', N'1', 1)
    GO
    INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'health monitoring', N'1', 1)
    GO
    INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'membership', N'1', 1)
    GO
    INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'personalization', N'1', 1)
    GO
    INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'profile', N'1', 1)
    GO
    INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'role manager', N'1', 1)
    GO
    
  3. aspnet_SchemaVersions.sql을 저장하고 닫습니다.

다음 절차에서는 배포할 데이터베이스와 배포하는 방법을 지정합니다. 이전 절차에서 만든 사용자 지정 스크립트도 추가합니다.

배포 중에 실행될 SQL Server 스크립트를 지정하려면

  1. SQL 패키지 및 게시 탭을 클릭합니다.

  2. Web.config에서 가져오기를 클릭합니다.

  3. 데이터베이스 항목 표에서 ApplicationServices-Deployment 행이 선택되어 있는지 확인합니다.

  4. 대상 데이터베이스에 대한 연결 문자열 상자에 대상 데이터베이스에 대한 연결 문자열을 입력합니다. 이전 단계에서 만든 데이터베이스에 배포하는 경우 다음 단계를 수행하여 이 작업을 수행할 수 있습니다.

    1. 서버 탐색기에서 데이터 연결 폴더를 확장하고 AdventureWorksStaging 데이터베이스를 선택합니다.

    2. 속성 창에서 연결 문자열 속성의 값을 선택하여 Windows 클립보드에 복사합니다.

    3. 대상 데이터베이스에 대한 연결 문자열 상자에 연결 문자열을 붙여 넣습니다.

    4. 연결 문자열에서 localhost를 컴퓨터의 이름으로 변경합니다.

      이 작업은 원격 컴퓨터에 배포하기 때문에 필요합니다. 배포 스크립트나 응용 프로그램이 원격 컴퓨터에서 실행되는 경우 localhost는 더 이상 사용자 컴퓨터를 참조하지 않습니다.

  5. 기존 데이터베이스에서 데이터 및/또는 스키마 가져오기 확인란이 선택되어 있는지 확인합니다.

  6. 데이터베이스 스크립트 옵션 목록을 스키마만으로 설정합니다.

  7. 다음 단계를 수행하여 이전에 만든 aspnet_SchemaVersions.sql 스크립트를 추가합니다.

    1. 스크립트 추가 단추를 클릭합니다.

    2. 파일 선택 대화 상자에서 C:\Temp\aspnet_SchemaVersions.sql로 이동한 다음 열기 단추를 클릭합니다. 이 연습의 앞부분에서 다른 폴더에 스크립트를 저장한 경우에는 해당 폴더 이름을 사용하십시오.

      aspnet_SchemaVersions.sql 파일 스크립트가 데이터베이스 스크립트 표에 추가됩니다.

  8. 데이터베이스 항목 테이블에서 AWLTConnectionString-Deployment 행을 선택합니다.

  9. 대상 데이터베이스에 대한 연결 문자열 상자에 ApplicationServices 데이터베이스에 대해 입력한 동일한 연결 문자열을 입력합니다.

  10. 기존 데이터베이스에서 데이터 및/또는 스키마 가져오기 확인란이 선택되어 있는지 확인합니다.

  11. 데이터베이스 스크립트 옵션 목록을 스키마 및 데이터로 설정합니다.

  12. 다음 단계를 수행하여 데이터베이스 읽기 권한을 IIS 응용 프로그램 풀에 부여하는 스크립트를 추가합니다.

    1. 만든 데이터베이스에 배포하는 경우 이 시리즈의 첫 번째 연습에서 만든 AdventureWorksGrant.sql 스크립트를 수정합니다. CREATE LOGIN SQL 명령을 제거합니다. 다른 사용자가 대신 만든 데이터베이스에 배포하는 경우에는 해당 사용자가 스크립트를 제공해야 합니다.

      로그인이 데이터베이스에 대해 만들어지지 않고 서버에 대해 만들어지기 때문에 CREATE LOGIN 명령을 제거해야 합니다.

    2. 스크립트 추가 단추를 클릭합니다.

    3. 파일 선택 대화 상자에서 사용할 스크립트로 이동하고 열기 단추를 클릭합니다.

      스크립트가 데이터베이스 스크립트 표에 추가됩니다.

      참고참고

      이 스크립트는 Windows 7 및 Windows Server 2008 R2에서 기본 보안 설정을 사용하여 작동하도록 디자인되었습니다. 이전 버전의 Windows를 사용하거나 컴퓨터에 사용자 지정 보안 설정이 있는 경우 이 스크립트는 웹 사이트가 IIS에서 실행될 때 웹 사이트에서 사용하는 자격 증명에 해당 데이터베이스를 사용할 수 있도록 설정하지 못할 수 있습니다. SQL Server 보안에 대한 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.

  13. SQL 패키지 및 게시 탭에 변경 사항을 저장합니다.

이 시리즈의 첫 번째 연습에서는 프로젝트 파일을 편집하여 AdventureWorksGrant.sql 스크립트가 트랜잭션에서 실행되도록 지정했습니다. 이에 따라 모든 스크립트가 동일한 트랜잭션 모드에서 실행되도록 배포 프로세스가 구성되었습니다. 릴리스 빌드 구성에 대해 새 설정을 만들었기 때문에 릴리스 빌드 구성에 대해 동일하게 변경해야 합니다. 이 연습에서 추가한 새로운 사용자 지정 스크립트(aspnet_SchemaVersions.sql)에 대해서도 동일하게 변경해야 합니다.

다음 절차에서는 프로젝트 파일에서 이러한 두 가지 변경을 수행합니다.

사용자 지정 스크립트가 트랜잭션에서 실행되도록 지정하려면

  1. 메모장과 같은 텍스트 편집기에서 AdventureWorks.csproj 또는 AdventureWorks.vbproj 파일을 엽니다.

    솔루션 탐색기에서 프로젝트 디렉터리로 이동하여 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 Windows 탐색기에서 폴더 열기를 클릭합니다.

  2. 디버그 빌드 구성과 관련된 PropertyGroup 요소를 찾습니다.

    이 요소의 여는 태그는 다음 예제와 유사합니다.

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

  3. PropertyGroup 요소 안에서 PublishDatabaseSettings 요소를 찾습니다.

  4. PublishDatabaseSettings 요소에서 ApplicationServices-Deployment라는 ObjectGroup 요소를 찾습니다.

    ObjectGroup 요소 안에 있는 두 번째 Object 요소는 aspnet_SchemaVersions.sql 스크립트용입니다.

  5. aspnet_SchemaVersions.sql 스크립트용인 Object 요소에서 Source 요소의 Transacted 특성 값을 True로 변경합니다.

  6. PublishDatabaseSettings 요소에서 AWLTConnectionString-Deployment라는 ObjectGroup 요소를 찾습니다.

    ObjectGroup 요소 안에 있는 두 번째 Object 요소는 AdventureWorksGrant.sql 스크립트용입니다.

  7. AdventureWorksGrant.sql 스크립트용인 Object 요소에서 Source 요소의 Transacted 특성 값을 True로 변경합니다.

  8. 변경 내용을 저장하고 프로젝트 파일을 닫습니다.

  9. Visual Studio에서 프로젝트를 다시 로드할 것인지 묻는 메시지가 표시되면 다시 로드 단추를 클릭합니다.

  10. 빌드 메뉴에서 AdventureWorks 정리를 클릭합니다.

이 시리즈의 첫 번째 연습에서 디버그 빌드 구성에 대해 수행한 것처럼 배포된 Web.config 파일의 연결 문자열이 적절한 데이터베이스를 가리키는지 확인해야 합니다. 또한 스테이징 서버에 배포하기 전에 배포된 Web.config 파일에서 다음과 같이 변경할 수 있습니다.

  • 디버깅을 사용하지 않도록 설정합니다.

  • 최소 암호 길이를 8로 늘립니다.

  • 사이트가 웹 팜 환경에서 실행될 수 있도록 machineKey 값을 설정합니다. machineKey 값은 일반적으로 스테이징 환경과 프로덕션 환경에서 서로 다릅니다. 따라서 두 환경에서 동일한 패키지를 사용하려면 설치 시 이 값을 구성할 수 있는지 확인해야 합니다.

다음 절차에서는 디버깅을 사용하지 않도록 설정하고 암호 길이를 늘리는 변환 파일을 릴리스 빌드 구성에 대해 만듭니다.

배포된 Web.config 파일에 대해 변환을 구성하려면

  1. 솔루션 탐색기에서 Web.config 파일 노드를 확장합니다.

  2. Web.Debug.config 파일을 엽니다.

  3. 전체 connectionStrings 요소를 Windows 클립보드로 복사합니다.

  4. Web.Debug.config를 닫습니다.

  5. Web.Release.config 파일을 엽니다.

    디버깅을 사용하지 않도록 설정하기 위해 별도로 작업을 수행할 필요는 없습니다. 다음 예제와 같이 기본 Web.Release.config 파일에 이 작업을 수행하는 태그가 이미 포함되어 있습니다.

    <system.web>
      <compilation xdt:Transform="RemoveAttributes(debug)" />
      ...
    </system.web>
    
  6. connectionStrings 요소가 포함된 주석 블록을 삭제하고 클립보드의 내용을 그 위치에 붙여 넣습니다.

  7. compilation 요소 바로 뒤에 다음 태그를 추가합니다.

    <machineKey 
       validationKey="staging" 
       decryptionKey="staging" 
       xdt:Transform="Insert" />
    
  8. Web.Release.config 파일을 저장한 다음 닫습니다.

다음 절차에서는 프로덕션 서버에 패키지를 설치할 때 machineKey 값을 변경하는 데 사용할 수 있는 배포 매개 변수를 만듭니다.

machineKey 값에 대한 배포 매개 변수를 만들려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  2. 설치된 템플릿 패널에서 C# 또는 Visual Basic을 선택한 다음 XML 파일 템플릿을 선택합니다.

  3. 이름 상자에 Parameters.xml을 입력한 다음 추가를 클릭합니다.

  4. <?xml version="1.0 encoding="utf-8" ?>를 삭제하고 다음 태그를 추가합니다.

    <parameters>
      <parameter name="machineKey" 
        description="Please provide the machineKey value."
        defaultValue="staging"
        tags="">
        <parameterEntry kind="XmlFile"
          scope="obj\\Release\\Package\\PackageTmp\\Web\.config$"
          match="//machineKey[@validationKey]" />
        <parameterEntry kind="XmlFile"
          scope="obj\\Release\\Package\\PackageTmp\\Web\.config$"
          match="//machineKey[@decryptionKey]" />
      </parameter>
    </parameters>
    

    이 태그는 machineKey라는 매개 변수를 만듭니다. 만든 패키지를 IIS 관리자를 사용하여 설치하는 경우 description 특성 값이 machineKey 값을 입력할 수 있는 상자의 레이블로 표시됩니다.

    parameterEntry 요소는 이 매개 변수의 값이 사용되는 위치를 지정합니다. kind 특성은 값이 XML 파일에 삽입되도록 지정합니다. scope 특성은 정규식을 사용하여 업데이트할 XML 파일을 지정합니다. 경로는 배포된 웹 응용 프로그램에 배치될 Web.config 파일의 경로가 아니라 패키지가 만들어졌을 때 Web.config 파일의 경로를 나타냅니다. match 특성은 XPath 식을 사용하여 업데이트할 특성을 선택합니다. 이러한 특성은 machineKey 요소의 validationKeydecryptionKey 특성입니다.

다음 절차에서는 스테이징 서버와 프로덕션 서버에 배포하는 데 사용할 수 있는 패키지를 만듭니다.

패키지를 만들려면

  • 프로젝트 메뉴에서 배포 패키지 빌드를 클릭합니다.

    프로젝트가 빌드된 다음 배포 패키지가 만들어져 출력 창에 로그가 표시됩니다. 이 시리즈의 마지막 연습에서는 원격 서버에 이 패키지를 설치합니다.

이 시리즈의 처음 두 연습에서는 개발 컴퓨터에서 테스트하기 위해 파일 시스템 웹 응용 프로그램 프로젝트를 IIS 웹 응용 프로그램에 배포했습니다. 이 연습에서는 Visual Studio에서 패키지를 만들 때 생성되는 deploy.cmd 파일을 사용하여 원격 컴퓨터에 배포할 수 있는 패키지를 만들었습니다.

이 시리즈의 마지막 연습인 다음 연습은 연습: 웹 배포 패키지를 사용하여 웹 응용 프로그램 프로젝트 배포(4/4부)입니다. 마지막 연습에서는 패키지를 실제로 배포합니다.

표시: