다음을 통해 공유


CLR 통합 개요

CLR(공용 언어 런타임)은 Microsoft .NET Framework의 핵심이며 모든 .NET Framework 코드에 대한 실행 환경을 제공합니다. CLR 내에서 실행되는 코드를 관리 코드라고 합니다. CLR에서는 JIT(Just-In-Time) 컴파일, 메모리 할당 및 관리, 형식 안전성 적용, 예외 처리, 스레드 관리 및 보안 같은 프로그램 실행을 위한 다양한 기능과 서비스를 제공합니다. 자세한 내용은 .NET Framework SDK를 참조하세요.

Microsoft SQL Server에서 호스트되는 CLR(CLR 통합이라고 함)을 사용하여 관리 코드에서 저장 프로시저, 트리거, 사용자 정의 함수, 사용자 정의 형식 및 사용자 정의 집계를 작성할 수 있습니다. 관리 코드는 실행 전에 네이티브 코드로 컴파일되므로 일부 시나리오에서 상당한 성능 향상을 달성할 수 있습니다.

관리 코드는 CAS(코드 액세스 보안)를 사용하여 어셈블리가 특정 작업을 수행하지 못하도록 합니다. SQL Server는 CAS를 사용하여 관리 코드를 보호하고 운영 체제 또는 데이터베이스 서버의 손상을 방지합니다.

CLR 통합의 장점

Transact-SQL 데이터베이스에서 직접 데이터 액세스 및 조작을 위해 특별히 설계되었습니다. Transact-SQL 데이터 액세스 및 관리에 탁월하지만 본격적인 프로그래밍 언어는 아닙니다. 예를 들어 Transact-SQL 배열, 컬렉션, for-each 루프, 비트 이동 또는 클래스를 지원하지 않습니다. 이러한 구문 중 일부는 Transact-SQL에서 시뮬레이션할 수 있지만 관리 코드는 이러한 구문에 대한 통합 지원을 제공합니다. 시나리오에 따라 이러한 기능은 관리 코드에서 특정 데이터베이스 기능을 구현하는 강력한 이유를 제공할 수 있습니다.

Microsoft Visual Basic .NET 및 Microsoft Visual C#은 캡슐화, 상속 및 다형성과 같은 개체 지향 기능을 제공합니다. 이제 관련 코드를 클래스 및 네임스페이스로 쉽게 구성할 수 있습니다. 대량의 서버 코드를 사용하는 경우 코드를 보다 쉽게 구성하고 유지 관리할 수 있습니다.

관리 코드는 계산 및 복잡한 실행 논리에 Transact-SQL보다 더 적합하며 문자열 처리 및 정규식을 비롯한 많은 복잡한 작업을 광범위하게 지원합니다. .NET Framework 라이브러리에 있는 기능을 사용하면 수천 개의 미리 빌드된 클래스 및 루틴에 액세스할 수 있습니다. 저장 프로시저, 트리거 또는 사용자 정의 함수에서 쉽게 액세스할 수 있습니다. BCL(기본 클래스 라이브러리)에는 문자열 조작, 고급 수학 연산, 파일 액세스, 암호화 등에 대한 기능을 제공하는 클래스가 포함되어 있습니다.

비고

이러한 클래스의 대부분은 SQL Server의 CLR 코드 내에서 사용할 수 있지만 서버 쪽 사용(예: 창 클래스)에 적합하지 않은 클래스는 사용할 수 없습니다. 자세한 내용은 지원되는 .NET Framework 라이브러리를 참조하세요.

관리 코드의 이점 중 하나는 코드가 잘 정의된 허용 가능한 방식으로만 형식에 액세스하도록 하는 형식 안전성입니다. 관리 코드가 실행되기 전에 CLR은 코드가 안전한지 확인합니다. 예를 들어 이전에 기록되지 않은 메모리를 읽지 않도록 코드를 확인합니다. CLR은 코드가 관리되지 않는 메모리를 조작하지 않도록 하는 데도 도움이 될 수 있습니다.

CLR 통합은 성능 향상을 위한 잠재력을 제공합니다. 자세한 내용은 CLR 통합의 성능을 참조하세요.

Transact-SQL 및 관리 코드 중에서 선택

저장 프로시저, 트리거 및 사용자 정의 함수를 작성할 때는 기존 Transact-SQL을 사용할지 아니면 Visual Basic .NET 또는 Visual C#과 같은 .NET Framework 언어를 사용할지 결정해야 합니다. 코드가 주로 절차 논리를 거의 또는 전혀 사용하지 않고 데이터 액세스를 수행하는 경우 Transact-SQL 사용합니다. 복잡한 논리를 특징으로 하는 CPU 집약적 함수 및 프로시저 또는 .NET Framework의 BCL을 사용하려는 경우 관리 코드를 사용합니다.

서버의 실행과 클라이언트의 실행 중에서 선택

Transact-SQL 또는 관리 코드를 사용할지 여부에 대한 결정의 또 다른 요소는 코드, 서버 컴퓨터 또는 클라이언트 컴퓨터를 상주하려는 위치입니다. Transact-SQL 및 관리 코드는 모두 서버에서 실행할 수 있습니다. 이렇게 하면 코드와 데이터를 함께 닫고 서버의 처리 능력을 활용할 수 있습니다. 반면에 데이터베이스 서버에 프로세서 집약적 작업을 배치하지 않도록 할 수 있습니다. 오늘날 대부분의 클라이언트 컴퓨터는 매우 강력하며 클라이언트에 가능한 한 많은 코드를 배치하여 이 처리 능력을 활용할 수 있습니다. 관리 코드는 클라이언트 컴퓨터에서 실행할 수 있지만 Transact-SQL 실행할 수 없습니다.

확장 저장 프로시저와 관리 코드 중에서 선택

Transact-SQL 저장 프로시저를 사용할 수 없는 기능을 수행하도록 확장 저장 프로시저를 빌드할 수 있습니다. 그러나 확장 저장 프로시저는 SQL Server 프로세스의 무결성을 손상시킬 수 있지만 형식이 안전한 것으로 확인된 관리 코드는 손상될 수 없습니다. 또한 메모리 관리, 스레드 및 파이버 예약 및 동기화 서비스는 CLR과 SQL Server의 관리 코드 간에 보다 긴밀하게 통합됩니다. CLR 통합을 사용하면 Transact-SQL에서 불가능한 작업을 수행하는 데 필요한 저장 프로시저를 작성하는 확장 저장 프로시저보다 더 안전한 방법이 있습니다. CLR 통합 및 확장 저장 프로시저에 대한 자세한 내용은 CLR 통합의 성능을 참조하세요.

또한 참조하십시오

.NET Framework 설치
CLR 통합 아키텍처
CLR 데이터베이스 개체에서 데이터 액세스
CLR 통합 시작