쿼리 알림 사용
쿼리 알림을 사용하는 애플리케이션에는 일반적인 요구 사항 집합이 있습니다. SQL 쿼리 알림을 지원하도록 데이터 소스를 올바르게 구성해야 하며, 사용자는 올바른 클라이언트측 및 서버측 권한을 가지고 있어야 합니다.
쿼리 알림을 사용하려면 다음을 수행해야 합니다.
- 데이터베이스에 대해 쿼리 알림을 활성화합니다.
- 데이터베이스 연결에 사용되는 사용자 ID에 필요한 권한이 있는지 확인합니다.
- SqlCommand 개체를 사용하여 SqlDependency 또는 SqlNotificationRequest와 같은 관련된 알림 개체로 올바른 SELECT 문을 실행합니다.
- 모니터링하는 데이터가 변경될 경우 알림을 처리하는 코드를 제공합니다.
쿼리 알림 요구 사항
쿼리 알림은 특정 요구 사항 목록을 충족하는 SELECT 문에 대해서만 지원됩니다. 다음 표에는 SQL Server 온라인 설명서의 Service Broker 및 쿼리 알림 문서에 대한 링크가 나와 있습니다.
SQL Server 설명서
- 알림에 대한 쿼리 만들기
- Service Broker에 대한 보안 고려 사항
- 보안 및 보호(Service Broker)
- Notifications Services에 대한 보안 고려 사항
- 쿼리 알림 권한
- Service Broker에 대한 국가별 고려 사항
- 솔루션 디자인 고려 사항(Service Broker)
- Service Broker 개발자 정보 센터
- 개발자 가이드(Service Broker)
쿼리 알림 활성화 샘플 코드
SQL Server Management Studio를 사용하여 AdventureWorks 데이터베이스에 대해 Service Broker를 활성화하려면 다음 Transact-SQL 문을 실행합니다.
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
쿼리 알림 샘플을 올바르게 실행하려면 데이터베이스 서버에서 다음 Transact-SQL 문을 실행해야 합니다.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
쿼리 알림 권한
알림 요청 명령을 실행하는 사용자는 서버에 대해 SUBSCRIBE QUERY NOTIFICATIONS 데이터베이스 권한을 가지고 있어야 합니다.
부분 신뢰 상황에서 실행되는 클라이언트측 코드의 경우에는 SqlClientPermission이 필요합니다.
다음 코드에서는 SqlClientPermission 개체를 만들고 PermissionState를 Unrestricted로 설정합니다. Demand는 호출 스택의 상위 호출자에게 권한이 없는 경우 런타임에 SecurityException을 발생시킵니다.
using Microsoft.Data.SqlClient;
using System.Security.Permissions;
class Program
{
static void Main()
{
}
// Code requires directives to
// System.Security.Permissions and
// Microsoft.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
}
알림 개체 선택
쿼리 알림 API에서는 알림을 처리하기 위한 두 개의 개체인 SqlDependency 및 SqlNotificationRequest입니다.
SqlDependency 사용
SqlDependency를 사용하려면 사용 중인 SQL Server 데이터베이스에 대해 Service Broker를 활성화해야 하며 사용자는 알림을 수신할 수 있는 권한이 있어야 합니다. 알림 큐 같은 Service Broker 개체는 미리 정의되어 있습니다.
또한 SqlDependency에서는 큐에 게시될 때 자동으로 작업자 스레드를 시작하여 알림을 처리합니다. 또한 Service Broker 메시지를 구문 분석하여 정보를 이벤트 인수 데이터로 노출합니다. SqlDependency는 Start
메서드를 호출하여 데이터베이스에 대해 종속성을 설정함으로써 초기화해야 합니다. Start
은(는) 필요한 각 데이터베이스 연결에 대해 애플리케이션을 초기화할 때 한 번만 호출해야 하는 정적 메서드입니다. 만들어진 각 종속성 연결에 대해 애플리케이션이 종료될 때 Stop
메서드를 호출해야 합니다.
SqlNotificationRequest 사용
이와 반대로 SqlNotificationRequest를 사용하려면 전체 수신 인프라를 직접 구현해야 합니다. 또한 큐, 서비스, 큐에서 지원하는 메시지 유형과 같은 모든 지원 Service Broker 개체를 정의해야 합니다. 이 수동 접근 방식은 애플리케이션에 특별한 알림 메시지 또는 알림 동작이 필요하거나 애플리케이션이 보다 큰 Service Broker 애플리케이션에 속해 있는 경우에 유용합니다.
다음 단계
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기