데이터베이스를 빌드하여 스테이징 환경 또는 프로덕션 환경에 배포

데이터베이스 개발자는 각각 별개의 격리된 개발 환경(샌드박스라고도 함)에서 개별 개발 작업을 수행합니다. 데이터베이스 프로젝트의 테스트된 버전을 스테이징 또는 프로덕션 환경에 배포하는 과정은 비슷하지만 몇 가지 주요 차이점이 있습니다.

일반적으로 스테이징 및 프로덕션 서버에 대한 액세스 권한은 제한됩니다. 이러한 서버에는 유지해야 하는 다른 데이터베이스가 있을 수 있습니다. 대상 데이터베이스가 이미 있는 경우도 종종 있으며 여기에도 유지해야 하는 데이터가 포함되어 있을 수 있습니다. 데이터베이스를 배포할 때는 개발 환경에 배포할 때에 비해 서버 설정을 수정해야 하는 경우가 별로 없습니다. 일부 경우에는 데이터베이스를 배포할 수 있는 권한이 있더라도 서버 설정을 업데이트할 수 있는 권한은 없을 수 있습니다.

스테이징 또는 프로덕션 환경에 배포하기 위한 데이터베이스 프로젝트 구성

데이터베이스 프로젝트의 배포 속성에서 해당 설정을 스테이징 및 프로덕션 환경에 맞게 구성할 수 있습니다. 이러한 설정은 다른 개발자가 자신의 격리된 개발 환경에 대해 구성한 설정과는 별개입니다. 이렇게 별개의 설정을 유지하면 다른 개발자가 수정할 수 없는 스테이징 및 프로덕션 환경에 맞게 프로젝트 구성을 설정할 수 있습니다. 각 구성에는 스테이징 또는 프로덕션 서버에 대한 대상 데이터베이스 연결과 고유한 .sqldeployment 및 .sqlcmdvars 파일이 있습니다.

배포 스크립트를 준비하되 실제 배포는 생략하도록 스테이징 및 프로덕션 설정을 구성할 수도 있습니다. 이 전략을 사용하면 배포 스크립트를 검토하고 필요한 경우 변경 작업을 수행한 후에 대상 환경에 배포 스크립트를 수동으로 배포할 수 있습니다.

배포 구성 세부 사항

스테이징 또는 프로덕션 환경에 프로젝트를 배포하기 전에 다음 문제를 고려해야 합니다.

  • 스테이징 또는 프로덕션 환경이 이미 설정되어 있기 때문에 대상 데이터베이스의 데이터 정렬을 사용해야 할 수 있습니다.

  • 데이터가 손실되기 때문에 매번 데이터베이스를 다시 만들지 않을 수 있습니다.

  • 새 데이터베이스를 배포하려는 경우 데이터베이스 속성을 배포할 수 있습니다. 기존 데이터베이스에 대한 업데이트를 배포하려는 경우 데이터베이스 속성이 이미 올바르게 설정되어 있기 때문에 데이터베이스 속성을 배포하지 않을 수 있습니다.

  • 개체 및 데이터를 배포 프로세스와 별개의 단계로 이미 백업한 경우가 아니면 데이터베이스를 배포 프로세스의 일부로 백업할 수 있습니다.

  • 프로덕션 데이터를 자주 포함하는 데이터베이스를 업데이트하기 때문에 데이터 손실이 발생할 경우 배포를 차단할 수 있습니다.

  • 해당 데이터베이스에 있지만 데이터베이스 프로젝트에는 없는 개체에 대해 DROP 문을 생성할 수 있습니다. 데이터베이스 프로젝트는 올바른 버전의 스테이징 및 프로덕션 스키마를 나타내야 합니다. 데이터베이스에 대한 업데이트를 배포한 후 수동으로 데이터를 이동해야 하는 경우는 예외가 될 수 있습니다. 이 경우에는 데이터를 마이그레이션하기 전까지 개체를 삭제하지 않을 수 있습니다.

SQL 명령 변수

스테이징 또는 프로덕션 환경에 배포할 때는 변수를 해당 환경에 적절한 값으로 설정해야 합니다. 예를 들어 스테이징 또는 프로덕션 환경에서 Service Broker 또는 서비스 인증서에 대해 개발 환경의 값과는 다른 값을 사용해야 할 수 있습니다. 각 대상 환경에 다른 .sqlcmdvars 파일을 지정하면 배포 대상을 변경할 때 해당 변수의 값을 변경하지 않아도 됩니다. 이 방법을 사용하면 MSBuild 변수에 대해 구성별 값을 갖도록 .sqlcmdvars 파일을 정의해야 할 필요도 없습니다. 배포할 각 구성에 대해 서로 다른 .sqlcmdvars 파일을 사용할 수 있습니다.

서버 프로젝트 배포

데이터베이스 프로젝트에는 데이터베이스 개체, 서버 개체 또는 둘 모두에 대한 정의가 포함될 수 있습니다. 대부분의 환경에서 개발자는 데이터베이스 개체를 변경할 수 있지만 서버 개체는 데이터베이스 관리자만 변경할 수 있습니다. 서버 개체를 서버 프로젝트라고 하는 별도의 프로젝트에 포함하면 이 제한을 적용할 수 있습니다. 그런 다음 관리자만 서버 프로젝트를 변경할 수 있도록 버전 제어를 제한할 수 있습니다. 스테이징 또는 프로덕션 환경에서 서버 프로젝트와 해당 개체는 데이터베이스 개체가 포함된 프로젝트와 별개로 배포되는 경우가 가장 많습니다.

서버 프로젝트를 배포하는 절차는 스키마 프로젝트를 배포하는 절차와 동일합니다.

역할 배포

데이터베이스를 배포할 모든 서버에 이 데이터베이스에서 사용하는 역할을 배포해야 합니다. 스테이징 또는 프로덕션 서버에 데이터베이스를 배포할 때는 필요한 모든 사용자를 정의하고 이 사용자를 적절한 역할과 연결해야 합니다.

명령줄 배포

Visual Studio Premium이 설치되지 않은 컴퓨터라도 다음 필수 구성 요소가 설치되어 있으면 명령 프롬프트에서 데이터베이스 프로젝트를 배포할 수 있습니다.

  • Microsoft .NET Framework 버전 3.5 서비스 팩 1

  • SMO(SQL Server Management Objects)

    이러한 개체는 SQL Server가 설치된 컴퓨터에 설치해야 합니다.

이러한 필수 구성 요소 외에도 다음 파일을 USB(범용 직렬 버스) 드라이브에 복사했다가 해당 컴퓨터로 전송해야 합니다.

  • 데이터베이스 프로젝트의 빌드 출력(디버그 또는 정식 버전)

  • Visual Studio Premium의 배포 폴더 내용

    이 폴더는 일반적으로 [Program Files]\VSTSDB\Deploy에 있습니다.

  • SQL Server Compact Edition의 어셈블리

필수 구성 요소를 설치하고 파일을 전송한 후 .dbschema 파일 형식으로 데이터베이스 프로젝트를 대상 데이터베이스에 배포할 수 있습니다.

일반 작업

다음 표에서는 이 시나리오를 지원하는 일반적인 작업에 대한 설명과 해당 작업을 성공적으로 완료하는 방법에 대한 자세한 내용을 볼 수 있는 링크를 보여 줍니다.

Task

지원 항목

빌드 및 배포 시작: 첫 번째 데이터베이스 프로젝트를 구성, 빌드 및 배포하기 전에 팀 환경에서 데이터베이스 프로젝트를 사용하는 방법을 이해할 수 있습니다. 빌드 및 배포 프로세스를 보다 잘 이해할 수도 있습니다. 또한 프로젝트의 빌드 및 배포 방식을 제어하는 데 사용할 수 있는 모든 속성 및 설정에 대해 알아볼 수 있습니다.

완료된 개체만 배포: 배포하거나 테스트할 준비가 되지 않은 데이터베이스 개체에 대한 정의가 들어 있는 파일을 제외할 수 있습니다.

데이터베이스 프로젝트에 대한 빌드 프로세스 구성: 데이터베이스 프로젝트가 빌드되는 방식을 제어하는 설정을 구성할 수 있습니다. 예를 들어 출력 경로를 지정할 수 있습니다.

데이터베이스 프로젝트에 대한 배포 구성:

  • 대상 데이터베이스, 배포 세부 사항이 포함된 파일 및 배포에 영향을 주는 변수가 포함된 파일에 구성을 연결하여 빌드 구성에 대한 배포를 구성할 수 있습니다.

  • 배포 세부 사항이 포함된 파일을 수정하여 배포 세부 사항을 제어할 수 있습니다.

  • 각 배포에서 서로 다른 서비스 브로커나 서비스 인증서를 사용하도록 변수를 사용자 지정할 수 있습니다.

  • 데이터베이스를 배포할 때 데이터베이스 속성을 업데이트할지 여부와 사용해야 하는 속성 값을 제어할 수 있습니다.

참조 또는 조회 테이블 채우기: 데이터베이스 프로젝트를 배포할 때 테이블에 참조 데이터를 추가할 수 있습니다. 운송업체 정보와 같이 자주 변경되지 않는 데이터가 들어 있는 테이블에 대해 이 작업을 수행할 수도 있습니다.

데이터베이스 프로젝트 빌드: Visual Studio에서 또는 명령 프롬프트에서 MSBuild를 통해 데이터베이스 프로젝트를 빌드하여 배포를 준비할 수 있습니다.

데이터베이스 프로젝트 배포: MSBuild를 데이터베이스 단위 테스트 실행의 일부로 사용하거나 명령 프롬프트에서 VSDBCMD를 사용하여 대상 데이터베이스나 서버를 업데이트함으로써 Visual Studio에서 데이터베이스 프로젝트를 배포할 수 있습니다.

또한 사용자 지정 워크플로를 정의할 경우 Team Foundation Build를 사용하여 배포할 수도 있습니다.

문제 해결: 데이터베이스 프로젝트의 빌드 및 배포와 관련한 가장 일반적인 문제를 해결하는 방법에 대해 자세히 알아보십시오.

관련 시나리오

  • 데이터베이스 팀 개발 시작
    데이터베이스 프로젝트에 데이터베이스 스키마의 오프라인 표현을 만들고, 해당 프로젝트를 버전 제어에 추가하는 방법에 대해 설명합니다.

  • 다른 데이터베이스를 참조하는 데이터베이스의 팀 개발 시작
    데이터베이스 스키마의 오프라인 표현을 만들고, 다른 데이터베이스에 대한 참조를 정의하고, 대상 배포 환경에 대한 변수 값을 지정하고, 해당 프로젝트를 버전 제어에 추가하는 방법에 대해 설명합니다.

  • SQLCLR 개체를 참조하는 데이터베이스의 팀 개발 시작
    데이터베이스 스키마의 오프라인 표현을 만들고, SQL CLR(공용 언어 런타임) 개체가 포함된 어셈블리에 대한 참조를 정의하고, 해당 SQLCLR 개체를 참조하는 데이터베이스 개체를 정의하고, 해당 프로젝트를 버전 제어에 추가하는 방법에 대해 설명합니다.

  • XML 스키마 컬렉션을 사용하는 데이터베이스의 팀 개발 시작
    데이터베이스 스키마의 오프라인 표현을 만들고, XSD(XML 스키마 정의) 파일에 대한 참조를 정의하고, 해당 파일을 사용하는 XML 스키마 컬렉션을 정의하고, 해당 XML 스키마 컬렉션을 사용하는 열을 정의하고, 해당 프로젝트를 버전 제어에 추가하는 방법에 대해 설명합니다.

  • 공유 서버 개체를 참조하는 데이터베이스의 팀 개발 시작
    데이터베이스 스키마의 오프라인 표현을 만들고, 공유된 서버 프로젝트에 대한 참조를 정의하고, 이 서버 프로젝트에 정의된 개체에 대한 참조를 추가하고, 해당 데이터베이스 프로젝트를 버전 제어에 추가하는 방법에 대해 설명합니다.

  • 데이터베이스를 빌드하여 격리된 개발 환경에 배포
    데이터베이스를 빌드하여 격리된 개발 환경에 배포하는 방법에 대해 설명합니다. 변경 내용을 버전 제어에 체크 인하여 팀과 공유하기 전에 격리 상태에서 변경 내용을 테스트할 수 있습니다. 변경 내용을 빌드하여 스테이징 또는 프로덕션 환경에 배포하기 전에 격리 상태에서 변경 내용을 테스트해야 합니다.

참고 항목

개념

데이터베이스 코드 작성 및 변경

데이터베이스 개체와 서버 개체 만들기 및 수정