자습서: Git에 데이터베이스 스키마 저장

다음에 적용됩니다:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

Git에 데이터베이스 스키마를 저장하면 버전 제어, 공동 작업 및 시간에 따른 변경 내용을 추적하는 기능을 비롯한 몇 가지 이점이 있습니다. 이 방법은 코드를 통해 데이터베이스 스키마를 정의하고 orM 또는 GitHub Copilot 같은 코딩 에이전트를 사용하여 개발 환경에 직접 변경 내용을 적용하는 코드 우선 개발에 특히 유용합니다.

이 자습서에서는 Git에 데이터베이스 스키마를 저장하고 개발 워크플로의 일부로 관리하는 방법을 알아봅니다.

  • 기존 데이터베이스에서 새 SQL 프로젝트 만들기
  • Git 원격 리포지토리에 데이터베이스 코드 커밋 및 푸시
  • 데이터베이스의 변경 내용을 기존 코드에 적용
  • Git 원격 리포지토리에서 변경 내용을 끌어와 로컬 데이터베이스에 적용(선택 사항)

정보의 자습서 흐름을 보여 주는 다이어그램

완료되면 원본 제어에서 데이터베이스를 추적하고 Git 리포지토리를 통해 데이터베이스 변경 내용에 대해 팀과 공동 작업할 준비가 된 것입니다.

메모

자습서를 완료하려면 SQL 데이터베이스에 액세스해야 합니다. Windows 또는 컨테이너에서 SQL Server 개발자 버전을 사용하여 로컬에서 무료로 개발할 수 있습니다.

사전 요구 사항

Warning

이 자습서는 2022년 Visual Studio SDK 스타일 프로젝트(미리 보기)에 사용할 수 없습니다. 대신 SSMS(SQL Server Management Studio) 또는 Visual Studio Code 사용합니다.

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

1단계: 기존 데이터베이스에서 새 SQL 프로젝트 만들기

원본 제어에서 데이터베이스를 나타내려면 SQL 데이터베이스 프로젝트 형식을 사용합니다. 프로젝트에는 각 데이터베이스 개체에 대한 파일과 데이터베이스 설정이 포함된 .sql 파일이 포함됩니다.sqlproj. 파일 탐색기 및 소스 제어에서 프로젝트를 볼 때 SQL 프로젝트의 구조는 개체 탐색기에서 데이터베이스를 검색하는 것을 미러링합니다.

Visual Studio의 SQL Server 개체 탐색기에서 프로젝트를 만들려는 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 새 프로젝트 만들기...를 선택합니다.

Visual Studio에서 데이터베이스 가져오기 대화 상자의 스크린샷입니다.

새로 만들기 Project 대화 상자에서 project 이름을 입력합니다. 프로젝트 이름은 데이터베이스 이름과 일치할 필요가 없습니다. 필요에 따라 프로젝트 위치를 확인하고 수정합니다. 기본 가져오기 설정은 스키마를 사용하여 개체를 폴더로 가져온 다음 개체 형식을 가져옵니다. 가져오기 설정을 수정하여 폴더 구조를 변경하거나 가져오는 개체에 사용 권한을 포함할 수 있습니다. 가져오기 시작

데이터베이스 가져오기 대화 상자에 가져오기 진행률이 메시지로 표시됩니다. 가져오기가 완료되면 솔루션 탐색기 가져온 개체를 볼 수 있습니다. 프로세스는 아래의 프로젝트 디렉터리에 있는 파일에 로그를 저장합니다 Import Schema Logs. 완료를 선택합니다.

Warning

이 자습서는 2022년 Visual Studio SDK 스타일 프로젝트(미리 보기)에 사용할 수 없습니다. 대신 SSMS(SQL Server Management Studio) 또는 Visual Studio Code 사용합니다.

Visual Studio Code의 데이터베이스 개체 탐색기 보기에서 프로젝트를 만들 데이터베이스를 선택합니다. 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 데이터베이스에 프로젝트 생성을 선택합니다.

Visual Studio Code의 데이터베이스에서 프로젝트 만들기 대화 상자 스크린샷

Visual Studio Code 데이터베이스에서 프로젝트 만들기 대화 상자에는 프로젝트 이름과 위치가 필요합니다. 기본 가져오기 설정은 스키마를 사용하여 개체를 폴더로 가져온 다음 개체 형식을 가져옵니다. 다른 폴더 구조를 선택하거나 만들기를 선택하기 전에 가져올 개체에 사용 권한을 포함하도록 선택할 수 있습니다.

데이터베이스 프로젝트 보기를 열어 새 프로젝트 및 가져온 개체 정의를 확인합니다.

SQL Server Management Studio의 개체 탐색기에서 프로젝트를 만들 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 작업 메뉴에서 데이터베이스에서 프로젝트 만들기...를 선택합니다.

SQL Server Management Studio 데이터베이스 대화 상자의 새 SQL Project 스크린샷

데이터베이스에서 SQL Project 만들기 대화 상자에서 선택한 데이터베이스를 확인하고 필요에 따라 project 이름과 위치를 수정합니다. 새 프로젝트는 선택한 데이터베이스의 개체를 사용하여 만들어지고 스키마, 개체 유형별로 폴더에 정렬됩니다.

솔루션 파일은 프로젝트 폴더 위의 폴더에 자동으로 만들어지고 만든 후 솔루션 탐색기 열립니다. 기존 솔루션에 새 프로젝트를 추가하려면 솔루션에 추가를 선택하고 솔루션 파일로 이동합니다. 만들기를 선택하여 프로젝트를 만듭니다.

SqlPackage CLI를 사용하여 기존 데이터베이스의 스키마를 SQL 프로젝트에 추출합니다. 다음 SqlPackage 명령은 전체 SQL 프로젝트에 데이터베이스의 스키마를 추출합니다. 파일은 .sql 중첩된 스키마 및 개체 형식 폴더로 구성되며 데이터베이스의 옵션과 .sqlproj 일치하는 속성이 설정된 프로젝트를 관리하기 위해 파일이 만들어집니다.

sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject

2단계: Git 원격 리포지토리에 데이터베이스 코드 커밋 및 푸시

SQL 프로젝트를 만든 후 로컬 Git 리포지토리에서 데이터베이스에 대한 Git 타임라인을 시작합니다.

SQL 프로젝트가 Visual Studio 열려 있는 상태에서 로컬 Git 리포지토리를 만들고 원격으로 푸시합니다.

  1. 메뉴 모음에서 Git>Git 리포지토리 만들기를 선택합니다.

  2. Git 리포지토리 만들기 대화 상자의 새 원격으로 푸시 섹션에서 GitHub 또는 Azure DevOps 선택합니다. GitHub 푸시하도록 선택한 경우 메시지가 표시되면 GitHub 계정에 로그인합니다. Azure DevOps 선택하는 경우 Azure DevOps 계정에 로그인하고 프로젝트를 선택하거나 만듭니다.

  3. 리포지토리 이름 및 설명을 입력합니다. .gitignore 템플릿VisualStudio로 설정되어 있는지 확인하고 만들기 및 푸시를 선택합니다.

Visual Studio 로컬 Git 리포지토리를 만들고, SQL 프로젝트 파일을 사용하여 초기 커밋을 수행하고, 원격으로 푸시합니다.

코드가 성공적으로 푸시되었는지 확인하려면 브라우저를 열고 GitHub() 또는 Azure DevOps(https://github.com)에서 리포지토리로https://dev.azure.com 이동합니다. 파일 및 .sqlproj 개체 정의를 포함하여 .sql SQL 프로젝트 파일이 표시됩니다.

자세한 내용은 Visual Studio Git 정보를 참조하세요.

Warning

이 자습서는 2022년 Visual Studio SDK 스타일 프로젝트(미리 보기)에 사용할 수 없습니다. 대신 SSMS(SQL Server Management Studio) 또는 Visual Studio Code 사용합니다.

Visual Studio Code 열린 SQL 프로젝트 폴더를 사용하여 로컬 Git 리포지토리를 초기화하고 원격으로 푸시합니다.

  1. 작업 표시줄에서 소스 제어 아이콘을 선택하여 소스 제어 보기를 열거나 누릅니다 Ctrl+Shift+G.

  2. 리포지토리 초기화를 선택하여 현재 폴더에 새 Git 리포지토리를 만듭니다.

  3. 모든 프로젝트 파일은 추적되지 않은 변경 내용으로 표시됩니다. + 변경 내용 옆에 있는 아이콘을 선택하여 모든 파일을 준비합니다.

  4. 메시지 입력 상자와 같은 Initial commit of SQL project 커밋 메시지를 입력하고 커밋 단추(확인 표시 아이콘)를 선택합니다.

  5. 원본 제어 보기에서 분기 게시 를 선택하여 로컬 리포지토리를 원격으로 푸시합니다. GitHub 게시할지 아니면 Azure DevOps 게시할지를 선택하고 로그인 프롬프트를 따릅니다. 리포지토리 표시 유형(퍼블릭 또는 프라이빗)을 선택하고 확인합니다.

코드가 성공적으로 푸시되었는지 확인하려면 브라우저를 열고 GitHub() 또는 Azure DevOps(https://github.com)에서 리포지토리로https://dev.azure.com 이동합니다. 파일 및 .sqlproj 개체 정의를 포함하여 .sql SQL 프로젝트 파일이 표시됩니다.

자세한 내용은 Visual Studio Code 소스 제어를 참조하세요.

SQL 프로젝트가 SQL Server Management Studio 열려 있는 상태에서 로컬 Git 리포지토리를 만들고 원격으로 푸시합니다.

  1. 메뉴 모음에서 Git>Git 리포지토리 만들기를 선택합니다.

  2. Git 리포지토리 만들기 대화 상자의 새 원격으로 푸시 섹션에서 GitHub 또는 Azure DevOps 선택합니다. GitHub 푸시하도록 선택한 경우 메시지가 표시되면 GitHub 계정에 로그인합니다. Azure DevOps 선택하는 경우 Azure DevOps 계정에 로그인하고 프로젝트를 선택하거나 만듭니다.

  3. 리포지토리 이름 및 설명을 입력합니다. .gitignore 템플릿VisualStudio로 설정되어 있는지 확인하고 만들기 및 푸시를 선택합니다.

SSMS는 로컬 Git 리포지토리를 만들고, SQL 프로젝트 파일을 사용하여 초기 커밋을 수행하고, 원격으로 푸시합니다.

코드가 성공적으로 푸시되었는지 확인하려면 브라우저를 열고 GitHub() 또는 Azure DevOps(https://github.com)에서 리포지토리로https://dev.azure.com 이동합니다. 파일 및 .sqlproj 개체 정의를 포함하여 .sql SQL 프로젝트 파일이 표시됩니다.

자세한 내용은 Visual Studio Git 정보를 참조하세요.

SQL 프로젝트 디렉터리에서 로컬 Git 리포지토리를 초기화하고, 모든 파일을 커밋하고, 원격으로 푸시합니다.

  1. 새 Git 저장소를 초기화하고, .gitignore 파일을 추가한 다음 초기 커밋을 만듭니다:

    cd MyDatabaseProject
    git init
    dotnet new gitignore
    git add .
    git commit -m "Initial commit of SQL project"
    
  2. GitHub 또는 Azure DevOps 새 원격 리포지토리를 만듭니다.

    • GitHub: 새 리포지토리로 이동하여 https://github.com/new 만듭니다. README, .gitignore 또는 라이선스로 초기화하지 마세요.
    • Azure DevOps: Azure DevOps 프로젝트로 이동하여 Repos 선택하고 새 리포지토리를 만듭니다. README 추가를 선택 취소합니다.
  3. 원격을 추가하고 초기 커밋을 푸시합니다.

    git remote add origin <your-repository-url>
    git push -u origin main
    

    리포지토리를 만들 때 GitHub 또는 Azure DevOps에서 제공한 URL로 <your-repository-url>를 바꾸세요.

코드가 성공적으로 푸시되었는지 확인하려면 브라우저를 열고 리포지토리로 이동합니다. 파일 및 .sqlproj 개체 정의를 포함하여 .sql SQL 프로젝트 파일이 표시됩니다.

3단계: 데이터베이스의 변경 내용을 기존 코드에 적용

데이터베이스 스키마가 SQL 프로젝트 외부에서 변경되는 경우(예: 데이터베이스에 대한 직접 수정, ORM 마이그레이션 또는 에이전트 작업) 이러한 변경 내용을 반영하도록 프로젝트를 업데이트할 수 있습니다.

스키마 비교를 사용하여 데이터베이스에서 SQL 프로젝트를 업데이트합니다.

  1. SQL Server 개체 탐색기 데이터베이스를 마우스 오른쪽 단추로 클릭하고 스키마 비교를 선택합니다.

  2. 스키마 비교 창에서 데이터베이스가 원본으로 설정됩니다. 대상 선택 드롭다운 목록을 선택하고 대상 선택을 선택합니다.

  3. 대상 스키마 선택 대화 상자에서 Project 선택하고 SQL 데이터베이스 project 선택합니다. 확인을 선택합니다.

  4. 비교를 선택하여 비교를 실행합니다. 결과는 데이터베이스(원본)와 프로젝트(대상) 간의 차이를 표시합니다.

  5. 차이점을 검토합니다. 프로젝트에 적용하지 않으려는 변경 내용을 선택 취소합니다.

  6. 업데이트를 선택하여 선택한 변경 내용을 SQL 프로젝트에 적용합니다.

프로젝트 파일이 데이터베이스 스키마와 일치하도록 업데이트됩니다. Git 변경 내용 창에서 변경 내용을 검토하고, 커밋 메시지를 입력하고, 모두 커밋을 선택합니다. 푸시를 선택하여 변경 내용을 원격 리포지토리에 푸시합니다.

Warning

이 자습서는 2022년 Visual Studio SDK 스타일 프로젝트(미리 보기)에 사용할 수 없습니다. 대신 SSMS(SQL Server Management Studio) 또는 Visual Studio Code 사용합니다.

데이터베이스에서 Project 업데이트 명령을 사용하여 데이터베이스에서 SQL project 업데이트합니다.

  1. 데이터베이스 개체 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 SQL Database 프로젝트>데이터베이스에서 프로젝트 업데이트를 선택합니다.

  2. 업데이트하고 확인할 SQL 데이터베이스 프로젝트를 선택합니다.

  3. 비교가 실행되고 데이터베이스의 변경 내용을 프로젝트에 적용합니다. 업데이트 .sql 된 파일은 소스 제어 보기에 수정된 파일로 표시됩니다.

소스 제어 보기의 변경 내용을 검토하고, 수정된 파일을 스테이징하고, 커밋 메시지를 입력하고, 커밋을 선택합니다. 변경 내용 동기화를 선택하여 원격 리포지토리에 커밋을 푸시합니다.

스키마 비교를 사용하여 데이터베이스에서 SQL 프로젝트를 업데이트합니다.

  1. 개체 탐색기 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업>스키마 비교(미리 보기)를 선택합니다.

  2. 스키마 비교 창에서 데이터베이스가 원본으로 설정됩니다. 대상 줄임표 단추를 선택하고 SQL 데이터베이스 프로젝트를 대상으로 선택합니다.

  3. 비교를 선택하여 비교를 실행합니다. 결과는 데이터베이스(원본)와 프로젝트(대상) 간의 차이를 표시합니다.

  4. 차이점을 검토합니다. 프로젝트에 적용하지 않으려는 변경 내용을 선택 취소합니다.

  5. 적용을 선택하여 선택한 변경 내용을 SQL 프로젝트에 적용합니다.

프로젝트 파일이 데이터베이스 스키마와 일치하도록 업데이트됩니다. Git 변경 내용 창에서 변경 내용을 검토하고, 커밋 메시지를 입력하고, 모두 커밋을 선택합니다. 푸시를 선택하여 변경 내용을 원격 리포지토리에 푸시합니다.

SqlPackage를 사용하여 데이터베이스에서 SQL 프로젝트를 다시 생성하고 기존 프로젝트 파일을 현재 데이터베이스 스키마로 바꿔야 합니다. 다른 SQL 프로젝트 도구는 그래픽 인터페이스를 제공하지만 SqlPackage는 파일 변경 내용을 적용하기 전에 검토할 기회를 제공하지 않는 자동화에 대한 명령줄 접근 방식을 제공합니다.

  1. 기존 SQL 개체 파일을 제거하고 프로젝트를 다시 생성합니다.

    rm -rf MyDatabaseProject
    sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject
    
  2. Git을 사용하여 변경 내용을 검토하고 커밋합니다.

    cd MyDatabaseProject
    dotnet new gitignore
    git add .
    git status
    git commit -m "Update project from database changes"
    git push
    

4단계: (선택 사항) Git 원격 리포지토리에서 변경 내용을 끌어와 로컬 데이터베이스에 적용

다른 팀 구성원이 데이터베이스 스키마 변경 내용을 원격 리포지토리에 푸시하는 경우 해당 변경 내용을 끌어와 로컬 개발 데이터베이스에 배포할 수 있습니다.

  1. 메뉴 모음에서 Git>끌어오 기를 선택하여 원격 리포지토리에서 최신 변경 내용을 끌어옵니다.

  2. 솔루션 탐색기 SQL 데이터베이스 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 스키마 비교를 선택합니다.

  3. 스키마 비교 창에서 프로젝트는 원본으로 설정됩니다. 대상 선택 드롭다운 목록을 선택하고 대상 선택을 선택합니다.

  4. 대상 스키마 선택 대화 상자에서 데이터베이스를 선택하고 로컬 개발 데이터베이스 연결을 선택합니다. 확인을 선택합니다.

  5. 비교를 선택하여 비교를 실행합니다. 결과는 프로젝트(원본)와 데이터베이스(대상) 간의 차이를 표시합니다.

  6. 차이점을 검토하여 변경 내용이 필요한지 확인합니다.

  7. 업데이트를 선택하여 데이터베이스에 변경 내용을 적용합니다.

Warning

이 자습서는 2022년 Visual Studio SDK 스타일 프로젝트(미리 보기)에 사용할 수 없습니다. 대신 SSMS(SQL Server Management Studio) 또는 Visual Studio Code 사용합니다.

  1. 소스 제어 보기를 열고 ... 메뉴에서 끌어오기를 선택하거나 상태 표시줄에서 동기화 단추를 사용하여 원격 리포지토리에서 최신 변경 내용을 끌어옵니다.

  2. 데이터베이스 프로젝트 보기에서 SQL 데이터베이스 프로젝트를 마우스 오른쪽 단추로 클릭하고 스키마 비교를 선택합니다.

  3. 스키마 비교 창에서 프로젝트는 원본으로 설정됩니다. 대상 줄임표 단추를 선택하고 로컬 개발 데이터베이스 연결을 대상으로 선택합니다.

  4. 비교를 선택하여 비교를 실행합니다. 결과는 프로젝트(원본)와 데이터베이스(대상) 간의 차이를 표시합니다.

  5. 차이점을 검토하여 변경 내용이 필요한지 확인합니다.

  6. 적용을 선택하여 변경 내용을 데이터베이스에 적용합니다.

  1. 터미널을 열고 프로젝트 디렉터리에서 실행 git pull 하여 원격 리포지토리에서 최신 변경 내용을 가져옵니다.

  2. 솔루션 탐색기 SQL Database 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 스키마 비교(미리 보기)를 선택합니다.

  3. 스키마 비교 창에서 프로젝트는 원본으로 설정됩니다. 대상을 선택하고 로컬 개발 데이터베이스 연결을 선택합니다.

  4. 비교를 선택하여 비교를 실행합니다. 결과는 프로젝트(원본)와 데이터베이스(대상) 간의 차이를 표시합니다.

  5. 차이점을 검토하여 변경 내용이 필요한지 확인합니다.

  6. 적용을 선택하여 변경 내용을 데이터베이스에 적용합니다.

  1. 원격 리포지토리에서 최신 변경 내용을 끌어옵니다.

    cd MyDatabaseProject
    git pull
    
  2. 프로젝트를 빌드하여 변경 내용이 성공적으로 컴파일되었는지 확인합니다.

    dotnet build
    
  3. SqlPackage를 사용하여 로컬 개발 데이터베이스에 변경 내용을 배포합니다.

    sqlpackage /a:Publish /sf:bin/Debug/MyDatabaseProject.dacpac /tsn:localhost /tdn:MyDatabase
    

    MyDatabaseProject.dacpac 출력 파일의 .dacpac 이름으로 바꾸고 필요에 따라 대상 서버(/tsn) 및 데이터베이스(/tdn) 값을 업데이트합니다.