다음을 통해 공유


SQL 데이터베이스 프로젝트란?

적용 대상: SQL Server 2022(16.x) Azure SQL 데이터베이스 Azure SQL Managed Instance

SQL 데이터베이스 프로젝트는 테이블, 저장 프로시저 또는 함수와 같은 단일 데이터베이스의 스키마를 구성하는 SQL 개체의 로컬 표현입니다. SQL 데이터베이스 프로젝트의 개발 주기를 통해 개발 모범 사례로 익숙한 CI/CD(연속 통합 및 지속적인 배포) 워크플로에 데이터베이스 개발을 통합할 수 있습니다.

개요

SQL 프로젝트는 선언적 T-SQL 문을 기반으로 합니다. SQL Database 프로젝트 코드에서 각 개체를 한 번 만듭니다. 열 추가 또는 데이터 형식 변경과 같이 해당 개체에 대해 변경해야 하는 경우 개체를 처음과 유일한 시간 동안 선언하는 단수 파일을 수정합니다.

SQL 데이터베이스 프로젝트가 빌드되면 출력 아티팩트는 .dacpac 파일입니다 . .dacpac을(를) 대상 데이터베이스에 게시하여 새 데이터베이스와 기존 데이터베이스를 업데이트하여 .dacpac의 콘텐츠와 일치하도록 업데이트할 수 있습니다.

SQL Database는 빌드 프로세스를 사용하여 해당 파일 집합에 두 가지 기본 기능을 추가하는 데이터베이스 코드의 프레임워크를 프로젝트합니다.

  • 특정 버전의 SQL에 대한 개체와 구문 간의 참조 유효성 검사
  • 새 데이터베이스 또는 기존 데이터베이스에 빌드 아티팩트 배포

배포 전 및 배포 후 스크립트와 데이터베이스 개체가 포함된 SQL Database 프로젝트 요약의 스크린샷

SQL 데이터베이스 프로젝트에 대한 기능은 Microsoft.SqlServer.DacFx .NET 라이브러리에서 제공하며 SQL 개발을 위한 여러 도구로 표시됩니다. DacFx에는 배포 단계 수정 및 코드 분석을 위한 사용자 지정 규칙을 만드는 기능과 같은 여러 확장성 지점이 있습니다. SQL 프로젝트용 프로젝트 SDK는 Microsoft.Build.Sql로, 현재 미리 보기로 제공되며 새 개발에 권장됩니다.

유효성 검사

SQL 프로젝트가 빌드되면 개체 간의 관계의 유효성이 검사됩니다. 예를 들어 뷰 정의는 SQL 프로젝트에 없는 테이블 또는 열을 포함할 수 없습니다.

또한 SQL 프로젝트에는 "대상 플랫폼"이라는 속성이 .sqlproj 파일에 포함됩니다. 이 정보는 빌드 프로세스 중에 함수 및 T-SQL 구문이 해당 버전의 SQL에 있는지 확인하는 데 사용됩니다. 예를 들어 SQL Server 2022에 추가된 JSON 함수는 Sql140(SQL Server 2017) 대상 플랫폼으로 설정된 SQL 프로젝트에서 사용할 수 없습니다.

SQL 프로젝트를 빌드하기 위해 명령줄에서 dotnet 빌드를 실행합니다. SQL 프로젝트(Azure Data Studio, VS Code 및 Visual Studio)를 지원하는 그래픽 도구에는 SQL 프로젝트를 빌드하는 메뉴 항목이 있습니다.

빌드 프로세스의 콘솔 출력에는 오류(빌드 실패) 또는 경고가 포함될 수 있습니다. 빌드 경고에는 개체 이름 및 기타 사용자 지정 가능한 모범 사례에 일치하지 않는 대/소문자가 포함될 수 있지만 빌드에 실패하지는 않습니다.

빌드 프로세스의 아티팩트 출력은 .dacpac 폴더에 기본 설정이 있는 빌드에 대해 찾을 수 있는 bin/Debug 파일입니다.

배포

.dacpac 출력 파일은 강력하고 재사용 가능하며 선언적 아티팩트입니다. 이 파일을 사용하면 SqlPackage 또는 다른 도구를 사용하여 데이터베이스에 데이터베이스 코드를 적용할 수 있습니다. .dacpac을(를) 배포할 SqlPackage 명령은 게시 명령입니다.

SQL 프로젝트 빌드에서 dacpac로, 데이터베이스에 배포하는 프로세스 개요 스크린샷

예들 들어 sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}입니다.

새 데이터베이스

SqlPackage는 dacpac를 새 데이터베이스에 게시할 때 개체 관계를 탐색하여 각 개체를 올바른 순서로 만듭니다. 예를 들어 sqlPackage는 Table_B Table_A 외래 키가 있는 경우 Table_B 전에 Table_A 만듭니다.

특히 개체 관계를 기반으로 각 T-SQL 섹션을 올바른 순서로 자동 실행하는 SQL 프로젝트를 사용할 수 있는 경우 전체 SQL 스크립트 폴더를 실행하고 싶지 않을 것입니다.

기존 데이터베이스

게시 프로세스는 새 데이터베이스에 게시할 때 개체 계층 구조를 탐색하는 것 외에도 .dacpac 게시 프로세스는 소스 .dacpac와 대상 데이터베이스 간의 차이를 계산한 후 해당 데이터베이스를 업데이트하는 데 필요한 단계를 결정합니다. 예를 들어 Table_C SQL 프로젝트에 있는 데이터베이스에 두 개의 열이 누락되고 StoredProcedure_A 변경된 경우 SqlPackage는 개체를 맹목적으로 만드는 대신 ALTER TABLE 문과 ALTER PROCEDURE 문을 만듭니다.

배포로 계산된 예제 alter table 문의 스크린샷.

게시 명령에서 기존 데이터베이스에 제공하는 유연성은 단일 데이터베이스로 제한되지 않습니다. 100개의 데이터베이스를 업그레이드하는 경우와 같이 여러 번 .dacpac을(를) 배포할 수 있습니다.

사용하는 경우

SQL 데이터베이스 프로젝트는 데이터베이스 개발을 CI/CD 워크플로에 통합하려는 팀에 적합합니다. SQL 프로젝트의 선언적 특성을 사용하면 데이터베이스 스키마에 대한 단일 원본을 사용할 수 있으며 빌드 및 게시 프로세스는 데이터베이스에 변경 내용을 배포하는 반복 가능하고 신뢰할 수 있는 방법을 제공합니다.

SQL 데이터베이스 프로젝트는 EF Core와 같은 ORM(개체 관계형 매퍼)을 사용한 개발을 포함하여 데이터베이스 상태의 진리 원본을 추적하는 데 사용됩니다. 데이터베이스를 만드는 데 사용되는 ORM에 관계없이 그래픽 도구 또는 명령줄을 사용하여 데이터베이스의 스키마를 SQL 프로젝트에 추출할 수 있습니다.

편집기에서 테이블을 표시하는 AdventureWorks SQL 프로젝트가 열려 있는 VS Code의 스크린샷

SQL 데이터베이스 프로젝트는 Azure SQL Database 및 Azure Synapse Analytics를 비롯한 SQL Server 및 Azure SQL 데이터베이스 제품군을 지원합니다. 애플리케이션 또는 데이터 웨어하우스를 개발하는 경우 SQL 데이터베이스 프로젝트를 사용하여 데이터베이스의 스키마를 관리할 수 있습니다. SQL 프로젝트는 Visual Studio, VS Code 및 Azure Data Studio의 도구에서 개발할 수 있습니다.

원래 프로젝트와 SDK 스타일 프로젝트(미리 보기)

원래 SQL 프로젝트 형식은 MSBuild(.NET Framework)를 기반으로 하며 Visual Studio의 SQL Server Data Tools에서 사용하는 형식입니다. SDK 스타일 프로젝트 형식은 .NET Core에 도입된 새 SDK 스타일 프로젝트를 기반으로 하며 Azure Data Studio 및 VS Code용 SQL Database 프로젝트 확장에서 사용하는 형식입니다. Visual Studio에서 SDK 스타일 SQL 프로젝트에 대한 지원은 로드맵에 있습니다.

새 개발 작업은 나중에 지원될 형식이기 때문에 SDK 스타일 프로젝트 형식을 사용하는 것이 좋습니다. SDK 스타일 프로젝트 형식은 더 유연하며 원래 SQL 프로젝트에서 사용할 수 없는 새로운 기능을 포함합니다.

  • .NET 8 지원(플랫폼 간)
  • 데이터베이스 참조에 대한 NuGet 패키지 참조
  • 프로젝트의 .sql 파일에 대한 기본 글로빙 패턴

SDK 스타일 프로젝트에는 원래 SQL 프로젝트의 기능 상위 집합이 있으며 기존 SQL 프로젝트는 프로젝트 파일 수정을 통해 SDK 스타일 프로젝트로 변환할 수 있습니다. 기능 검사의 예외는 .NET Framework가 필요하고 SDK 스타일 프로젝트에서 지원되지 않는 SQLCLR 개체에 대한 지원입니다.