대용량 데이터베이스의 팀 개발 시작

Visual Studio를 사용하여 데이터베이스 스키마에 대한 변경 내용을 관리하려면 먼저 데이터베이스 프로젝트, 서버 프로젝트 또는 데이터 계층 응용 프로그램 프로젝트를 만든 다음 관리할 데이터베이스에서 개체 및 설정을 가져옵니다. 매우 큰 데이터베이스에 대한 변경 내용을 관리하려는 경우 개체를 여러 개의 데이터베이스 프로젝트에 분할할 수 있습니다. 이 방법을 사용하면 데이터베이스의 각 섹션에서 코드를 추가, 수정 또는 삭제할 수 있는 팀이나 개발자를 제어할 수 있습니다.

두 가지 방법으로 데이터베이스를 보다 작은 여러 부분으로 나눌 수 있습니다.

  • 복합 프로젝트 - 데이터베이스의 여러 섹션을 데이터베이스 프로젝트 참조로 연결된 둘 이상의 데이터베이스 프로젝트에 정의할 수 있습니다. 이때 동일한 솔루션의 데이터베이스 프로젝트를 지정할 수도 있고 컴파일된 .dbschema 파일을 참조할 수도 있습니다. 참조가 들어 있는 프로젝트를 배포하면 해당 프로젝트에서 참조하는 모든 프로젝트도 함께 배포됩니다. 복합 프로젝트의 프로젝트 간에 순환 참조를 사용할 수는 없습니다.

  • 부분 프로젝트 - 데이터베이스 프로젝트의 한 섹션을 .files 파일 형식으로 내보낼 수 있습니다. 그런 다음 두 번째 데이터베이스 프로젝트를 만들고 이 부분 프로젝트(.files 파일)를 포함할 수 있습니다. 그런 다음 원본 파일에 대한 쓰기 권한을 설정하여 파일 변경을 제한할 수 있습니다. 따라서 두 번째 프로젝트에 대한 작업을 수행하는 개발자는 읽기 전용 개체를 참조하는 추가 개체를 만들 수는 있지만 해당 개체를 수정할 수는 없습니다. 두 번째 프로젝트를 빌드하고 배포할 때는 읽기 전용 섹션을 포함하여 해당 데이터베이스의 전체 복사본이 빌드됩니다. 부분 프로젝트에서는 순환 참조를 사용할 수 있습니다.

각 방법에는 이 항목의 뒷부분에 설명된 것과 같은 제한 사항이 있습니다.

데이터베이스 프로젝트의 형식 지정

데이터베이스 프로젝트를 만들 때는 사용 중인 SQL Server 버전에 해당하는 프로젝트 형식을 지정합니다. 예를 들어 관리하려는 데이터베이스가 SQL Server 2005를 기반으로 하는 경우 SQL Server 2005 데이터베이스 프로젝트 또는 SQL Server 2005 마법사를 지정합니다. 마법사를 사용하면 프로젝트를 만들 수 있을 뿐 아니라 일부 빌드 및 배포 설정을 구성하고 데이터베이스 개체와 설정을 동시에 가져올 수도 있습니다.

데이터베이스 개체 및 설정 가져오기

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

큰 스키마를 가져올 때는 이러한 오류를 해결하는 데 많은 시간을 소요해야 할 수 있습니다. 하지만 팀 멤버가 Visual Studio Premium에서 스키마를 업데이트하다가 모르는 사이에 이러한 오류를 추가로 초래하는 것을 방지할 수 있습니다. 팀 멤버가 개체 정의를 수정하고 저장하면 모든 변경 내용의 유효성이 검사되므로 팀 멤버가 즉시 오류를 수정하여 해당 오류가 라이브 데이터베이스에 배포되지 않도록 할 수 있습니다. 개체 정의의 경고를 해결한 후에는 데이터베이스 코드를 분석하여 디자인 문제, 명명 문제 및 성능 문제도 확인해야 합니다. 자세한 내용은 데이터베이스 코드를 분석하여 코드 품질 향상을 참조하십시오.

일반 작업

일반 작업

지원 내용

데이터베이스 프로젝트에 대한 자세한 내용 및 부분 프로젝트와 복합 프로젝트의 제한 사항: 데이터베이스 프로젝트를 사용하여 스키마 변경 내용을 관리하는 방법에 대한 기본 개념을 알아보십시오.

실습: 기초 연습 과정을 따라 부분 프로젝트 또는 복합 프로젝트를 사용하여 데이터베이스 프로젝트를 분할하는 방법을 익힐 수 있습니다.

기존 데이터베이스 스키마를 버전 제어에서 관리하도록 설정: 데이터베이스 프로젝트 마법사를 사용하여 프로젝트를 만들고 프로젝트 설정을 구성하고 스키마를 가져올 수 있습니다. 또한 나중에 스키마를 가져오려는 경우나 가져올 스키마가 있는 데이터베이스에 액세스할 수 있는 권한이 없는 경우 빈 프로젝트를 만들 수 있습니다. 스키마를 가져온 후 해당 프로젝트를 버전 제어에 추가할 수 있습니다.

데이터베이스 프로젝트를 분할하여 개체 정의 공유: 한 데이터베이스 프로젝트의 개체 정의를 내보낸 다음 다른 프로젝트에서 다시 사용할 수 있습니다. 부분 프로젝트 정의를 가져올 대상 프로젝트에 액세스할 수 있는 팀 멤버라도 가져온 개체를 수정할 수는 없습니다. 따라서 데이터베이스 코드의 일부에 대한 변경 내용을 제어할 수 있습니다.

참조를 추가하여 복합 프로젝트 만들기: 데이터베이스 프로젝트에 대한 참조를 추가하되 서버 및 데이터베이스 변수에 대한 값은 지정하지 않는 방법으로 복합 프로젝트를 만들 수 있습니다. 프로젝트를 배포하면 해당 프로젝트에서 참조하는 모든 프로젝트도 배포됩니다.

부분 프로젝트의 용도 및 제한 사항

다음 그림에서는 부분 프로젝트가 관련된 일반적인 시나리오를 보여 줍니다.

Database Edition에서 부분 프로젝트 사용

Database Edition의 부분 프로젝트

이 예에서는 한 프로젝트에 두 개의 개체 집합이 포함되어 있습니다. 다른 개발자나 팀이 이 프로젝트에 저장 프로시저를 추가할 수 있도록 하되 다른 개체를 실수로 변경하지는 못하게 할 수 있습니다. 부분 프로젝트를 사용하여 이 목적을 달성하려면 다음 단계를 수행해야 합니다.

  1. 개체 그룹을 스키마 또는 개체 형식별로 A.files와 B.files에 내보냅니다.

  2. 다른 개발자나 팀이 저장 프로시저(sproc라고도 함)를 만들 수 있는 두 번째 데이터베이스 프로젝트를 만듭니다.

  3. 내보낸 부분 프로젝트인 A.files와 B.files를 두 번째 데이터베이스 프로젝트로 가져옵니다.

  4. 가져온 부분 프로젝트의 개체에 대한 소스 코드 제어 권한을 제한하여 읽기 전용 액세스만 허용합니다.

이제 다른 개발자나 팀이 개체를 추가하고 해당 프로젝트를 빌드 및 배포하여 변경 내용을 테스트할 수 있습니다.

데이터베이스에 긴 이름을 가진 개체가 포함되어 있거나 데이터베이스 프로젝트를 만든 경로가 긴 경우에는 부분 프로젝트(.files 파일)를 다른 데이터베이스 프로젝트로 가져올 수 없습니다. 다음 권장 사항을 따르면 이러한 문제를 방지할 수 있습니다.

  • 경로 이름이 짧은 폴더에 데이터베이스 프로젝트를 만듭니다. 예를 들어 "C:\Documents and Settings\UserName\My Documents\Visual Studio 2008\Projects"보다는 "D:\MyProjects" 같은 폴더가 좋습니다.

  • 데이터베이스 개체에는 매우 긴 이름을 사용하지 않습니다. 외래 키는 긴 이름을 갖는 가장 일반적인 개체 형식입니다. 외래 키의 이름이 "FK_ReferencingTable_ReferencedTable_ReferencedColumn1_ReferencedColumn2"라면 해당 키의 정의가 포함된 부분 프로젝트를 가져오려고 할 때 오류가 발생할 수 있습니다.

복합 프로젝트의 용도 및 제한 사항

다음 그림에서는 복합 프로젝트가 관련된 일반적인 시나리오를 보여 줍니다.

Database Edition에서 복합 프로젝트 사용

Database Edition의 복합 프로젝트

이 예에서는 스키마 정의가 포함된 데이터베이스 프로젝트를 만들 수 있습니다. 그런 다음 테이블 및 뷰의 정의를 포함하는 두 번째 데이터베이스 프로젝트와 저장 프로시저의 정의를 포함하는 세 번째 데이터베이스 프로젝트를 만듭니다. 세 번째 프로젝트(데이터베이스 프로젝트 C)에는 다른 두 데이터베이스 프로젝트에 대한 참조가 포함되어 있습니다. 세 번째 프로젝트를 빌드하고 배포할 때는 다른 프로젝트도 자동으로 배포됩니다.

복합 프로젝트를 사용하는 경우 각 프로젝트를 독립적으로 빌드하고 배포할 수 있어야 합니다. 복합 프로젝트의 프로젝트 간에 순환 종속성이 있을 수는 없습니다. 복합 프로젝트를 사용하면 데이터베이스를 개체 형식별로 분할할 수 있습니다. 예를 들어 한 프로젝트에는 스키마를, 두 번째 프로젝트에는 테이블과 뷰를, 세 번째 프로젝트에는 저장 프로시저를 포함할 수 있습니다.

관련 시나리오

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

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

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

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

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