데이터베이스 및 서버 프로젝트 개요

Visual Studio Premium을 사용하여 데이터베이스 프로젝트나 서버 프로젝트를 만든 후 버전 제어에서 관리하도록 설정하면 조직에서 보다 효율적으로 데이터베이스 개발을 관리할 수 있습니다. 이러한 오프라인 표현에는 해당 데이터베이스(또는 서버)의 개별 인스턴스를 만들거나 기존 인스턴스를 업데이트하는 데 사용할 수 있는 개체 정의, 설정 및 배포 스크립트가 포함됩니다.

조직의 요구 사항에 따라 프로젝트의 일부를 공유하거나 복합 프로젝트를 만들 수도 있습니다. 자세한 내용은 이 항목 뒷 부분의 프로젝트의 일부 공유나 데이터베이스 프로젝트에서 참조 사용의 "참조를 사용하여 복합 프로젝트 만들기" 단원을 참조하십시오.

사용 가능한 프로젝트 형식

Visual Studio 2010 Premium을 사용하여 데이터베이스 프로젝트, 서버 프로젝트 및 DAC(데이터 계층 응용 프로그램 구성 요소) 프로젝트를 만들 수 있습니다.

  • 데이터 계층 응용 프로그램 구성 요소 프로젝트
    DAC는 SQL Server 2008 R2에서 도입된 새로운 개념으로, SQL Server 데이터베이스에 대한 정의와 클라이언트-서버 또는 3계층 응용 프로그램에서 사용되는 지원 인스턴스 개체가 들어 있습니다. DAC에는 테이블 및 뷰 등의 데이터베이스 개체와 로그인 등의 인스턴스 엔터티가 포함됩니다. Visual Studio를 사용하여 DAC 프로젝트를 만들고, DAC 패키지 파일을 빌드하고, 이 DAC 패키지 파일을 데이터베이스 관리자에게 보내 SQL Server 데이터베이스 엔진의 인스턴스에 배포하도록 할 수 있습니다. DAC 프로젝트에서 지원하는 기능 목록은 Features Supported in Data-tier Applications를 참조하십시오.

  • 데이터베이스 프로젝트
    데이터베이스 프로젝트에는 데이터베이스의 모든 개체에 대한 정의가 포함됩니다. 또한 데이터베이스 설정, 빌드 설정 및 배포 설정도 포함됩니다.

  • 서버 프로젝트
    서버 프로젝트에는 서버 또는 서버의 마스터 데이터베이스에 있는 개체에 대한 정의가 포함됩니다. 또한 서버 설정, 빌드 설정 및 배포 설정도 포함됩니다.

프로젝트 구조

솔루션 탐색기에는 파일별로 구성된 프로젝트가 표시됩니다. 솔루션 탐색기의 각 항목은 저장된 파일이나 폴더에 해당합니다. 반면, 스키마 뷰에는 데이터베이스의 개체가 개별 파일에 정의되어 있는지 여부에 관계없이 개체를 확인할 수 있도록 개체 또는 스키마별로 구성된 프로젝트가 표시됩니다.

데이터베이스 또는 서버 프로젝트에는 다음과 같은 개체 형식이 포함될 수 있습니다.

  • 속성 파일
    데이터베이스 또는 서버 프로젝트의 속성 폴더에는 속성 값이 들어 있는 파일이 포함되어 있습니다. 이러한 값을 수정하여 프로젝트가 배포되는 방식을 제어할 수 있습니다. 예를 들어 데이터베이스 설정, 서버 설정, SQLCMD 변수 및 데이터베이스 권한을 지정할 수 있습니다. 자세한 내용은 데이터베이스 및 서버 프로젝트의 속성 파일을 참조하십시오.

  • 데이터 생성 계획
    데이터 생성 계획에는 배포하거나 업데이트할 데이터베이스에 사실적인 대표 테스트 데이터를 생성할 방식에 대한 정보가 포함됩니다. 자세한 내용은 데이터 생성기를 사용하여 데이터베이스의 테스트 데이터 생성을 참조하십시오.

  • 스키마 비교
    스키마 비교에는 데이터베이스 프로젝트와 다른 스키마 간의 특정 비교에 대한 정보가 포함됩니다. .scmp 파일을 다시 열고 비교를 새로 고쳐서 프로젝트를 해당 스키마와 다시 비교할 수 있습니다. 자세한 내용은 데이터베이스 스키마 비교 및 동기화를 참조하십시오.

  • 스키마 개체
    스키마 개체는 프로젝트 폴더에 저장되는 .sql 파일 컬렉션에 정의됩니다. 대부분의 개체는 개별 파일에 정의됩니다. 단, 테이블의 열과 저장 프로시저 또는 함수에 대한 매개 변수는 제외됩니다. 열은 테이블에 대한 정의에 저장되고 매개 변수는 저장 프로시저 또는 함수에 대한 정의에 저장됩니다. 자세한 내용은 데이터베이스 개체와 서버 개체 만들기 및 수정을 참조하십시오.

  • 스크립트
    프로젝트에는 데이터베이스 또는 서버를 관리하는 데 사용할 수 있는 스크립트 외에도 배포 전 및 배포 후 스크립트가 포함됩니다. 자세한 내용은 데이터베이스 스크립트 만들기 및 수정을 참조하십시오.

개체 및 설정 가져오기

프로젝트를 만든 후에는 데이터베이스 인스턴스 또는 스크립트에서 개체 및 설정을 가져올 수 있습니다. 데이터베이스를 가져오면 해당 개체 정의의 유효성이 검사되며 구문 분석할 수 없는 문은 ScriptsIgnoredOnImport.sql 파일에 저장됩니다. 더 이상 존재하지 않는 개체를 참조하는 개체 정의를 가져오는 경우 데이터베이스 프로젝트를 빌드 및 배포하기 전에 해당 오류를 해결해야 합니다. 예를 들어 더 이상 존재하지 않는 테이블을 참조하는 저장 프로시저를 가져오게 될 경우 오류를 해결하기 위해 해당 저장 프로시저를 제거할 수 있습니다.

큰 스키마를 가져온 후에는 이러한 오류를 해결하는 데 많은 시간을 소요해야 할 수 있습니다. 하지만 팀 멤버가 Visual Studio Premium에서 스키마를 업데이트하다가 모르는 사이에 이러한 오류를 추가로 초래하는 것을 방지할 수 있습니다. 팀 멤버가 개체 정의를 수정하고 저장하면 모든 변경 내용의 유효성이 검사되므로 팀 멤버가 즉시 오류를 수정하여 해당 오류가 라이브 데이터베이스에 배포되지 않도록 할 수 있습니다.

개체 정의의 경고를 해결한 후에는 데이터베이스 코드를 분석하여 디자인, 명명 및 성능 문제도 확인해야 합니다. 자세한 내용은 데이터베이스 코드를 분석하여 코드 품질 향상을 참조하십시오.

프로젝트의 일부 공유

일부 파일을 둘 이상의 프로젝트에서 다시 사용하려는 경우 프로젝트의 일부를 부분 프로젝트로 내보냅니다. 이렇게 하면 하나 이상의 다른 프로젝트에 포함할 수 있는 .files 파일이 만들어집니다. 예를 들어 모든 데이터베이스를 감사하는 데 사용하는 일반적인 저장 프로시저가 몇 가지 있을 수 있습니다. 이러한 저장 프로시저를 한 프로젝트에서 정의한 다음 이를 내보내 다른 프로젝트에 포함할 수 있습니다. 이 방법을 사용하면 둘 이상의 프로젝트에서 동일한 코드를 유지 관리할 필요가 없습니다. 자세한 내용은 방법: 부분 데이터베이스 프로젝트 가져오기 및 내보내기를 참조하십시오.

보안 고려 사항

데이터베이스 프로젝트와 관련 .dbschema 파일에는 데이터베이스 자산에 대한 정보가 포함됩니다. 소스 코드에 대한 액세스를 제한할 때와 거의 같은 방법으로 데이터베이스 프로젝트와 .dbschema 파일에 대한 액세스를 제한해야 합니다.

다음 방법을 사용하여 데이터베이스 프로젝트 및 .dbschema 파일에 대한 액세스를 제어할 수 있습니다.

  • 프로젝트 및 적절한 파일 시스템 권한에 버전 제어 사용
    액세스가 필요한 개발자에게만 데이터베이스 프로젝트에 대한 액세스 권한을 부여할 수 있습니다. 또한 데이터베이스 프로젝트 파일이나 .dbschema 파일이 들어 있는 파일 공유에 대한 사용 권한을 제한하여 권한이 없는 개인이 액세스하지 못하도록 할 수 있습니다.

  • 부분 프로젝트를 사용하여 데이터베이스 프로젝트 분할
    데이터베이스 개체를 여러 프로젝트에 분할하고 버전 제어 권한을 사용하여 해당 프로젝트를 보거나 변경할 수 있는 사용자를 제어할 수 있습니다. 자세한 내용은 대용량 데이터베이스의 팀 개발 시작을 참조하십시오.

  • 빈 프로시저 본문이 있는 .dbschema 파일 만들기
    구현이 포함되지 않은 저장 프로시저의 복사본을 만든 다음, 이 복사본의 .dbschema 파일을 해당 프로시저를 호출해야 하지만 프로시저 구현은 볼 필요가 없는 개발자와 공유할 수 있습니다. .dbschema 파일을 참조하는 방법에 대한 자세한 내용은 데이터베이스 프로젝트에서 참조 사용을 참조하십시오.

관련 시나리오

  • 데이터베이스 팀 개발 시작
    데이터베이스의 개체 및 설정에 대한 오프라인 표현을 만들고 이 표현을 버전 제어에서 관리하도록 설정하여 데이터베이스에 대한 변경 내용을 관리할 수 있습니다.

  • 다른 데이터베이스를 참조하는 데이터베이스의 팀 개발 시작
    데이터베이스의 개체 및 설정에 대한 오프라인 표현을 만들고 이 표현을 버전 제어에서 관리하도록 설정하여 데이터베이스에 대한 변경 내용을 관리할 수 있습니다. 이 표현에서 크로스 데이터베이스 참조를 정의하여 다른 대상 환경으로의 배포를 지원할 수도 있습니다.

  • SQLCLR 개체를 참조하는 데이터베이스의 팀 개발 시작
    데이터베이스의 개체 및 설정에 대한 오프라인 표현을 만들고 이 표현을 버전 제어에서 관리하도록 설정하여 데이터베이스에 대한 변경 내용을 관리할 수 있습니다. 이 표현에서 SQLCLR 어셈블리에 대한 참조를 추가한 다음 이 어셈블리에 정의된 개체를 사용할 수 있습니다.

  • 공유 서버 개체를 참조하는 데이터베이스의 팀 개발 시작
    데이터베이스의 개체 및 설정에 대한 오프라인 표현을 만들고 이 표현을 버전 제어에서 관리하도록 설정하여 데이터베이스에 대한 변경 내용을 관리할 수 있습니다. 이 표현에서 로그인 또는 키와 같은 서버 개체의 정의가 포함된 공유 서버 프로젝트에 대한 참조를 추가할 수 있습니다.

  • 대용량 데이터베이스의 팀 개발 시작
    개체를 여러 프로젝트에 분할하여 대용량 데이터베이스에 대한 변경 내용을 관리할 수 있습니다.

  • XML 스키마 컬렉션을 사용하는 데이터베이스의 팀 개발 시작
    형식화된 XML 열에 하나 이상의 XML 스키마 컬렉션을 사용하는 데이터베이스에 대한 변경 내용을 관리할 수 있습니다.

참고 항목

작업

연습: 새 버전 제어 데이터베이스 만들기 및 배포

연습: 버전 제어에서 기존 데이터베이스 스키마 관리

개념

데이터베이스를 빌드하여 격리된 개발 환경에 배포

데이터베이스 프로젝트 구성 및 테스트 개발 수행

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