팀 환경에서의 데이터베이스 개체 리팩터링

Visual Studio Premium을 사용하면 데이터베이스 프로젝트라는 데이터베이스 스키마의 오프라인 표현을 버전 제어 시스템에서 관리하도록 하여 변경 내용을 관리할 수 있습니다. 사용자나 팀 멤버는 데이터베이스 프로젝트를 변경할 수 있으며, 이러한 변경 내용은 빌드하여 라이브 데이터베이스에 배포해야 합니다. 이 경우 다음과 같은 최대 네 개의 데이터베이스 표현을 만들 수 있습니다.

  • 데이터베이스 서버 - 라이브 데이터베이스 및 데이터 포함

  • 데이터베이스 프로젝트 - 데이터베이스 스키마의 오프라인 표현

  • 컴파일된 .dbschema 파일 - 데이터베이스 스키마를 대상 데이터베이스 및 서버에 배포하는 데 필요한 정보 포함. 이 파일은 데이터베이스 프로젝트를 빌드할 때마다 만들어집니다.

  • 버전 제어 리포지토리 - 팀 멤버가 데이터베이스 프로젝트에 적용하는 모든 변경 내용 추적

자세한 내용은 팀 데이터베이스 개발 시작을 참조하십시오.

팀 환경의 리팩터링

리팩터링을 사용하여 데이터베이스 개체의 이름을 바꾸거나 데이터베이스 개체를 다른 스키마로 이동하면 이름을 바꾸거나 이동한 개체를 참조하는 다른 개체는 새 이름이나 스키마로 자동 업데이트됩니다. 예를 들어 테이블 열의 이름을 바꿀 수 있으며 해당 열을 참조하는 저장 프로시저가 새 이름으로 자동 업데이트됩니다. 자세한 내용은 데이터베이스 개체에 대한 모든 참조 이름 바꾸기 또는 데이터베이스 개체를 다른 스키마로 이동을 참조하십시오.

데이터베이스 개체를 업데이트하려면 먼저 업데이트해야 하는 모든 개체의 파일을 소스 제어에서 체크 아웃해야 합니다. 파일을 자동으로 체크 아웃하도록 소스 제어 옵션을 설정한 경우에는 체크 아웃 시도가 자동으로 수행됩니다. 그렇지 않을 경우 파일을 체크 아웃하라는 메시지가 표시됩니다.

다음과 같은 경우에는 리팩터링 작업이 실패합니다.

  • 하나 이상의 파일이 잠긴 경우 메시지가 나타나고 리팩터링 작업이 취소됩니다. 이 경우 파일의 잠금이 해제된 다음 작업을 다시 시도해야 합니다.

  • 체크 아웃한 버전이 사용자의 프로젝트에 있는 버전보다 최신인 경우 메시지가 나타나고 리팩터링 작업이 취소됩니다. 작업을 다시 시도하기 전에 파일 버전을 조정해야 합니다.

  • 파일을 체크 아웃하라는 메시지가 표시된 상태에서 취소를 클릭하면 리팩터링 작업이 취소됩니다.

    참고

    데이터베이스 개체의 이름을 바꿔도 해당 개체가 정의된 .sql 파일의 이름은 바뀌지 않습니다. 이 파일의 이름은 솔루션 탐색기에서 수동으로 바꿀 수 있습니다.

리팩터링 로그 및 변경 의도 보존

리팩터링을 사용하여 데이터베이스 개체의 이름을 바꾸거나 데이터베이스 개체를 이동하면 ProjectName.refactorlog 파일이 해당 작업의 정보로 업데이트됩니다. 변경 내용을 배포할 경우 배포 스크립트에 변경 의도를 보존하는 작업이 포함되기 때문에 로그를 사용하여 변경 의도를 보존할 수 있습니다. 예를 들어 배포할 때 drop 및 create 문 대신 열에 대한 sp_rename 문을 실행할 수 있습니다.

둘 이상의 개발자가 리팩터링 로그를 업데이트하는 변경 작업을 수행할 경우 로그 파일에 대한 변경 내용을 병합해야 합니다. .refactoring 파일은 간단한 스키마가 있는 XML 파일이므로 업데이트를 병합하기가 어렵지 않습니다. 각 작업에는 리팩터링 작업이 올바른 순서대로 적용되는지 확인할 수 있도록 날짜 및 시간이 포함됩니다.

경고

리팩터링 로그의 변경 내용을 자동으로 병합하면 오류가 발생할 수 있습니다. 데이터베이스 프로젝트를 배포하기 전에 항상 자동 병합 결과를 검토하거나 변경 내용을 수동으로 병합해야 합니다.

리팩터링 로그는 다음 예제와 유사합니다.

<?xml version="1.0" encoding="utf-16"?>
<Operations>
  <Operation Name="Move Schema" Key="677a0ee6-1707-413a-985f-b392b1a2d68b" ChangeDateTime="04/07/2008 21:59:00">
    <Property Name="ElementName" Value="[Person].[AbsenceHistory]" />
    <Property Name="ElementType" Value="ISql90Table" />
    <Property Name="NewSchema" Value="HumanResources" />
    <Property Name="IsNewSchemaExternal" Value="True" />
  </Operation>
  <Operation Name="Rename Refactor" Key="fb88992c-cd6e-43d0-aa54-ed80f155d202" ChangeDateTime="04/07/2008 21:59:26">
    <Property Name="ElementName" Value="[HumanResources].[AbsenceHistory].[column_1]" />
    <Property Name="ElementType" Value="ISqlSimpleColumn" />
    <Property Name="ParentElementName" Value="[HumanResources].[AbsenceHistory]" />
    <Property Name="ParentElementType" Value="ISql90Table" />
    <Property Name="NewName" Value="EmployeeID" />
  </Operation>
</Operations>

이 예제 로그에는 두 개의 리팩터링 작업이 기록되었습니다. 첫 번째 작업에서는 [AbsenceHistory] 테이블이 [Person] 스키마에서 [HumanResources] 스키마로 이동되었습니다. 두 번째 작업에서는 [AbsenceHistory] 테이블에 있는 [column_1] 열의 이름이 [EmployeeID]로 바뀌었습니다.

참고 항목

개념

Visual Studio에서 데이터베이스와 데이터 계층 응용 프로그램 만들기 및 관리

데이터베이스 개체에 대한 모든 참조 이름 바꾸기

데이터베이스 개체를 다른 스키마로 이동

데이터베이스 코드 및 데이터 리팩터링