CLR 데이터베이스 개체 배포
배포는 완성된 응용 프로그램이나 모듈을 배포하여 다른 컴퓨터에서 설치하고 실행하는 프로세스입니다. Microsoft Visual Studio를 사용하면 CLR(공용 언어 런타임) 데이터베이스 개체를 개발하고 테스트 서버에 배포할 수 있습니다. 또는 Visual Studio 대신 Microsoft .NET Framework 재배포 파일을 사용하여 관리되는 데이터베이스 개체를 컴파일할 수도 있습니다. 컴파일되고 나면 CLR 데이터베이스 개체가 포함된 어셈블리를 Visual Studio 또는 Transact-SQL 문을 사용하여 테스트 서버에 배포할 수 있습니다. Visual Studio .NET 2003은 CLR 통합 프로그래밍이나 배포에 사용할 수 없습니다. SQL Server에는 .NET Framework가 미리 설치되어 있으며 Visual Studio .NET 2003에서는 .NET Framework 2.0 어셈블리를 사용할 수 없습니다.
테스트 서버에서 CLR 메서드를 테스트하고 확인하고 나면 개발 스크립트를 사용하여 프로덕션 서버에 배포할 수 있습니다. 개발 스크립트는 수동으로 생성하거나 SQL Server Management Studio를 사용하여 생성할 수 있습니다. 자세한 내용은 이 항목의 뒷부분에 나오는 절차를 참조하십시오.
SQL Server에서는 CLR 통합 기능이 기본적으로 꺼져 있으므로 CLR 어셈블리를 사용하려면 이 기능을 사용하도록 설정해야 합니다. 자세한 내용은 CLR 통합 사용을 참조하십시오.
[!참고]
SQL Server 2005부터 호환성 수준이 "80"인 SQL Server 데이터베이스에서 관리되는 사용자 정의 형식, 저장 프로시저, 함수, 집계 또는 트리거를 만들 수 없습니다. SQL Server의 이러한 CLR 통합 기능을 활용하려면 sp_dbcmptlevel(Transact-SQL) 저장 프로시저를 사용하여 데이터베이스 호환성 수준을 "90"으로 설정해야 합니다.
테스트 서버에 어셈블리 배포
Visual Studio를 사용하여 CRL 함수, 프로시저, 트리거, UDT(사용자 정의 형식), UDA(사용자 정의 집계)를 만들고 테스트 서버에 배포할 수 있습니다. 또한 .NET Framework 재배포 파일에 포함된 csc.exe 및 vbc.exe와 같은 명령줄 컴파일러를 사용하여 이러한 관리되는 데이터베이스 개체를 컴파일할 수도 있습니다. SQL Server용 관리되는 데이터베이스 개체를 개발하기 위해 Visual Studio 통합 개발 환경이 필요한 것은 아닙니다.
모든 컴파일러 오류와 경고를 해결해야 합니다. 그런 다음 Visual Studio나 Transact-SQL 문을 사용하여 CLR 루틴이 포함된 어셈블리를 SQL Server 데이터베이스에 등록할 수 있습니다.
[!참고]
Microsoft Visual Studio를 원격 개발, 디버깅 및 개발에 사용하려면 SQL Server 인스턴스에서 TCP/IP 네트워크 프로토콜을 사용할 수 있어야 합니다. 서버에서 TCP/IP 프로토콜을 사용하는 방법은 클라이언트 네트워크 프로토콜 구성을 참조하십시오.
Visual Studio를 사용하여 어셈블리를 배포하려면
빌드 메뉴에서 <project name> 빌드를 선택하여 프로젝트를 빌드합니다.
테스트 서버에 어셈블리를 배포하기 전에 모든 빌드 오류 및 경고를 해결합니다.
빌드 메뉴에서 배포를 선택합니다. 그러면 Visual Studio에서 SQL Server 프로젝트를 처음 만들 때 지정한 SQL Server 인스턴스와 데이터베이스에 어셈블리가 등록됩니다.
Transact-SQL을 사용하여 어셈블리를 배포하려면
.NET Framework에 포함된 명령줄 컴파일러를 사용하여 원본 파일에서 어셈블리를 컴파일합니다.
Microsoft Visual C# 원본 파일의 경우 다음 명령을 실행합니다.
csc /target:library C:\helloworld.cs
Microsoft Visual Basic 원본 파일의 경우 다음 명령을 실행합니다.
vbc /target:library C:\helloworld.vb
이러한 명령은 /target 옵션에 라이브러리 DLL 작성을 지정하여 Visual C# 또는 Visual Basic 컴파일러를 시작합니다.
테스트 서버에 어셈블리를 배포하기 전에 모든 빌드 오류 및 경고를 해결합니다.
테스트 서버에서 SQL Server Management Studio를 엽니다. AdventureWorks2008R2와 같은 적절한 테스트 서버에 연결된 새 쿼리를 만듭니다.
쿼리에 다음 Transact-SQL을 추가하여 서버에서 어셈블리를 만듭니다.
CREATE ASSEMBLY HelloWorld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
- 그런 다음 SQL Server의 인스턴스에서 프로시저, 함수, 집계, 사용자 정의 형식 또는 트리거를 만들어야 합니다. HelloWorld 어셈블리의 Procedures 클래스에 HelloWorld라는 메서드가 포함되어 있는 경우 쿼리에 다음 Transact-SQL을 추가하여 SQL Server에서 hello라는 프로시저를 만들 수 있습니다.
CREATE PROCEDURE hello
AS
EXTERNAL NAME HelloWorld.Procedures.HelloWorld
SQL Server에서 여러 유형의 관리되는 데이터베이스 개체를 만드는 방법은 CLR 사용자 정의 함수, CLR 사용자 정의 집계, CLR 사용자 정의 형식, CLR 저장 프로시저 및 CLR 트리거를 참조하십시오.
프로덕션 서버에 어셈블리 배포
테스트 서버에서 CLR 데이터베이스 개체를 테스트하고 확인하고 나면 프로덕션 서버에 배포할 수 있습니다. 관리되는 데이터베이스 개체를 디버깅하는 방법은 CLR 데이터베이스 개체 디버깅을 참조하십시오.
관리되는 데이터베이스 개체의 배포는 테이블, Transact-SQL 루틴 등과 같은 일반 데이터베이스 개체의 배포와 유사합니다. 즉, CLR 데이터베이스 개체가 포함된 어셈블리를 배포 스크립트를 사용하여 다른 서버에 배포할 수 있습니다. 배포 스크립트는 Management Studio의 "스크립트 생성" 기능을 사용하여 작성할 수 있습니다. 또한 배포 스크립트는 수동으로 작성하거나 "스크립트 생성"을 사용하여 작성할 수 있고 수동으로 변경할 수도 있습니다. 배포 스크립트를 작성하고 나면 SQL Server의 다른 인스턴스에서 실행하여 관리되는 데이터베이스 개체를 배포할 수 있습니다.
스크립트 생성을 사용하여 배포 스크립트를 생성하려면
Management Studio를 열고 배포할 관리되는 어셈블리나 데이터베이스 개체가 등록된 SQL Server 인스턴스에 연결합니다.
개체 탐색기에서 <server name> 및 데이터베이스 트리를 확장합니다. 관리되는 데이터베이스 개체가 등록된 데이터베이스를 마우스 오른쪽 단추로 클릭하고 태스크를 클릭한 다음 스크립트 생성을 선택합니다. 스크립트 마법사가 열립니다.
목록 상자에서 데이터베이스를 선택하고 다음을 클릭합니다.
스크립트 옵션 선택 창에서 다음을 클릭하거나 옵션을 변경한 후 다음을 클릭합니다.
개체 유형 선택 창에서 배포할 데이터베이스 개체의 유형을 선택합니다. 다음을 클릭합니다.
개체 유형 선택 창에서 개체 유형을 선택할 때마다 <type> 선택 창이 표시됩니다. 이 창에서 지정된 데이터베이스에 등록된 해당 데이터베이스 개체 유형의 모든 인스턴스 중에서 선택할 수 있습니다. 하나 이상의 개체를 선택하고 다음을 클릭합니다.
원하는 데이터베이스 개체 유형을 모두 선택하고 나면 출력 옵션 창이 표시됩니다. 파일로 스크립팅을 선택하고 스크립트의 파일 경로를 지정합니다. 다음을 선택합니다. 선택 항목을 검토하고 마침을 클릭합니다. 배포 스크립트가 저장된 파일 경로에 저장됩니다.
배포 후 스크립트
배포 후 스크립트를 실행할 수 있습니다.
배포 후 스크립트를 추가하려면 Visual Studio 프로젝트 디렉터리에 postdeployscript.sql이라는 파일을 추가합니다. 예를 들어 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 기존 항목 추가를 선택합니다. 테스트 스크립트 폴더가 아닌 프로젝트의 루트에 있는 파일을 추가합니다.
배포를 클릭하면 Visual Studio에서 프로젝트 배포 후에 이 스크립트를 실행합니다.