다음을 통해 공유


다중 환경을 위한 데이터베이스 배포 사용자 지정

작성자: Jason Lee

이 항목에서는 배포 프로세스의 일부로 데이터베이스의 속성을 특정 대상 환경에 맞게 조정하는 방법을 설명합니다.

참고

이 항목에서는 MSBuild.exe 및 VSDBCMD.exe 사용하여 Visual Studio 2010 데이터베이스 프로젝트를 배포한다고 가정합니다. 이 방법을 선택하는 이유에 대한 자세한 내용은 엔터프라이즈의 웹 배포데이터베이스 프로젝트 배포를 참조하세요.

여러 대상에 데이터베이스 프로젝트를 배포하는 경우 각 대상 환경에 대한 데이터베이스 배포 속성을 사용자 지정하는 경우가 많습니다. 예를 들어 테스트 환경에서는 일반적으로 모든 배포에서 데이터베이스를 다시 만드는 반면 스테이징 또는 프로덕션 환경에서는 데이터를 보존하기 위해 증분 업데이트를 수행할 가능성이 훨씬 더 높습니다.

Visual Studio 2010 데이터베이스 프로젝트에서 배포 설정은 배포 구성(.sqldeployment) 파일 내에 포함됩니다. 이 항목에서는 환경별 배포 구성 파일을 만들고 VSDBCMD 매개 변수로 사용할 배포 구성 파일을 지정하는 방법을 보여줍니다.

이 항목은 Fabrikam, Inc.라는 가상 회사의 엔터프라이즈 배포 요구 사항을 기반으로 하는 일련의 자습서의 일부를 구성합니다. 이 자습서 시리즈에서는 샘플 솔루션인 Contact Manager 솔루션을 사용하여 ASP.NET MVC 3 애플리케이션, WCF(Windows Communication Foundation) 서비스 및 데이터베이스 프로젝트를 포함하여 현실적인 수준의 복잡성이 있는 웹 애플리케이션을 나타냅니다.

이 자습서의 핵심인 배포 방법은 프로젝트 파일 이해에 설명된 분할 프로젝트 파일 접근 방식을 기반으로 하며, 빌드 프로세스는 모든 대상 환경에 적용되는 빌드 지침과 환경별 빌드 및 배포 설정을 포함하는 두 개의 프로젝트 파일에 의해 제어됩니다. 빌드 시 환경별 프로젝트 파일은 환경에 구애받지 않은 프로젝트 파일로 병합되어 전체 빌드 지침 집합을 형성합니다.

작업 개요

이 항목에서는 다음과 같이 가정합니다.

  • 프로젝트 파일 이해에 설명된 대로 솔루션 배포에 분할 프로젝트 파일 접근 방식을 사용합니다.
  • 빌드 프로세스 이해에 설명된 대로 프로젝트 파일에서 VSDBCMD를 호출하여 데이터베이스 프로젝트를 배포합니다.

대상 환경 간에 다양한 데이터베이스 배포 속성을 지원하는 배포 시스템을 만들려면 다음을 수행해야 합니다.

  • 각 대상 환경에 대한 배포 구성(.sqldeployment) 파일을 만듭니다.
  • 배포 구성 파일을 명령줄 스위치로 지정하는 VSDBCMD 명령을 만듭니다.
  • VSDBCMD 옵션이 대상 환경에 적합하도록 MICROSOFT BUILD ENGINE(MSBuild) 프로젝트 파일에서 VSDBCMD 명령을 매개 변수화합니다.

이 항목에서는 이러한 각 절차를 수행하는 방법을 보여 줍니다.

Environment-Specific 배포 구성 파일 만들기

기본적으로 데이터베이스 프로젝트에는 Database.sqldeployment라는 단일 배포 구성 파일이 포함되어 있습니다. Visual Studio 2010에서 이 파일을 열면 사용할 수 있는 다양한 배포 옵션을 볼 수 있습니다.

  • 배포 비교 데이터 정렬. 이렇게 하면 프로젝트의 데이터베이스 데이터 정렬( 원본 데이터 정렬) 또는 대상 서버의 데이터베이스 데이터 정렬( 대상 데이터 정렬)을 사용할지 여부를 선택할 수 있습니다. 대부분의 경우 개발 또는 테스트 환경에 배포할 때 원본 데이터 정렬을 사용하려고 합니다. 스테이징 또는 프로덕션 환경에 배포하는 경우 일반적으로 상호 운용성 문제를 방지하기 위해 대상 데이터 정렬을 변경하지 않은 상태로 두는 것이 좋습니다.
  • 데이터베이스 속성을 배포합니다. 이렇게 하면 Database.sqlsettings 파일에 정의된 대로 데이터베이스 속성을 적용할지 여부를 선택할 수 있습니다. 데이터베이스를 처음으로 배포하는 경우 데이터베이스 속성을 배포해야 합니다. 기존 데이터베이스를 업데이트하는 경우 속성이 이미 배치되어 있어야 하며 다시 배포할 필요가 없습니다.
  • 항상 데이터베이스를 다시 만듭니다. 이렇게 하면 스키마를 사용하여 대상 데이터베이스를 최신 상태로 만들기 위해 배포할 때마다 대상 데이터베이스를 다시 만들거나 증분 변경을 수행할지 여부를 선택할 수 있습니다. 데이터베이스를 다시 만들면 기존 데이터베이스의 데이터가 손실됩니다. 따라서 일반적으로 스테이징 또는 프로덕션 환경에 배포하는 경우 이를 false 로 설정해야 합니다.
  • 데이터 손실이 발생할 수 있는 경우 증분 배포를 차단합니다. 이렇게 하면 데이터베이스 스키마를 변경하면 데이터가 손실될 경우 배포를 중지할지 여부를 선택할 수 있습니다. 일반적으로 프로덕션 환경에 배포하는 경우 이를 true 로 설정하여 중요한 데이터를 개입하고 보호할 수 있는 기회를 제공합니다. Always re-create 데이터베이스를false로 설정한 경우 이 설정은 적용되지 않습니다.
  • 단일 사용자 모드에서 배포를 실행합니다. 일반적으로 개발 또는 테스트 환경에서는 문제가 되지 않습니다. 그러나 일반적으로 스테이징 또는 프로덕션 환경에 배포하는 경우 이를 true 로 설정해야 합니다. 이렇게 하면 배포가 진행되는 동안 사용자가 데이터베이스를 변경할 수 없습니다.
  • 배포 전에 데이터베이스를 백업합니다. 일반적으로 데이터 손실에 대한 예방 조치로 프로덕션 환경에 배포할 때 이를 true 로 설정합니다. 스테이징 데이터베이스에 많은 데이터가 포함된 경우 스테이징 환경에 배포할 때 true 로 설정할 수도 있습니다.
  • 대상 데이터베이스에 있지만 데이터베이스 프로젝트에 없는 개체에 대한 DROP 문을 생성합니다. 대부분의 경우 데이터베이스를 증분 방식으로 변경하는 데 필수적인 부분입니다. Always re-create 데이터베이스를false로 설정한 경우 이 설정은 적용되지 않습니다.
  • ALTER ASSEMBLY 문을 사용하여 CLR 형식을 업데이트하지 마세요. 이 설정은 SQL Server CLR(공용 언어 런타임) 형식을 최신 어셈블리 버전으로 업데이트하는 방법을 결정합니다. 대부분의 시나리오에서 false 로 설정해야 합니다.

이 표에서는 다양한 대상 환경에 대한 일반적인 배포 설정을 보여 줍니다. 그러나 정확한 요구 사항에 따라 설정이 다를 수 있습니다.

개발자/테스트 스테이징/통합 프로덕션
배포 비교 데이터 정렬 원본 대상 대상
데이터베이스 속성 배포 처음만 처음만
항상 데이터베이스 다시 만들기 False 거짓
데이터가 손실되면 증분 배포 차단 거짓 가능할 수도 있음
단일 사용자 모드에서 배포 스크립트 실행 False True True
배포 전에 데이터베이스 백업 거짓 가능할 수도 있음
대상 데이터베이스에 있지만 데이터베이스 프로젝트에 없는 개체에 대한 DROP 문 생성 False True True
ALTER ASSEMBLY 문을 사용하여 CLR 형식 업데이트 안 함 False False 거짓

여러 대상에 데이터베이스 프로젝트 배포를 지원하려면 각 대상 환경에 대한 배포 구성 파일을 만들어야 합니다.

환경별 구성 파일을 만들려면

  1. Visual Studio 2010의 솔루션 탐색기 창에서 데이터베이스 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  2. 데이터베이스 프로젝트 속성 페이지의 배포 탭의 배포 구성 파일 행에서 새로 만들기를 클릭합니다.

    데이터베이스 프로젝트 속성 페이지의 배포 탭의 배포 구성 파일 행에서 새로 만들기를 클릭합니다.

  3. 새 배포 구성 파일 대화 상자에서 파일에 의미 있는 이름(예: TestEnvironment.sqldeployment)을 지정하고 저장을 클릭합니다.

  4. [Filename].sqldeployment 페이지에서 대상 환경의 요구 사항과 일치하도록 배포 속성을 설정한 다음 파일을 저장합니다.

    파일 이름 .sqldeployment 페이지에서 대상 환경의 요구 사항과 일치하도록 배포 속성을 설정한 다음 파일을 저장합니다.

  5. 새 파일이 데이터베이스 프로젝트의 속성 폴더에 추가됩니다.

    새 파일이 데이터베이스 프로젝트의 속성 폴더에 추가됩니다.

VSDBCMD에서 배포 구성 파일 지정

Visual Studio 2010 내에서 솔루션 구성(예: 디버그 및 릴리스)을 사용하는 경우 배포 구성 파일을 각 구성과 연결할 수 있습니다. 특정 구성을 빌드할 때 빌드 프로세스는 구성별 배포 구성 파일을 가리키는 구성별 배포 매니페스트 파일을 생성합니다. 그러나 이러한 자습서에 설명된 배포 방법의 기본 목표 중 하나는 Visual Studio 2010 및 솔루션 구성을 사용하지 않고 배포 프로세스를 제어할 수 있는 기능을 사용자에게 제공하는 것입니다. 이 방법에서 솔루션 구성은 대상 배포 환경에 관계없이 동일합니다. 데이터베이스 배포를 특정 대상 환경에 맞게 조정하려면 VSDBCMD 명령줄 옵션을 사용하여 배포 구성 파일을 지정할 수 있습니다.

VSDBCMD에서 배포 구성 파일을 지정하려면 p:/DeploymentConfigurationFile 스위치를 사용하고 파일의 전체 경로를 제공합니다. 그러면 배포 매니페스트가 식별하는 배포 구성 파일이 재정의됩니다. 예를 들어 이 VSDBCMD 명령을 사용하여 ContactManager 데이터베이스를 테스트 환경에 배포할 수 있습니다.

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /p:DeploymentConfigurationFile=
              "…\ContactManager.Database_TestEnvironment.sqldeployment"
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

참고

빌드 프로세스는 파일을 출력 디렉터리에 복사할 때 .sqldeployment 파일의 이름을 바꿀 수 있습니다.

배포 전 또는 배포 후 SQL 스크립트에서 SQL 명령 변수를 사용하는 경우 비슷한 방법을 사용하여 환경별 .sqlcmdvars 파일을 배포와 연결할 수 있습니다. 이 경우 p:/SqlCommandVariablesFile 스위치를 사용하여 .sqlcmdvars 파일을 식별합니다.

MSBuild 프로젝트 파일에서 VSDBCMD 명령 실행

MSBuild 대상 내에서 Exec 작업을 사용하여 MSBuild 프로젝트 파일에서 VSDBCMD 명령을 호출할 수 있습니다. 가장 간단한 형식은 다음과 같습니다.

<Target Name="DeployDatabase">     
   <PropertyGroup>      
      <_Cmd>
         Add your VSDBCMD command here
      </_Cmd>
   </PropertyGroup>
   <Exec Command="$(_Cmd)"/> 
 </Target>
  • 실제로 프로젝트 파일을 쉽게 읽고 다시 사용할 수 있도록 다양한 명령줄 매개 변수를 저장하는 속성을 만들어야 합니다. 이렇게 하면 사용자가 환경별 프로젝트 파일에서 속성 값을 제공하거나 MSBuild 명령줄에서 기본값을 더 쉽게 재정의할 수 있습니다. 프로젝트 파일 이해에 설명된 분할 프로젝트 파일 접근 방식을 사용하는 경우 빌드 지침과 속성을 두 파일 간에 적절하게 나누어야 합니다.
  • 배포 구성 파일 이름, 데이터베이스 연결 문자열 및 대상 데이터베이스 이름과 같은 환경별 설정은 환경별 프로젝트 파일로 이동해야 합니다.
  • VSDBCMD 실행 파일의 위치와 같은 범용 속성과 함께 VSDBCMD 명령을 실행하는 MSBuild 대상은 범용 프로젝트 파일로 이동해야 합니다.

또한 .deploymanifest 파일이 만들어지고 사용할 준비가 되도록 VSDBCMD를 호출하기 전에 데이터베이스 프로젝트를 빌드해야 합니다. 이 방법의 전체 예제는 Contact Manager 샘플 솔루션의 프로젝트 파일을 안내하는 빌드 프로세스 이해 항목에서 확인할 수 있습니다.

결론

이 항목에서는 MSBuild 및 VSDBCMD를 사용하여 데이터베이스 프로젝트를 배포할 때 데이터베이스 속성을 다른 대상 환경에 맞게 조정하는 방법을 설명했습니다. 이 방법은 대규모 엔터프라이즈 규모 솔루션의 일부로 데이터베이스 프로젝트를 배포해야 하는 경우에 유용합니다. 이러한 솔루션은 샌드박스 개발 또는 테스트 환경, 스테이징 또는 통합 플랫폼, 프로덕션 또는 라이브 환경과 같은 여러 대상에 배포되는 경우가 많습니다. 이러한 각 대상 환경에는 일반적으로 고유한 데이터베이스 배포 속성 집합이 필요합니다.

추가 정보

VSDBCMD.exe 사용하여 데이터베이스 프로젝트를 배포하는 방법에 대한 자세한 내용은 데이터베이스 프로젝트 배포를 참조하세요. 사용자 지정 MSBuild 프로젝트 파일을 사용하여 배포 프로세스를 제어하는 방법에 대한 자세한 내용은 프로젝트 파일 이해빌드 프로세스 이해를 참조하세요.

MSDN에 대한 이러한 문서는 데이터베이스 배포에 대한 보다 일반적인 지침을 제공합니다.