본문 바로가기

MSSQL

SQL Server 2005 개발자 가이드[6/13]

Notification Service

시기적절하게 필요한 핵심 정보를 전달하는 것은 대부분의 비즈니스 솔루션의 핵심 목표입니다. Notification Service는 SQL Server 기반 알림 플랫폼의 역할을 수행합니다. Notification Service를 사용하여 개발자는 알림서비스 어플리케이션을 신속하게 개발할 수 있고 사용자는 알림서비스 어플리케이션을 통해 개인화된 정보를 적시에 제공받을 수 있습니다. 여러 종류의 통신 프로토콜과 장비를 사용하는 구독자에게 자동화된 알림 기능을 제공할 수 있습니다.

Notificaiton Service 기술구조 소개
Notification Service는 구독관리, 이벤트 수집, 알림 생성, 알림 전달로 구성됩니다. Notification Service 기반 솔루션을 설계하고 구현하기 위해서는 각 구성요소에 대해 상세한 정보를 알고 있어야 합니다

SQL Server 2005의 Notification Service 소개
Notification Services 는 특정 이벤트가 발생하였을 때 구독자에게 알림을 전달하기 위한 프레임워크입니다.
 


Notification Services 는 두 가지 종류의 XML 파일을 사용하여 구성됩니다. 하나는 Notification Service 인스턴스에 대한 설정정보를 포함하고 있는 구성 파일이고, 또 다른 하나는 Notification Service 인스턴스에 개별 알림 어플리케이션에 대한 설정정보를 포함하고 있는 어플리케이션 정의 파일(ADF)입니다. 구성 파일과 어플리케이션 정의 파일은 SQL Server 데이터베이스를 정의하기 위해 사용됩니다.

이벤트는 사용자가 알림을 받고자 하는, 주식가격변동, 주문배송정보, 축구경기득점소식 등과 같은 특정 행위입니다. 이벤트는 이벤트 공급자에 의해 Notification Service로 알려지게 되고, 데이터베이스 테이블에 저장됩니다.

구독 관리 어플리케이션을 통해 사용자는 자신을 구독자로 등록합니다. 구독 관리 어플리케이션을 통해, 구독자에 대한 상세정보를 지정하고, 특정 이벤트에 대한 구독 상세 정보를 설정하고, 알림을 받을 디바이스에 대한 정보를 지정합니다. 사용자는 특정 이벤트가 발생하거나 일정 주기의 간격으로 알림이 전송될 수 있도록 구독을 생성할 수 있습니다.

Notification Service는 내부 생성자 컴포넌트를 사용하여 구독에 대한 이벤트가 발생하면 적절한 알림을 생성합니다. 이벤트 정보와 구독 정보가 테이블에 저장되어 있기 때문에, 이벤트 생성자는 집합 기반 SQL 쿼리를 사용하여, 효과적으로 이벤트 정보와 구독 정보간의 비교작업을 수행할 수 있습니다.

생성된 알림 메시지는 내부 배포 컴포넌트로 전달되어, 적절한 형식으로 변환된 다음, 구독자가 지정한 디바이스로 전송됩니다. 알림 메시지는 Email, SMS 문자 메시지, .NET 알림 메시지 등 다양한 형식으로 전송될 수 있습니다.

Notification Service 기술구조
SQL Server 2005의 Notification Service 솔루션은 하나 또는 그 이상의 인스턴스와 각 인스턴스별로 하나 또는 그 이상 호스팅되는 어플리케이션으로 구성됩니다. 인스턴스와 어플리케이션의 관계를 이해하는 것이 Notification Service 기반 솔루션을 설계하고 계획하는 과정에 도움을 줄 수 있습니다.

인스턴스
Notification Service 인스턴스는 XML 구성 파일에 의해서 정의되며, SQL Server 데이터베이스에 데이터를 저장하고 있는 Windows 서비스로 구현됩니다. 인스턴스에는 해당 인스턴스에 호스팅되는 어플리케이션에서 공유하여 사용하는 구독자 정보를 저장하고 있으며, 알림의 생성 및 전달을 통제하는 역할을 수행합니다. 인스턴스에 대한 Windows 서비스는 ns$instance_name 으로 지정되며, 인스턴스에 연결된 데이터베이스는 기본값으로 instance_nameNSMain으로 지정됩니다.

어플리케이션
각 인스턴스는 여러 개의 어플리케이션을 통제합니다. 어플리케이션은 어플리케이션 정의 파일(ADF)에 의해서 정의되며, 기본값으로, instance_nameNSapplication_name로 명명되는 데이터베이스로 구현됩니다. 어플리케이션에는 이벤트, 구독, 알림에 대한 정보가 저장됩니다.

구독관리
사용자는 개발자가 개발한 구독 관리 어플리케이션을 통해 이벤트를 구독합니다. Notification Service는 구독 관리 어플리케이션을 쉽게 개발할 수 있도록, 구독 관리 개체 라이브러리를 제공합니다. 구독 관리 개체는 Subscriber 개체, SubscriberDevice 개체, Subscription 개체로 구성됩니다. 구독 관리 개체는 각각 필요한 데이터를 Notification Service 데이터베이스에 저장됩니다. 저장된 구독 관리 개체 데이터는 알림을 생성하기 위해 사용됩니다.

이벤트 수집
이벤트는 이벤트 공급자에 의해 수집되며, 세 가지 종류의 API 중 하나를 통해, Notification Service로 전달됩니다. 관리되는 .NET API는 Event 개체와 Event Collector 개체를 제공하며, 관리되는 코드를 사용하여 이벤트를 전달할 수 있습니다. COM API는 COM 기반 어플리케이션과 관리되는 API간에 상호운영성을 보장하기 위해 사용됩니다. XML API는 이벤트 원본을 이벤트 데이터를 포함한 XML 파일로 전달한 다음, SQL Server 의 XML 대량 복사 컴포넌트를 사용하여 Notification Service로 전달하기 위해 사용합니다. SQL API는 저장 프로시저를 통해, 이벤트를 전달하기 위해서 사용됩니다. 어떤 API가 사용되었느냐에 따라, 해당 API에서 전달하는 이벤트 데이터가 Notification Service로 전달되어, 데이터베이스에 저장됩니다.

이벤트는 일반적으로 효율적인 처리를 위해 배치형태로 전달됩니다. 개발자는 각 API를 사용하여 사용자정의 이벤트 공급자를 생성할 수 있습니다. 또한, Notification Service에서는 SQL Server 이벤트 공급자나 FileSystemWatcher 이벤트 공급자 등과 같은 표준 이벤트 공급자를 제공합니다.

알림 생성
어플리케이션 정의 파일에 지정된 시간 간격에(퀀텀(Quantum)라고 부름) 따라, 주기적으로 알림 생성자는 어플리케이션 개발자가 지정한 규칙에 따라, 이벤트 데이터와 구독 데이터에 대해 T-SQL 쿼리를 실행합니다. 지정된 규칙에 해당하는 알림이 발견되면, 배치작업으로 처리되어, Notifications 테이블에 저장됩니다.

알림 서식 지정 및 배달
알림 생성자에서 알림을 생성한 다음, 배포자는 Notifications 테이블에 저장된 데이터를 사용하여, 알림 메시지에 필요한 서식을 설정하고, 적절한 컨텐츠 포맷터(예를 들어, XSLT 스타일시트)에 맞도록 데이터를 변환합니다. 그 다음, 배포자는 서식이 적용된 알림 메시지를, 구독자가 지정한 디바이스로 전송하기 위해, 적절한 배달 채널에 전달합니다.

배달 채널은 Notification Service 어플리케이션에서 알림 메시지를 전달하기 위해서 사용할, 지정된 프로토콜에 적합하도록 생성할 수 있습니다. Notification Service 는 명시적으로 SMTP, HTTP, 파일 시스템에 알림 메시지를 저장하기 위한 File 프로토콜과 같은 세 가지 프로토콜을 지정합니다. 또한 사용자 정의 프로토콜을 생성할 수도 있습니다.
Notification Service 프로세스
어플리케이션 개발 프로세스
Notification Service 어플리케이션을 개발하기 전에, 솔루션을 개발하기 위해 반드시 수행해야 하는 작업에 대해 알아두어야 합니다. 개발 프로세스에 대한 이해는 개발 프로젝트와 자원을 효율적으로 운용할 수 있게 해 줍니다.

다음은 Notification Service 솔루션을 개발하기 위해 수행해야 하는 작업단계입니다.
작업단계 설명
Notification Service에 적합한 시나리오 설계 구성정보 및 ADF 파일 생성 솔루션 설계자가 Notification Service 솔루션에 대한 계획을 수립하는 단계입니다. 구성정보 파일 및 어플리케이션 정의 파일은 XML 형식이기 때문에, XML에 대한 지식을 보유하고 있는 개발자에 의해서 작성되어야 합니다.
SQL Server Management Studio, NSControl을 사용하여 인스턴스를 등록하고 어플리케이션 개발 개발자 또는 관리자는 Notification Service 솔루션을 개발하기 위해 SQL Server Management Studio 나 NSControl 명령줄 유틸리티와 같은 도구에 대한 지식을 알고 있어야 합니다.
구독 관리 어플리케이션 개발 Notification Service 솔루션에는 구독 관리 개체를 사용하여 구독 관리 어플리케이션이 포함되어야 하기 때문에, 개발자는 .NET이나 COM 프로그래밍 기술을 보유하고 있어야 합니다.
이벤트 공급자를 사용하여 이벤트 수집 구현 이벤트 기반 구독을 활성화하기 위해서는, 이벤트 공급자를 사용하여 이벤트 수집을 구현해야 합니다. Notification Service에 포함된 표준 이벤트 공급자 중에 하나를 사용할 수도 있고, 이벤트 API를 사용하여 사용자정의 이벤트 공급자를 개발할 수도 있습니다.

설계 고려사항
어플리케이션 개발을 시작하기 전에, 먼저 요구사항을 충족하는 솔루션을 설계해야 합니다. Notification Service 솔루션을 설계하기 위한 시간을 투자함으로써, Notification Service 솔루션을 개발하고 배포하는 과정을 좀 더 쉽게 처리할 수 있습니다.

Notification Service 솔루션을 설계할 때 고려해야 하는 고려사항은 다음과 같습니다.
고려사항 설명
인스턴스와 어플리케이션 구성 필요한 Notification Service 인스턴스 수와 각 인스턴스에 어떤 어플리케이션을 할당할 것인지를 결정합니다. 일반적으로 하나의 인스턴스에는 하나의 어플리케이션을 할당하는 것이 적합합니다. 하지만, 구독자 데이터를 공유할 수 있는 경우, 단일 인스턴스에 여러 개의 어플리케이션을 할당할 수 있습니다.
데이터 구조 설계 구독, 이벤트, 알림 테이블에 알림 메시지에 필요한 데이터를 제공하기 위해서 사용자 정의 필드를 추가할 수 있습니다.
매치 규칙 매치 규칙은 구독 데이터와 이벤트 데이터로부터 알림을 생성하기 위해 사용합니다. 어플리케이션에서 알림을 생성하기 위해 필요한 T-SQL 명령을 설계해야 합니다.
기록(chronicle) 테이블 일부 어플리케이션의 경우, 이벤트, 구독, 알림 데이터의 이력을 기록 테이블에 저장해야 하는 요건이 발생할 수 있습니다. 이력 데이터가 필요한 경우, 이력 데이터를 관리하기 위한 테이블과 규칙을 설계해야 합니다.
알림 형식 알림 메시지에 대한 형식도 설계되어야 합니다. 표준 XSLT 포맷터를 사용하는 경우에는, 적절한 XSLT 스타일시트를 설계해야 합니다. 관리되는 코드를 사용하여 컨텐츠 포맷터를 설계할 수도 있습니다.
알림 전송 Notification Service 솔루션에서 지원할 프로토콜을 결정해야 합니다. 표준 파일, HTTP, SMTP 프로토콜을 지정할 수 있고, 별도의 사용자정의 프로토콜 공급자를 생성할 수도 있습니다. 지원할 프로토콜을 지정한 다음에는, 지원할 구독자 디바이스도 설계해야 합니다.
물리적 배포 테스트나 배포 환경에서는 단일 서버에 Notification Service 솔루 션을 구현할 수 있습니다. 하지만, 운영환경에서는 여러 대의 서버를 사용하게 되며, 알림 생성자나 배포자 기능으로부터 Notification Service 데이터 저장소를 분리합니다.


권장사항
Notification Service 어플리케이션을 생성할 때 고려해야 하는 권장사항이 있습니다. 다음 표는 Notification Service 어플리케이션이 최적의 성능과 기능을 제공할 수 있도록 보장하기 위한 가이드라인이 나타나 있습니다.
권장사항 설명
이벤트 배치 처리 개별로 이벤트를 처리할 수 있다고 하더라도, 집합 기반 작업을 수행하여, 배치단위로 이벤트를 처리하면, Notification Service 을 최적화할 수 있고, 성능을 향상시킬 수 있습니다.
다이제스트 또는 멀티캐스트 배달지정 다이제스트 알림을 사용하여, 단일 구독자에 대한 알림을 그룹 화하거나, 여러 구독자에 대한 알림을 단일 멀티 캐스트 알림으로 조합하면, Notification Service 시스템에 대한 작업부하를 줄일 수 있으며, 성능도 개선할 수 있습니다.
이벤트에 구독자에 특화된 데이터 사용금지 단일 사용자에 특화된 이벤트를 생성하면, 이벤트의 종류가 매우 많아지기 때문에, 성능에 악영향을 미칩니다. Notification Service 솔루션을 설계할 때는, 각 이벤트를 일반화하여 생성하고, 구독자에 의해서 필터링하는 방법을 사용해야, 좀 더 효율적으로 알림을 생성할 수 있습니다.
기록 테이블에 인덱스 추가 기록 테이블에 인덱스를 추가하여 성능을 개선할 수 있습니다.
기간이 경과된 데이터 삭제 기록 테이블에서 기간이 경과된 데이터를 압축하기 위한 규칙을 수립하고, 기간이 경과된 이벤트 데이터를 삭제합니다.
Notification Service 솔루션 구현
Notification Service 어플리케이션을 구현하는 방법에 대해서 살펴봅니다. 구성 파일과 어플리케이션 정의 파일을 구성하는 방법, SQL Server Management Studio나 NSControl 유틸리티를 사용하는 방법, 이벤트 공급자를 개발하기 위해 사용할 수 있는 옵션과, 구독 관리 어플리케이션을 개발하는 방법을 살펴봅니다.

구성 파일
XML 구성 파일은 Notification Service 인스턴스를 정의하기 위해 생성합니다. 필요한 Notification Service 솔루션을 개발하기 위해서는, 구성 파일에 포함되는 핵심 정보에 대해서 알아두어야 합니다.
항목 설명
매개변수 SQL Server Management Studio나 NSControl 유틸리티를 사용하여 구성 파일에서 사용할 사용자 매개변수를 정의할 수 있습니다. 파일 내부에서 각 매개변수를 퍼센트(%) 문자를 지정하여 참조할 수 있습니다. 환경 변수는 구성파일내에서 자동으로 접근할 수 있습니다. <ParameterDefaults> 엘리먼트를 사용하여 매개변수에 기본값을 할당할 수 있습니다.<ParameterDefaults> 엘리먼트를 사용하면, 매개변수를 명령줄에서 지정하지 않은 경우라고 할지라도, 파일에서 해당 매개변수를 값을 사용할 수 있습니다.
파일 문서화 구성 파일 자체에 대한 정보를 문서화하기 위해 파일에 <Version> 엘리먼트와 <History> 엘리먼트를 사용합니다. 구성파일에 대한 문서정보를 포함하고 있으면, 솔루션을 좀 더 쉽게 관리할 수 있고, 유지보수성을 향상시킬 수 있습니다.
인스턴스 설정 구성파일에는 인스턴스 명칭을 지정하기 위한 <InstanceName> 엘리먼트와 인스턴스 데이터베이스를 생성할 SQL Server 인스턴스를 지정하기 위한 <SqlServerSystem> 엘리먼트가 반드시 포함되어야 합니다. 필요에 따라 인스턴스 데이터베이스를 생성할 때, 데이터베이스 파일을 정의할 정보를 지정하기 위해 <Database> 엘리먼트를 포함시킬 수 있습니다. <Database> 엘리먼트가 생성되면, 인스턴스 데이터베이스는 기존 SQL Server 데이터베이스와 같이, model 데이터베이스를 복사하여 생성합니다.
어플리케이션 설정 인스턴스에 소속된 어플리케이션을 지정하기 위해서 <Applications> 엘리먼트를 사용합니다. <Applications> 엘리먼트 내에 <Application> 엘리먼트를 사용하여 개별 어플리케이션을 정보를 설정하며, 각 어플리케이션에 대해서는 어플리케이션명, 디렉토리, 어플리케이션 정의 파일, 어플리케이션 정의 파일 로 전달할 매개변수를 지정하기 위해, <ApplicationName> ,<BaseDirectoryPath> , <ApplicationDefinitionFilePath> , <Parameters> 엘리먼트를 사용합니다.
프로토콜 설정 <Protocols> 엘리먼트는 <Protocol> 엘리먼트의 컬렉션을 포함 하기 위해서 사용됩니다. 각 <Protocol> 엘리먼트에는 사용자정의 프로토콜에 대한 정보가 포함됩니다. 표준 프로토콜(파일, HTTP, SMTP)을 사용하지 않는 경우에만 지정합니다.
배달채널 인스턴스가 사용할 수 있는 배달채널은 <DeliveryChannels> 엘리먼트로 정의합니다. 각 배달채널은 <DeliveryChannel> 엘리먼트에 정의되며, 배달채널명, 사용할 프로토콜, 프로토콜에서 필요로 하는 인수 (SMTP의 경우, 서버명 등)가 정의에 포함됩니다.
암호화 인수 인스턴스 데이터베이스와 어플리케이션 데이터베이스에 포함된 중요 데이터를 암호화하기 위해, <EncryptArguments> 엘리먼트를 사용합니다.

어플리케이션 정의 파일(ADF)
Notification Service 솔루션에 포함된 각 어플리케이션에 대해 어플리케이션 정의 파일을 생성해야 합니다. 구성 파일과 함께, 필요한 요구조건을 충족하는 어플리케이션을 생성하기 위해서, 어플리케이션 정의 파일의 각 항목에 대해서 이해할 필요가 있습니다.
구성요소 설명
매개변수 구성정보 파일에 지정한 매개변수가 ADF 파일로 전달되며, 퍼센 트(%)문자안에 매개변수명을 지정하여 참조할 수 있습니다. 구성정보 파일와 같이, <ParameterDefaults> 엘리먼트를 사용하여 매개변수의 기본값을 설정할 수 있습니다.
파일문서화 구성정보 파일와 같이, <Version> 엘리먼트와 <History> 엘리먼트를 사용하여 ADF의 문서 정보를 지정할 수 있습니다.
인스턴스 설정 어플리케이션 데이터베이스에 대한 데이터베이스 파일의 정보를 커스터마이징해야 한다면, <Database> 엘리먼트에 포함된 파일 정보를 설정할 수 있습니다.
이벤트클래스 데이터베이스안에 이벤트 테이블과 뷰를 정의하기 위해서 <EventClasses> 엘리먼트에 <EventClass> 엘리먼트를 포함시킬 수 있습니다. 각 이벤트 크래스에는 다음과 같은 엘리먼트가 포함될 수 있습니다.
    <EventClassName>
    <Schema>
    <FileGroup>
    <IndexSqlSchema>
    <ChronicleRule>
    <Chronicles>
구독 클래스 <SubscriptionClasses> 엘리먼트에는 각 구독 테이블 및 뷰에 대한 정보를 포함하고 있는 <SubscriptionClass> 엘리먼트가 포함됩니다.<SubscriptionClass> 엘리먼트에는 다음과 같은 엘리먼트가 포함될 수 있습니다.
    <SubscriptionClassName>
    <Schema>
    <FileGroup>
    <IndexSqlSchema>
    <EventRules>
    <ScheduledRules>
    <Chronicles>
알림 클래스 Notification 테이블과 뷰는 <NotificationClass> 엘리먼트의 컬렉션안에 정의되며, <NotificationClass>엘리먼트에는, 다음과 같은 엘리먼트가 포함될 수 있습니다.
    <NotificationClassName>
    <Schema>
    <FileGroup>
    <ContentFormatter>
    <DigestDelivery>
    <MulticastDelivery>
    <NotificationBatchSize>
    <Protocols>
    <ExpirationAge>
공급자 설정 호스팅된 독립 이벤트 공급자 설정을 <Providers> 엘리먼트에 지정합니다.
생성자 설정 생성자 역할을 수행할 서버 이름 등과 같은, 생성자 설정을 <Generator> 엘리먼트에 지정합니다.
배포자 설정 배포자 관련 정보는 <Distributor> 엘리먼트에 지정합니다.
어플리케이션
실행 설정
<ApplicationExecutionSettings> 엘리먼트를 사용하여, 퀀텀기간, 기간이 경과된 데이터에 대한 보존기간 등과 같은 어플리케이션 실행 설정을 통제할 수 있습니다. <Application ExecutionSettings> 엘리먼트를 지정하지 않으면, 시스템 기본 값이 사용됩니다.


SQL Server Management Studio 사용하여 Notification Service 어플리케이션 개발
구성정보 파일과 ADF 파일을 사용하여, 인스턴스와 어플리케이션에 대한 정의를 완료한 다음, 인스턴스를 생성하고, 등록하고, 활성화하고, 시작하는 절차를 수행해야 합니다. Notification Service 솔루션을 설정하는 각 단계를 SQL Server Management Studio를 사용하여 수행할 수 있습니다.

1 단계. 인스턴스 생성
Notification Service 인스턴스와 어플리케이션을 생성하는 작업을 수행해야 합니다. 인스턴스 생성 작업을 통해, Notification Service 솔루션을 위한 SQL Server 데이터베이스 생성됩니다. SQL Server Management Studio에서는 다음의 절차를 수행하여 인스턴스 생성작업을 수행할 수 있습니다.

1. 개체 탐색기에서, Notification Services 노드에서 오른쪽 클릭한 다음 새 Notification Services 인스턴스 생성을 클릭합니다.
2. 인스턴스에 대한 구성정보 파일을 지정합니다.
3. 구성정보 파일에 정의된 각 매개변수의 값을 할당합니다.
4. 인스턴스가 생성된 다음, 활성화될 수 있도록 설정할 수 있습니다.
5. 확인을 클릭하여 인스턴스를 생성합니다.
6. 인스턴스 생성작업이 완료되면, 닫기를 클릭합니다.

2 단계. 인스턴스 등록
인스턴스를 생성한 다음, 인스턴스를 등록하고, 인스턴스를 관리하기 위해서 사용할 Windows 서비스를 정의해야 합니다. SQL Server Management Studio에서는 다음의 절차를 수행하여 인스턴스 등록작업을 수행할 수 있습니다.

1. 개체 탐색기에서, 등록할 Notification Services 인스턴스를 오른쪽 클릭한 다음 작업 옵션에서 인스턴스 등록을 클릭합니다.
2. Windows 서비스에 대한 보안신임장을 지정한 다음, 확인을 클릭합니다.
3. 등록작업이 완료되면, 닫기를 클릭합니다.

3 단계. 인스턴스 활성화
Notification Services 인스턴스를 사용하기 전에, 먼저 반드시 활성화해야 합니다. SQL Server Management Studio에서는 다음의 절차를 수행하여 인스턴스 활성화작업을 수행할 수 있습니다.

1. 개체 탐색기에서, 활성화할 Notification Services 인스턴스를 오른쪽 클릭한 다음, 활성화 옵션을 클릭합니다.
2. 해당 인스턴스를 활성화할 것인지 여부를 묻는 창이 나타나면, 확인을 클릭합니다.

4 단계. 인스턴스 시작
인스턴스를 활성화한 다음, Windows 서비스에 연결된 인스턴스를 시작할 수 있습니다.
SQL Server Management Studio에서는 다음의 절차를 수행하여 인스턴스를 시작할 수 있습니다.

1. 개체 탐색기에서 시작할 Notification Services 인스턴스를 오른쪽 클릭한 다음, 시작을 클릭합니다.
2. 해당 인스턴스를 시작할 것인지 여부를 묻는 창이 나타나면, 확인을 클릭합니다.
3. 인스턴스가 정상적으로 시작되면, 닫기를 클릭합니다.

NCControl 유틸리티 사용방법

1 단계. 인스턴스와 어플리케이션 생성
NSControl 유틸리티의 Create 명령을 사용하여, 인스턴스 데이터베이스와 어플리케이션 데이터베이스를 생성할 수 있습니다. NSControl 유틸리티의 Create 명령에 대한 구문은 다음과 같습니다.
nscontrol create
[-help] |
-in configuration_filename
[-sqlusername“ sql_login”-sqlpassword“ password”]
[-argumentkey“ cryptographic_key”]
[parameter_name=value [,...n] ]
[-nologo]

NSControls 유틸리티의 Create 명령에 대한 매개변수는 다음과 같습니다.

    help: CREATE 명령에 대한 구문정보를 표시합니다.
    in: 인스턴스에 대한 구성 정보 파일의 경로를 지정합니다.
    sqlusername: SQL Server 인증을 사용하는 경우, SQL Server 로그인을 지정합니다.
    sqlpassword: SQL Server 로그인에 대한 비밀번호를 지정합니다.
    argumentkey: 암호화 인수에서 사용할 키를 지정합니다.
                              (구성정보 파일내의 <EncryptArguments> 엘리먼트에서 사용).
    parameter_name: 구성정보파일로 전달할 여러 개의 매개변수 명칭과 값 쌍을 지정 합니다.
    nologo: CREATE 명령이 실행된 다음, 제품 버전에 대한 요약정보를 표시하지 않기 위해 지정합
                    니다.

2 단계. 인스턴스 등록
서비스를 등록하기 위해서는, 다음과 같은 구문으로, NSControl 유틸리티의 Register 명령을 실행합니다.

[따라하기] 인스턴스 등록
nscontrol register
[-help] |
-name instance_name
[server“ sql_server_instance_name”]
[-service
[-serviceusername“ account”-servicepassword“ password”]
[-sqlusername“ sql_login”-sqlpassword“ password”]
[-argumentkey“ cryptographic_key”]
[-nologo]
]

NSControls 유틸리티의 Register 명령에 대한 매개변수는 다음과 같습니다.

   ㆍ help: Register 명령에 대한 구문정보를 표시합니다.
    name: 등록할 인스턴스 이름
    server: 데이터베이스를 생성할 SQL Server 인스턴스
    service: Windows 서비스가 생성되어야 한다는 것을 지정합니다.
    serviceusername: 서비스에 대한 Windows 사용자 계정
    servicepassword: 서비스 계정에 대한 비밀번호
    sqlusername: SQL Server 인증을 사용하는 경우, 서비스에서 사용할 SQL Server 로그인
    sqlpassword: SQL Server 로그인에 대한 비밀번호.
    argumentkey: 암호화 인수에서 사용할 키
                             (구성정보 파일의 <EncryptArguments>엘리먼트에서 사용).
    nologo: 명령이 실행된 다음 제품 정보에 대한 정보를 표시하지 않기 위해서 지정합니다.

3 단계.인스턴스 활성화
기본 값으로 새로 추가된 인스턴스와 어플리케이션은 비활성화된 상태입니다. 인스턴스에 포함된 구성요소를 활성화하기 위해서는, NSControl 유틸리티의 Enable 명령을 사용해야 합니다. Enable 명령에 대한 구문은 다음과 같습니다.
nscontrol enable
[-help] |
-name instance_name
[-component [...n]]
[-server“ database_server_name”]
[-application“ application_name”]
[-sqlusername“ sql_login”-sqlpassword“ password”]
[-nologo]

NSControls 유틸리티의 Enable 명령에 대한 매개변수는 다음과 같습니다.

    help: Enable 명령에 대한 구문정보를 표시합니다.
    name: 활성화할 인스턴스의 이름
    component: 활성화할 컴포넌트의 이름. 컴포넌트에는 배포자, 이벤트, 생성자, 구독, 구독자 등
                           이 포함될 수 있습니다.
    server: SQL Server 인스턴스 이름
    application: 활성화할 특정 어플리케이션의 이름
    sqlusername: SQL Server 인증을 사용하는 경우, 사용할 SQL Server 로그인
    sqlpassword: SQL Server 로그인의 비밀번호
    nologo: 명령이 실행된 다음, 제품 버전 정보를 표시하지 않기 위해 지정합니다.

4 단계.인스턴스 서비스 통제
인스턴스에 대한 Windows 서비스는 다른 Windows 서비스와 동일한 방법으로 관리됩니다.
서비스 MMC 스냅인을 사용하여, 인스턴스 서비스를 시작하거나 중지할 수 있고, Windows가 시작할 때 자동으로 시작할 수 있도록 구성할 수 있으며, net start 명령이나 net stop 명령을 사용하여 인스턴스 서비스를 통제할 수 있습니다.

구독 관리 어플리케이션
사용자가 알림을 구독할 수 있도록 하기 위해, 구독 관리 어플리케이션을 구현해야 합니다.

구독 관리 개체
구독 관리 어플리케이션을 개발하기 위해서, 구독 관리 개체 API를 사용합니다. 구독 관리 개체 API 안에 포함된 관리되는 클래스를 사용하여, 구독자 데이터를 Notification Service에 전달하기 위한 .NET 기반 구독 관리 어플리케이션을 개발할 수 있습니다. 또한, COM 상호 운영성 래퍼 클래스를 사용하여, COM 기반 코드로 구독 관리 어플리케이션을 개발할 수 있습니다. 구독 관리 개체 API에는 다음과 같은 Microsoft.SqlServer.NotificationServices 네임 스페이스 내의 클래스가 포함됩니다.

    NSInstance: Notification Services 인스턴스를 표현.
    NSApplication: Notification Services 어플리케이션을 표현.
    Subscriber: 특정 인스턴스의 구독자를 표현.
    SubscriberDevice: 지정된 인스턴스의 구독자 디바이스를 표현
    Subscription: 지정된 어플리케이션내의 구독을 표현

NSInstance 클래스
Notification Service 인스턴스에 연결하기 위해서, NSInstance 클래스를 사용합니다.
NSInstance 클래스 생성자에 인스턴스명을 전달하면 인스턴스를 생성할 수 있습니다. 또는 인스턴스 명을 지정하고, Initialize 메서드를 호출하여 인스턴스를 생성할 수 있습니다.
다음 예제는 Visual Basic.NET 코드 형식으로 생성자에 인스턴스명을 전달하는 방법을 나타냅니다.
Dim inst As New NSInstance“( AWInstance”)

또는 다음과 같이, 인스턴스명을 지정하여 initialize 메서드를 호출할 수도 있습니다.
Dim inst As New NSInstance
inst.Initialize “( AWInstance”)

NSApplication 클래스
특정 어플리케이션(예를 들어, 구독 생성)에 연결하기 위해서, NSApplication 클래스를 사용 합니다. NSApplication 클래스를 사용하기 위해서는, 먼저 해당 어플리케이션을 호스팅하고 있는 인스턴스를 표현하는 NSInstance 개체와 어플리케이션명을 전달해야 합니다. NSInstance 클래스와 동일하게 인스턴스 개체와 어플리케이션명을 지정하고, Initialize 메서드를 호출하여 NSApplication 클래스의 인스턴스를 생성할 수도 있습니다.

다음 예제는 NSApplication 클래스의 인스턴스를 생성하는 방법을 나타냅니다.

[따라하기] NSApplication 생성
Dim app As New NSApplication(inst,“ ProductApp”)
Subscriber 클래스
인스턴스 데이터베이스에 새 구독자를 추가하기 위해서, Subscriber 클래스를 사용합니다. 구독자를 추가하기를 원하는 인스턴스를 지정하여, Subscriber 클래스에 대한 인스턴스를 생성한 다음(생성자를 호출하거나, Initialize 메서드를 사용), SubscriberId 속성(데이터베이스 내에서 해당 구독자를 식별할 수 있도록 유일한 값을 지정)을 설정한 다음, Add 메서드를 호출합니다.
NSInstance 클래스와 동일하게 인스턴스 개체와 어플리케이션명을 지정하고, Initialize 메서드를 호출하여 NSApplication 클래스의 인스턴스를 생성할 수도 있습니다.

[따라하기] 구독자 생성
Dim Subr As New Subscriber(inst)
Subr.SubscriberId =“ Bill”
Subr.Add()
Subscriber Device 클래스
SubscriberDevice 클래스는 인스턴스 데이터베이스에 새 구독자 디바이스를 추가하기 위해서 사용합니다. 구독자 디바이스를 추가하기를 원하는 인스턴스와 SubscriberId 속성을 유효한 구독자로 지정하여, SubscriberDevice 클래스의 인스턴스를 생성합니다.
그 다음, SubscriberDevice개체에 DeviceTypeName, DeviceAddress, DeviceName, DeliveryChannelName 속성 정보를 설정합니다.

[따라하기] 구독자 디바이스 생성
Dim SubDev As New SubscriberDevice(inst)
SubDev.SubscriberId =“ Bill”
SubDev.DeviceTypeName =“ SMTP”
SubDev.DeviceAddress =“ Bill@adventure-works.com”
SubDev.DeviceName =“ EmailDevice”
SubDev.DeliveryChannelName =“ SMTPChannel”
SubDev.Add( )

Subscription 클래스
어플리케이션 데이터베이스에 구독을 추가하기 위해, Subscription 클래스를 사용합니다. Subscription 클래스의 인스턴스를 생성하기 위해, 구독을 추가하기를 원하는 어플리케이션을 표현하기 위한 NSApplication 개체와, 구독명(어플리케이션내의 구독 뷰의 이름과 일치되어야 함)을 지정해야 합니다. 그 다음, SubscriberId 속성을 설정하고, SetFieldValue 메서드를 사용하여, DeviceNaem 필드와 SubscriberLocale 필드, 사용자정의 필드의 값을 설정합니다.

[따라하기] 구독자 생성
Dim Subn As New Subscription(app,“ NewProductSub”)
Subn.SubscriberId =“ Bill”
Subn.SetFieldValue“( DeviceName”,“ EmailDevice”)
Subn.SetFieldValue“( SubscriberLocale”,“ en-us”)
Subn.SetFieldValue“( CategoryToMonitor”, 1)
Subn.Add( )

이벤트 공급자
이벤트 공급자는 어플리케이션 데이터베이스에 이벤트를 전달합니다. 비즈니스 요구사항을 충족시키는 솔루션을 개발하기 위해서 이벤트 공급자를 구현하기 위한 다양한 옵션에 대해 알아두어야 합니다.

항목 설명
표준 이벤트 공급자 Notification Service에는 두 가지 표준 이벤트 공급자가 포함되어 있습니다.

   FileSystemWatcher 이벤트 공급자는 파일 시스템 위치를 모니터링하며,
      지정된 XML 파일로부터 이벤트 정보를 적재합니다.
   SQL Server 이벤트 공급자는 주기적으로 SQL Server 데이터베이스내
      의 테이블을 조회하여, 어플리케이션 데이터베이스내의 이벤트 테이블에
      데이터를 저장합니다.
사용자정의
이벤트 공급자
Notification Service에서 제공하는 네 가지 이벤트 API를 중 하나를 사용하여 사용자정의 이벤트 공급자를 생성할 수 있습니다.

   관리되는 이벤트 API. 관리되는 이벤트 API에서는 이벤트 정보를 전달
      하기 위한 .NET 클래스를 제공합니다.
   COM 이벤트 API. COM 이벤트 API에서는 관리되는 클래스와 COM
      코드의 상호운영성을 보장하기 위한 래퍼클래스를 제공합니다.
   XML 이벤트 API. XML 이벤트 API에서는 어플리케이션에 대한 이벤트
      데이터를 포함하고 있는 XML 문서를 전달하기 위한 EventLoader 라는
      관리되는 클래스를 제공합니다. XML 이벤트 API에는 데이터베이스에
      존재하는 이벤트 테이블과 XML 문서의 엘리먼트를 매핑하기 위한 XML
      스키마가 제공되어야 합니다.
   SQL Server 이벤트 API. SQL Server 이벤트 API는 이벤트 정보를 배치
      작업으로 전달하기 위한 저장 프로시저로 구성됩니다.
호스팅된 이벤트 공급자와 독립 이벤트 공급자 이벤트 공급자는 IEventProvider 인터페이스나 IScheduledEventProvider 인터페이스를 사용하여 Notification Service 프로세스에 호스팅될 수 있으며, ADF 파일 내에 <HostedProvider> 엘리먼트내에 해당 이벤트 공급자를
지정합니다. 호스팅된 이벤트 공급자는 Notification Service와 함께 시작되고 중단되며, Notification Service의 스케줄러를 사용할 수 있습니다. 독립 이벤트 공급자는 Notification Service 프로세스와 독립적으로 실행되며, ADF 파일내에 <NonHostedProvice>엘리먼트내에 해당 이벤트 공급를 지정합니다. 독립 이벤트 공급자는 Notification Service와 별도로 통제할 수 있습니다.
[출처] DBGuide.net