다음을 통해 공유


자습서: SQL 프로젝트 만들기 및 배포

적용 대상: Microsoft Fabric의 SQL ServerAzure SQL Database Azure SQL Managed Instance SQL 데이터베이스

SQL 데이터베이스 프로젝트의 개발 주기를 통해 개발 모범 사례로 익숙한 CI/CD(연속 통합 및 지속적인 배포) 워크플로에 데이터베이스 개발을 통합할 수 있습니다. SQL Database 프로젝트의 배포는 수동으로 수행할 수 있지만 추가 작업 없이 지속적인 로컬 개발에 따라 지속적인 배포가 실행되도록 배포 파이프라인을 사용하여 배포 프로세스를 자동화하는 것이 좋습니다.

이 문서에서는 새 SQL 프로젝트를 만들고, 프로젝트에 개체를 추가하고, GitHub 작업을 사용하여 프로젝트를 빌드하고 배포하기 위한 연속 배포 파이프라인을 설정하는 단계를 안내합니다. 이 자습서는 SQL 프로젝트 시작 문서의 내용 중 상위 집합입니다 . 이 자습서는 GitHub 작업에서 배포 파이프라인을 구현하지만 Azure DevOps, GitLab 및 기타 자동화 환경에도 동일한 개념이 적용됩니다.

이 자습서에서는 다음을 수행합니다.

  1. 새 SQL 프로젝트 만들기
  2. 프로젝트에 개체 추가
  3. 로컬에서 프로젝트 빌드
  4. 소스 제어에 프로젝트 체크 인
  5. 연속 배포 파이프라인에 프로젝트 빌드 단계 추가
  6. 지속적인 배포 파이프라인에 .dacpac 배포 단계 추가

SQL 프로젝트 시작 문서의 단계를 이미 완료한 경우 4단계로 건너뛸 수 있습니다. 이 자습서의 끝부분에는 SQL 프로젝트가 자동으로 변경 내용을 빌드하고 대상 데이터베이스에 배포합니다.

필수 조건

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

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

GitHub에서 파이프라인 설정을 완료하려면 다음 항목이 있는지 확인합니다.

참고 항목

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

1단계: 새 프로젝트 만들기

개체를 수동으로 추가하기 전에 새 SQL Database 프로젝트를 만들어 프로젝트를 시작합니다. 스키마 비교 도구를 사용하는 등 기존 데이터베이스의 개체로 프로젝트를 즉시 채울 수 있는 프로젝트를 만드는 다른 방법이 있습니다.

파일, 새로 만들기, 프로젝트를 차례로 선택합니다.

새 프로젝트 대화 상자의 검색 창에서 SQL Server 조건을 사용하세요. 상위 결과가 SQL Server 데이터베이스 프로젝트여야 합니다.

새 프로젝트 대화 상자의 스크린샷.

다음을 선택하여 다음 단계를 진행합니다. 데이터베이스 이름과 일치시킬 필요가 없는 프로젝트 이름을 제공합니다. 필요에 따라 프로젝트 위치를 확인하고 수정합니다.

만들기를 선택하여 프로젝트를 만듭니다. 빈 프로젝트가 열리고 솔루션 탐색기 보기에 표시되어 편집할 수 있게 됩니다.

파일, 새로 만들기, 프로젝트를 차례로 선택합니다.

새 프로젝트 대화 상자의 검색 창에서 SQL Server 조건을 사용하세요. 상위 결과가 SQL Server 데이터베이스 프로젝트, SDK 스타일(미리 보기)이어야 합니다.

새 프로젝트 대화 상자의 스크린샷.

다음을 선택하여 다음 단계를 진행합니다. 데이터베이스 이름과 일치시킬 필요가 없는 프로젝트 이름을 제공합니다. 필요에 따라 프로젝트 위치를 확인하고 수정합니다.

만들기를 선택하여 프로젝트를 만듭니다. 빈 프로젝트가 열리고 솔루션 탐색기 보기에 표시되어 편집할 수 있게 됩니다.

VS Code 또는 Azure Data Studio의 데이터베이스 프로젝트 보기에서 새 프로젝트 단추를 선택합니다.

새 뷰렛의 스크린샷

첫 번째 프롬프트는 주로 대상 플랫폼이 SQL Server인지 Azure SQL인지에 따라 사용할 프로젝트 템플릿을 결정합니다. 특정 버전의 SQL을 선택하라는 메시지가 표시되면 대상 데이터베이스와 일치하는 버전을 선택하지만 대상 데이터베이스 버전을 알 수 없는 경우 나중에 값을 수정할 수 있으므로 최신 버전을 선택합니다.

표시되는 텍스트 입력에 프로젝트 이름을 입력합니다. 이 이름은 데이터베이스 이름과 일치시킬 필요가 없습니다.

표시되는 “폴더 선택” 대화 상자에서 프로젝트의 폴더, .sqlproj 파일 및 기타 콘텐츠가 상주할 디렉터리를 선택합니다.

SDK 스타일 프로젝트(미리 보기)를 만들지 여부를 묻는 메시지가 표시되면 를 선택합니다.

완료된 후, 빈 프로젝트는 데이터베이스 프로젝트 보기에서 열고 편집을 위해 확인할 수 있습니다.

Microsoft.Build.Sql 프로젝트에 대한 .NET 템플릿이 설치되어 있으면 명령줄에서 새 SQL 데이터베이스 프로젝트를 만들 수 있습니다. -n 옵션은 프로젝트의 이름을 지정하고 -tp 옵션은 프로젝트 대상 플랫폼을 지정합니다.

사용 가능한 모든 옵션을 보려면 -h 옵션을 사용합니다.

# install Microsoft.Build.Sql.Templates
dotnet new sqlproject -n MyDatabaseProject

2단계: 프로젝트에 개체 추가

솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 추가를 선택한 다음 테이블을 선택합니다. 테이블 이름을 지정할 수 있는 새 항목 추가 대화 상자가 나타납니다. 추가를 선택하여 SQL 프로젝트 내 테이블을 만듭니다.

테이블은 Visual Studio 테이블 디자이너에서 열, 인덱스 및 기타 테이블 속성을 추가할 수 있는 템플릿 테이블 정의와 함께 열립니다. 초기 편집을 완료하면 파일을 저장합니다.

뷰, 저장 프로시저 및 함수와 같은 새 항목 추가 대화 상자를 통해 더 많은 데이터베이스 개체를 추가할 수 있습니다. 솔루션 탐색기 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 원하는 개체 형식을 선택하여 대화 상자에 액세스합니다. 프로젝트의 파일은 추가 아래의 새 폴더 옵션을 통해 폴더로 구성할 수 있습니다.

솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가, 새 항목을 선택합니다. 새 항목 추가 대화 상자가 나타나고 모든 템플릿 표시, 테이블을 선택합니다. 테이블 이름을 파일 이름으로 지정하고 추가를 선택하여 SQL 프로젝트에서 테이블을 만듭니다.

열, 인덱스 및 기타 테이블 속성을 추가할 수 있는 템플릿 테이블 정의가 있는 Visual Studio 쿼리 편집기에서 테이블이 열립니다. 초기 편집을 완료하면 파일을 저장합니다.

뷰, 저장 프로시저 및 함수와 같은 새 항목 추가 대화 상자를 통해 더 많은 데이터베이스 개체를 추가할 수 있습니다. 솔루션 탐색기 프로젝트에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음, 모든 템플릿 표시 뒤에 원하는 개체 유형을 선택하여 대화 상자에 액세스합니다. 프로젝트의 파일은 추가 아래의 새 폴더 옵션을 통해 폴더로 구성할 수 있습니다.

VS Code 또는 Azure Data Studio의 데이터베이스 프로젝트 보기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 테이블 추가를 선택합니다. 표시되는 대화 상자에서 테이블 이름을 지정합니다.

열, 인덱스 및 기타 테이블 속성을 추가할 수 있는 템플릿 테이블 정의가 있는 텍스트 편집기에서 테이블이 열립니다. 초기 편집을 완료하면 파일을 저장합니다.

뷰, 저장 프로시저 및 함수와 같은 프로젝트 노드의 상황에 맞는 메뉴를 통해 더 많은 데이터베이스 개체를 추가할 수 있습니다. VS Code 또는 Azure Data Studio의 데이터베이스 프로젝트 보기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭한 다음 원하는 개체 형식을 클릭하여 대화 상자에 액세스합니다. 프로젝트의 파일은 추가 아래의 새 폴더 옵션을 통해 폴더로 구성할 수 있습니다.

파일은 프로젝트 디렉터리 또는 중첩된 폴더에서 만들어 프로젝트에 추가할 수 있습니다. 파일 익스텐션은 .sql여야 하며 개체 유형 또는 스키마별로 구성하고 개체 유형을 구성하는 것이 좋습니다.

테이블에 대한 기본 템플릿을 프로젝트에서 새 테이블 개체를 만들기 위한 시작점으로 사용할 수 있습니다.

CREATE TABLE [dbo].[Table1]
(
  [Id] INT NOT NULL PRIMARY KEY
)

3단계: 프로젝트 빌드

빌드 프로세스는 프로젝트 파일에 지정된 대상 플랫폼에 대한 개체와 구문 간의 관계의 유효성을 검사합니다. 빌드 프로세스의 아티팩트 출력은 대상 데이터베이스에 프로젝트를 배포하는 데 사용할 수 있는 .dacpac 파일이며 데이터베이스 스키마의 컴파일된 모델을 포함합니다.

솔루션 탐색기에서, 프로젝트 노드를 마우스 우클릭한 후 빌드를 선택합니다.

출력 창이 자동으로 열리면 빌드 프로세스가 표시됩니다. 오류 또는 경고가 발생한 경우, 출력 창에 표시됩니다. 빌드가 성공하면 빌드 아티팩트(.dacpac 파일)가 만들어지고 해당 위치가 빌드 출력에 포함됩니다(기본값은 bin\Debug\projectname.dacpac).

솔루션 탐색기에서, 프로젝트 노드를 마우스 우클릭한 후 빌드를 선택합니다.

출력 창이 자동으로 열리면 빌드 프로세스가 표시됩니다. 오류 또는 경고가 발생한 경우, 출력 창에 표시됩니다. 빌드가 성공하면 빌드 아티팩트(.dacpac 파일)가 만들어지고 해당 위치가 빌드 출력에 포함됩니다(기본값은 bin\Debug\projectname.dacpac).

VS Code 또는 Azure Data Studio의 데이터베이스 프로젝트 보기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다.

출력 창이 자동으로 열리면 빌드 프로세스가 표시됩니다. 오류 또는 경고가 발생한 경우, 출력 창에 표시됩니다. 빌드가 성공하면 빌드 아티팩트(.dacpac 파일)가 만들어지고 해당 위치가 빌드 출력에 포함됩니다(기본값은 bin/Debug/projectname.dacpac).

dotnet build 명령을 사용하여 명령줄에서 SQL Database 프로젝트를 빌드할 수 있습니다.

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

빌드 출력에는 오류 또는 경고와 발생하는 특정 파일 및 줄 번호가 포함됩니다. 빌드가 성공하면 빌드 아티팩트(.dacpac 파일)가 만들어지고 해당 위치가 빌드 출력에 포함됩니다(기본값은 bin/Debug/projectname.dacpac).

4단계: 소스 제어에 프로젝트 체크 인

프로젝트를 Git 리포지토리로 초기화하고 프로젝트 파일을 소스 제어에 커밋합니다. 이 단계는 프로젝트를 다른 사용자와 공유하고 연속 배포 파이프라인에서 사용할 수 있도록 하는 데 필요합니다.

  1. Visual Studio의 Git 메뉴에서 Git 리포지토리 만들기를 선택합니다.

    Visual Studio Git 메뉴의 Git 리포지토리 만들기 옵션 스크린샷

  2. Git 리포지토리 만들기 대화 상자의 새 원격으로 푸시 섹션에서 GitHub를 선택합니다.

  3. Git 리포지토리 만들기 대화 상자의 새 GitHub 리포지토리 만들기 섹션에서 만들려는 리포지토리의 이름을 입력합니다. GitHub 계정에 아직 로그인하지 않은 경우에도 이 화면에서 작업을 수행할 수 있습니다.

    GitHub 선택 항목이 강조 표시된 Visual Studio의 Git 리포지토리 만들기 대화 상자 스크린샷입니다.

    로컬 Git 리포지토리 초기화에서 .gitignore 템플릿 옵션을 사용하여 Git에서 무시하려는 의도적으로 추적되지 않은 파일을 지정해야 합니다. 에 대한 자세한 내용은 Ignoring files(파일 무시)를 참조하세요. 라이선스에 대한 자세한 내용은 리포지토리 라이선스를 참조 하세요.

  4. 로그인하고 리포지토리 정보를 입력한 후 만들기 및 푸시 단추를 선택하여 리포지토리를 만들고 앱을 추가합니다.

솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 게시...를 선택합니다.

대상 데이터베이스 연결을 설정하는 게시 대화 상자가 열립니다. 배포할 기존 SQL 인스턴스가 없는 경우 LocalDB((localdb)\MSSQLLocalDB)는 Visual Studio와 함께 설치되며 테스트 및 개발에 사용할 수 있습니다.

데이터베이스 이름을 지정하고 게시를 선택하여 대상 데이터베이스에 프로젝트를 배포하거나 스크립트 생성을 선택하여 실행하기 전에 검토할 스크립트를 생성합니다.

VS Code 또는 Azure Data Studio에서 로컬 리포지토리를 초기화하고 GitHub에 직접 게시할 수 있습니다. 이 작업은 GitHub 계정에 새 리포지토리를 만들고 로컬 코드 변경 내용을 한 단계로 원격 리포지토리 푸시합니다.

VS Code 또는 Azure Data Studio의 소스 제어 보기에서 GitHub 에 게시 단추를 사용합니다. 그런 다음, 리포지토리의 이름 및 설명과 공개 또는 비공개로 지정할지 여부를 지정하라는 메시지가 표시됩니다.

GitHub 선택 항목이 강조 표시된 Visual Studio의 Git 리포지토리 만들기 대화 상자 스크린샷입니다.

또는 GitHub에서 빈 리포지토리를 만들 때 제공된 단계에 따라 로컬 리포지토리를 초기화하고 GitHub에 푸시할 수 있습니다.

프로젝트 디렉터리에서 새 Git 리포지토리를 초기화하고 프로젝트 파일을 소스 제어에 커밋합니다.

git init
git add .
git commit -m "Initial commit"

GitHub에 새 저장소를 만들고 로컬 저장소를 원격 저장소로 푸시합니다.

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

5단계: 연속 배포 파이프라인에 프로젝트 빌드 단계 추가

SQL 프로젝트는 .NET 라이브러리에서 지원되며, 그 결과 프로젝트가 dotnet build 명령으로 빌드됩니다. 이 명령은 가장 기본적인 CI/CD(연속 통합 및 지속적인 배포) 파이프라인의 필수 요소입니다. 빌드 단계는 GitHub 작업에서 만드는 연속 배포 파이프라인에 추가할 수 있습니다.

  1. 리포지토리의 루트에서 이름이 .github/workflows인 새 디렉터리를 만듭니다. 이 디렉터리에는 연속 배포 파이프라인을 정의하는 워크플로 파일이 포함됩니다.

  2. .github/workflows 디렉터리에 sqlproj-sample.yml(이)라는 새 파일을 만듭니다.

  3. 프로젝트의 이름 및 경로와 일치하도록 프로젝트 이름을 편집하여 sqlproj-sample.yml 파일에 다음 콘텐츠를 추가합니다.

    name: sqlproj-sample
    
    on:
      push:
        branches: [ "main" ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v4
    
        - name: Setup .NET
          uses: actions/setup-dotnet@v4
          with:
            dotnet-version: 8.0.x
    
        - name: Build
          run: dotnet build MyDatabaseProject.sqlproj
    
  4. 워크플로 파일을 리포지토리에 커밋하고 변경 내용을 원격 리포지토리 푸시합니다.

  5. GitHub.com에서 리포지토리의 기본 페이지로 이동합니다. 리포지토리 이름 아래에 있는 동작을 클릭합니다. 왼쪽 세로 막대에서 사용자가 막 만든 워크플로를 선택합니다. 워크플로의 최근 실행은 워크플로 파일을 리포지토리로 푸시한 시점의 워크플로 실행 목록에 표시됩니다.

첫 번째 GitHub 작업 워크플로를 만드는 기본 사항에 대한 자세한 내용은 GitHub Actions 빠른 시작에서 확인할 수 있습니다.

6단계: 지속적인 배포 파이프라인에 .dacpac 배포 단계 추가

.dacpac 파일에서 데이터베이스 스키마의 컴파일된 모델은 SqlPackage 명령줄 도구 또는 기타 배포 도구를 사용하여 대상 데이터베이스에 배포할 수 있습니다. 배포 프로세스는 대상 데이터베이스를 .dacpac에 정의된 스키마와 일치하도록 업데이트하는 데 필요한 단계를 결정하여 데이터베이스에 이미 존재하는 개체를 기반으로 필요에 따라 개체를 만들거나 변경합니다. 예를 들어 연결 문자열 기반으로 대상 데이터베이스에 .dacpac 파일을 배포하려면 다음을 수행합니다.

sqlpackage /Action:Publish /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:{yourconnectionstring}

배포 전 DacFx 원본 및 대상 비교 프로세스의 스크린샷

배포 프로세스는 idempotent이므로 문제를 일으키지 않고 여러 번 실행할 수 있습니다. 지금 만드는 파이프라인은 리포지토리의 main 분기에 변경 내용이 체크인될 때마다 SQL 프로젝트를 빌드하고 배포합니다. 배포 파이프라인에서 직접 SqlPackage 명령을 실행하는 대신 명령을 추상화하고 로깅, 오류 처리 및 작업 구성과 같은 추가 기능을 제공하는 배포 작업을 사용할 수 있습니다. GitHub 작업의 연속 배포 파이프라인에 배포 작업 GitHub sql-action 을 추가할 수 있습니다.

참고 항목

자동화 환경에서 배포를 실행하려면 배포가 데이터베이스에 도달하고 인증할 수 있도록 데이터베이스 및 환경을 구성해야 합니다. VM의 Azure SQL Database 또는 SQL Server에서 자동화 환경이 데이터베이스에 연결할 수 있도록 방화벽 규칙을 설정하고 필요한 자격 증명으로 연결 문자열 제공해야 할 수 있습니다. 지침은 GitHub sql-action 설명서에 제공됩니다.

  1. .github/workflows 디렉터리에서 sqlproj-sample.yml 파일 열기

  2. 빌드 단계 후 sqlproj-sample.yml 파일에 다음 단계를 추가합니다.

    - name: Deploy
      uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.SQL_CONNECTION_STRING }}
        action: 'publish'
        path: 'bin/Debug/MyDatabaseProject.dacpac'
    
  3. 변경 내용을 커밋하기 전에 대상 데이터베이스에 대한 연결 문자열을 포함하는 비밀을 리포지토리에 추가합니다. GitHub.com에서 리포지토리의 설정으로 이동하고, 그 다음 비밀로 이동합니다. 새 리포지토리 비밀을 선택하고 연결 문자열 값으로 명명된 SQL_CONNECTION_STRING 비밀을 대상 데이터베이스에 추가합니다.

    새 리포지토리 비밀 단추가 강조 표시된 GitHub 리포지토리 설정의 스크린샷

  4. sqlproj-sample.yml(으)로부터 리포지토리로 변경 내용을 커밋하고 변경 내용을 원격 리포지토리 푸시합니다.

  5. GitHub.com 워크플로 기록으로 돌아가서 워크플로의 가장 최근 실행을 선택합니다. 배포 단계는 워크플로 실행에 대한 단계 목록에 표시되어야 하며 워크플로는 성공 코드를 반환합니다.

  6. 대상 데이터베이스에 연결하고 프로젝트의 개체가 데이터베이스에 있는지 확인하여 배포를 확인합니다.

워크플로에서 환경 관계를 설정하고 배포를 실행하기 전에 승인을 요구하여 GitHub 배포의 보안을 강화할 수 있습니다. 환경 보호 및 비밀 보호에 대한 자세한 내용은 Github Actions 문서에서 확인할 수 있습니다.

도움말 보기