데이터베이스 프로젝트 배포
작성자: Jason Lee
참고 항목
많은 엔터프라이즈 배포 시나리오에서는 배포된 데이터베이스에 증분 업데이트를 게시하는 기능이 필요합니다. 대안은 모든 배포에서 데이터베이스를 다시 만드는 것입니다. 즉, 기존 데이터베이스의 데이터가 손실됩니다. Visual Studio 2010을 사용하는 경우 VSDBCMD를 사용하는 것이 증분 데이터베이스 게시에 권장되는 방법입니다. 그러나 다음 버전의 Visual Studio 및 WPP(웹 게시 파이프라인)에는 증분 게시를 직접 지원하는 도구가 포함됩니다.
Visual Studio 2010에서 Contact Manager 샘플 솔루션을 열면 데이터베이스 프로젝트에 4개의 파일이 포함된 속성 폴더가 포함되어 있음을 알 수 있습니다.
프로젝트 파일(이 경우 ContactManager.Database.dbproj )과 함께 이러한 파일은 빌드 및 배포 프로세스의 다양한 측면을 제어합니다.
- Database.sqlcmdvars 파일은 프로젝트를 배포할 때 사용하는 모든 SQLCMD 변수에 대한 값을 제공합니다. 각 솔루션 구성(예: 디버그 및 릴리스)은 다른 .sqlcmdvars 파일을 지정할 수 있습니다.
- Database.sqldeployment 파일은 프로젝트에 정의된 데이터 정렬을 사용할지 또는 대상 서버의 데이터 정렬을 사용할지, 매번 대상 데이터베이스를 다시 만들 것인지 아니면 단순히 기존 데이터베이스를 수정하여 최신 상태로 만들 것인지와 같은 배포별 설정을 제공합니다. 각 솔루션 구성은 다른 .sqldeployment 파일을 지정할 수 있습니다.
- Database.sqlpermissions 파일은 대상 데이터베이스에 추가하려는 모든 권한을 정의하는 데 사용할 수 있는 XML 문서입니다. 모든 솔루션 구성은 동일한 .sqlpermissions 파일을 공유합니다.
- Database.sqlsettings 파일은 사용할 데이터 정렬, 비교 연산자의 동작 등과 같이 데이터베이스를 만들 때 사용할 데이터베이스 수준 속성을 지정합니다. 모든 솔루션 구성은 동일한 .sqlsettings 파일을 공유합니다.
Visual Studio에서 이러한 파일을 열고 내용을 숙지하는 데 잠시 시간이 걸리는 것이 좋습니다.
데이터베이스 프로젝트를 빌드할 때 빌드 프로세스는 다음 두 개의 파일을 만듭니다.
- 데이터베이스 스키마(.dbschema 파일)입니다. XML 형식으로 만들려는 데이터베이스의 스키마에 대해 설명합니다.
- 배포 매니페스트(.deploymanifest 파일)입니다. 여기에는 데이터베이스를 만들고 배포하는 데 필요한 모든 정보가 포함됩니다. 배포 지침(.sqldeployment 파일) 및 배포 전 또는 배포 후 SQL 스크립트와 같은 다른 리소스와 함께 .dbschema 파일을 참조합니다.
다음 리소스 간의 관계를 보여 줍니다.
보듯이 .sqlsettings 파일 및 .sqlpermissions 파일은 빌드 프로세스에 대한 입력입니다. 이러한 파일은 데이터베이스 프로젝트 파일과 함께 데이터베이스 스키마 파일을 만드는 데 사용됩니다. .sqldeployment 파일 및 .sqlcmdvars 파일은 변경되지 않은 빌드 프로세스를 통과합니다. 배포 매니페스트는 데이터베이스 스키마, .sqldeployment 파일, .sqlcmdvars 파일 및 배포 전 또는 배포 후 SQL 스크립트의 위치를 나타냅니다.
VSDBCMD를 사용하여 데이터베이스 프로젝트를 배포하는 이유
데이터베이스 프로젝트를 배포하는 방법에는 다양한 방법이 있습니다. 그러나 모든 데이터베이스 프로젝트가 엔터프라이즈 환경의 원격 서버에 배포하는 데 적합한 것은 아닙니다. 데이터베이스 프로젝트 배포에서 원하는 항목을 고려합니다. 엔터프라이즈 배포 시나리오에서는 다음을 원할 수 있습니다.
- 원격 위치에서 데이터베이스 프로젝트를 배포하는 기능입니다.
- 기존 데이터베이스를 증분 업데이트하는 기능입니다.
- 배포 전 스크립트 또는 배포 후 스크립트를 포함하는 기능입니다.
- 배포를 여러 대상 환경에 맞게 조정하는 기능입니다.
- 일반적으로 스크립트된 더 큰 단일 단계 솔루션 배포의 일부로 데이터베이스 프로젝트를 배포하는 기능입니다.
데이터베이스 프로젝트를 배포하는 데 사용할 수 있는 세 가지 주요 방법은 다음과 같습니다.
- Visual Studio 2010에서 데이터베이스 프로젝트 형식으로 배포 기능을 사용할 수 있습니다. Visual Studio 2010에서 데이터베이스 프로젝트를 빌드하고 배포하는 경우 배포 프로세스는 배포 매니페스트를 사용하여 빌드 구성과 관련된 SQL 기반 배포 파일을 생성합니다. 데이터베이스가 아직 없는 경우 데이터베이스를 만들거나 데이터베이스가 이미 있는 경우 필요한 변경을 수행합니다. SQLCMD.exe 사용하여 대상 서버에서 이 파일을 실행하거나 Visual Studio를 설정하여 파일을 만들고 실행할 수 있습니다. 이 방법의 단점은 배포 설정을 제한하여 제어할 수 있다는 것입니다. 환경별 변수 값을 제공하도록 SQL 배포 파일을 수정해야 하는 경우가 많습니다. Visual Studio 2010이 설치된 컴퓨터에서만 이 방법을 사용할 수 있으며 개발자는 모든 대상 환경에 대한 연결 문자열 및 자격 증명을 알고 제공해야 합니다.
- IIS(인터넷 정보 서비스) 웹 배포 도구(웹 배포)를 사용하여 웹 애플리케이션 프로젝트의 일부로 데이터베이스를 배포할 수 있습니다. 그러나 이 방법은 대상 서버에서 기존 로컬 데이터베이스를 복제하는 대신 데이터베이스 프로젝트를 배포하려는 경우 훨씬 더 복잡합니다. 데이터베이스 프로젝트에서 생성하는 SQL 배포 스크립트를 실행하도록 웹 배포를 구성할 수 있지만 이렇게 하려면 웹 애플리케이션 프로젝트에 대한 사용자 지정 WPP 대상 파일을 만들어야 합니다. 이렇게 하면 배포 프로세스에 상당한 복잡성이 추가됩니다. 또한 웹 배포는 기존 데이터베이스에 대한 증분 업데이트를 직접 지원하지 않습니다. 이 방법에 대한 자세한 내용은 배포된 데이터베이스 프로젝트 SQL 파일을 패키지로 웹 게시 파이프라인 확장을 참조 하세요.
- VSDBCMD 유틸리티를 사용하여 데이터베이스 스키마 또는 배포 매니페스트를 사용하여 데이터베이스를 배포할 수 있습니다. 더 큰 스크립팅된 배포 프로세스의 일부로 데이터베이스를 게시할 수 있는 MSBuild 대상에서 VSDBCMD.exe 호출할 수 있습니다. VSDBCMD 명령에서 .sqlcmdvars 파일 및 기타 많은 데이터베이스 속성의 변수를 재정의할 수 있습니다. 이를 통해 여러 빌드 구성을 만들지 않고도 다양한 환경에 대한 배포를 사용자 지정할 수 있습니다. VSDBCMD는 차별화 기능을 제공합니다. 즉, 대상 데이터베이스를 데이터베이스 스키마에 맞추는 데 필요한 변경 내용만 적용됩니다. 또한 VSDBCMD는 배포 프로세스를 세분화하여 제어할 수 있는 다양한 명령줄 옵션을 제공합니다.
이 개요에서 MSBuild에서 VSDBCMD를 사용하는 것이 일반적인 엔터프라이즈 배포 시나리오에 가장 적합한 접근 방식임을 알 수 있습니다.
지원 | Visual Studio 2010 | 웹 배포 2.0 | VSDBCMD.exe |
---|---|---|---|
원격 배포를 지원합니까? | 예 | 예 | 예 |
증분 업데이트를 지원합니까? | 예 | 아니요 | 예 |
배포 전/후 스크립트를 지원합니까? | 예 | 예 | 예 |
다중 환경 배포를 지원합니까? | 제한됨 | 제한됨 | 예 |
스크립치된 배포를 지원합니까? | 제한적 | 예 | 예 |
이 항목의 나머지 부분에서는 MSBuild에서 VSDBCMD를 사용하여 데이터베이스 프로젝트를 배포하는 방법을 설명합니다.
배포 프로세스 이해
VSDBCMD 유틸리티를 사용하면 데이터베이스 스키마(.dbschema 파일) 또는 배포 매니페스트(.deploymanifest 파일)를 사용하여 데이터베이스를 배포할 수 있습니다. 실제로 배포 매니페스트를 사용하면 다양한 배포 속성에 대한 기본값을 제공하고 실행하려는 배포 전 또는 배포 후 SQL 스크립트를 식별할 수 있으므로 거의 항상 배포 매니페스트를 사용합니다. 예를 들어 이 VSDBCMD 명령은 테스트 환경의 데이터베이스 서버에 ContactManager 데이터베이스를 배포하는 데 사용됩니다.
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/dd+
/script:"…\Publish-ContactManager-Db.sql"
이 경우 다음과 같습니다.
- /a(또는 /Action) 스위치는 VSDBCMD에서 수행할 작업을 지정합니다. 가져오기 또는 배포로 설정할 수 있습니다. 가져오기 옵션은 기존 데이터베이스에서 .dbschema 파일을 생성하는 데 사용되며 배포 옵션은 대상 데이터베이스에 .dbschema 파일을 배포하는 데 사용됩니다.
- /manifest(또는 /ManifestFile) 스위치는 배포하려는 .deploymanifest 파일을 식별합니다. 대신 .dbschema 파일을 사용하려는 경우 /model(또는 /ModelFile) 스위치를 사용합니다.
- /cs(또는 /ConnectionString) 스위치는 대상 데이터베이스 서버에 대한 연결 문자열 제공합니다. 데이터베이스의 이름은 포함되지 않습니다. VSDBCMD는 데이터베이스를 만들기 위해 서버에 연결해야 합니다. 개별 데이터베이스에 연결할 필요가 없습니다. .deploymanifest 파일에 연결 문자열 포함된 경우 이 스위치를 생략할 수 있습니다. 스위치를 사용하는 경우 스위치 값이 .deploymanifest 값을 재정의합니다.
- /p:TargetDatabase 속성은 만들 때 대상 데이터베이스에 할당하려는 이름을 제공합니다. 이렇게 하면 .deploymanifest 파일의 TargetDatabase 속성 값이 재정의됩니다. /p: [속성 이름] 구문을 사용하여 다양한 배포 속성을 설정하고 .sqlcmdvars 파일에 선언된 SQLCMD 변수를 재정의할 수 있습니다.
- /dd+(또는 /DeployToDatabase+) 스위치는 배포를 만들고 대상 환경에 배포하려고 했음을 나타냅니다. /dd-를 지정하거나 스위치를 생략하면 VSDBCMD는 배포 스크립트를 생성하지만 대상 환경에 배포하지는 않습니다. 이 스위치는 종종 혼동의 원인이며 다음 섹션에서 자세히 설명합니다.
- /script(또는 /DeploymentScriptFile) 스위치는 배포 스크립트를 생성할 위치를 지정합니다. 이 값은 배포 프로세스에 영향을 주지 않습니다.
VSDBCMD 에 대한 자세한 내용은 VSDBCMD.EXE 대한 명령줄 참조(배포 및 스키마 가져오기) 및 방법: VSDBCMD.EXE 사용하여 명령 프롬프트에서 배포할 데이터베이스 준비를 참조하세요.
MSBuild 프로젝트 파일에서 VSDBCMD를 사용하는 방법에 대한 예제는 빌드 프로세스 이해를 참조 하세요. 여러 환경에 대한 데이터베이스 배포 설정을 구성하는 방법에 대한 예제는 여러 환경에 대한 데이터베이스 배포 사용자 지정을 참조 하세요.
DeployToDatabase 스위치 이해
/dd 또는 /DeployToDatabase 스위치의 동작은 .dbschema 파일 또는 .deploymanifest 파일과 함께 VSDBCMD를 사용하는지 여부에 따라 달라집니다. .dbschema 파일을 사용하는 경우 동작은 매우 간단합니다.
- /dd+ 또는 /dd를 지정하는 경우 VSDBCMD는 배포 스크립트를 생성하고 데이터베이스를 배포합니다.
- /dd-를 지정하거나 스위치를 생략하면 VSDBCMD는 배포 스크립트만 생성합니다.
.deploymanifest 파일을 사용하는 경우 동작이 훨씬 더 복잡합니다. .deploymanifest 파일에 데이터베이스 배포 여부를 결정하는 속성 이름 DeployToDatabase 가 포함되어 있기 때문입니다.
<DeployToDatabase>False</DeployToDatabase>
이 속성의 값은 데이터베이스 프로젝트의 속성에 따라 설정됩니다. 배포 작업을 설정하여 배포 스크립트 만들기(.sql)를 설정하면 값은 False입니다. 배포 작업을 설정하여 배포 스크립트(.sql)를 만들고 데이터베이스에 배포하는 경우 값은 True입니다.
참고 항목
이러한 설정은 특정 빌드 구성 및 플랫폼과 연결됩니다. 예를 들어 디버그 구성에 대한 설정을 구성한 다음 릴리스 구성을 사용하여 게시하는 경우 설정이 사용되지 않습니다.
참고 항목
이 시나리오에서는 Visual Studio 2010에서 데이터베이스를 배포하지 않기 때문에 배포 작업을 항상 배포 스크립트 만들기(.sql)로 설정해야 합니다. 즉, DeployToDatabase 속성은 항상 False여야 합니다.
DeployToDatabase 속성을 지정하면 /dd 스위치는 속성 값이 false인 경우에만 속성을 재정의합니다.
- DeployToDatabase 속성이 False이고 /dd+ 또는 /dd를 지정하는 경우 VSDBCMD는 DeployToDatabase 속성을 재정의하고 데이터베이스를 배포합니다.
- DeployToDatabase 속성이 False이고 /dd-를 지정하거나 스위치를 생략하면 VSDBCMD는 데이터베이스를 배포하지 않습니다.
- DeployToDatabase 속성이 True이면 VSDBCMD는 스위치를 무시하고 데이터베이스를 배포합니다.
- 데이터베이스를 배포하는지 여부에 관계없이 각 경우에 배포 스크립트가 생성됩니다.
결론
이 항목에서는 Visual Studio 2010의 데이터베이스 프로젝트에 대한 빌드 및 배포 프로세스에 대한 개요를 제공했습니다. 또한 MSBuild에서 VSDBCMD.exe 사용하여 엔터프라이즈 규모 데이터베이스 배포를 지원하는 방법도 설명했습니다.
실제로 작동하는 방법에 대한 자세한 내용은 여러 환경에 대한 데이터베이스 배포 사용자 지정을 참조 하세요.
추가 정보
각 환경에 대해 별도의 배포 구성 파일을 만들어 데이터베이스 배포를 사용자 지정하는 방법에 대한 자세한 내용은 여러 환경에 대한 데이터베이스 배포 사용자 지정을 참조 하세요. 배포 후 스크립트를 실행하여 데이터베이스 역할 멤버 자격을 구성하는 방법에 대한 지침은 테스트 환경에 데이터베이스 역할 멤버 자격 배포를 참조 하세요. 멤버 자격 데이터베이스가 부과하는 고유한 문제 중 일부를 관리하는 방법에 대한 지침은 엔터프라이즈 환경에 멤버 자격 데이터베이스 배포를 참조 하세요.
MSDN에 대한 다음 항목에서는 Visual Studio 데이터베이스 프로젝트 및 데이터베이스 배포 프로세스에 대한 광범위한 지침과 배경 정보를 제공합니다.