다음을 통해 공유


2단원: 시작자 데이터베이스 만들기

이 단원에서는 이 자습서에 사용되는 시작자 데이터베이스와 모든 시작자 Service Broker 개체를 만드는 방법을 배웁니다. 이러한 단계는 데이터베이스 엔진의 시작자 인스턴스와 동일한 컴퓨터에서 실행 중인 Management Studio에서 실행해야 합니다.

절차

Service Broker 끝점 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. 그런 다음 실행하여 이 데이터베이스 엔진 인스턴스에 대한 Service Broker 끝점을 만듭니다. Service Broker 끝점은 Service Broker 메시지가 전송되는 네트워크 주소를 지정합니다. 이 끝점은 Service Broker 기본값인 TCP 포트 4022를 사용하며 데이터베이스 엔진의 원격 인스턴스가 Windows 인증 연결을 사용하여 메시지를 전송하도록 지정합니다.

    Windows 인증은 두 컴퓨터가 동일한 도메인이나 트러스트된 도메인에 있을 때 작동합니다. 컴퓨터가 트러스트된 도메인에 있으면 끝점에 인증서 보안을 사용해야 합니다. 자세한 내용은 방법: Service Broker 전송 보안에 대한 인증서 만들기(Transact-SQL)를 참조하십시오.

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.endpoints
               WHERE name = N'InstInitiatorEndpoint')
         DROP ENDPOINT InstInitiatorEndpoint;
    GO
    CREATE ENDPOINT InstInitiatorEndpoint
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 4022 )
    FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
    GO
    

시작자 데이터베이스, 마스터 키 및 사용자 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. CREATE MASTER KEY 문에서 암호를 변경합니다. 그런 다음 이 코드를 실행하여 이 자습서에 사용되는 대상 데이터베이스를 만듭니다. 기본적으로 새 데이터베이스에는 ENABLE_BROKER 옵션이 설정되어 있습니다. 이 코드는 암호화와 원격 연결을 지원하는 데 사용할 마스터 키와 사용자도 만듭니다.

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.databases
               WHERE name = N'InstInitiatorDB')
         DROP DATABASE InstInitiatorDB;
    GO
    CREATE DATABASE InstInitiatorDB;
    GO
    USE InstInitiatorDB;
    GO
    
    CREATE MASTER KEY
           ENCRYPTION BY PASSWORD = N'<EnterStrongPassword2Here>';
    GO
    CREATE USER InitiatorUser WITHOUT LOGIN;
    GO
    

시작자 인증서 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. BACKUP CERTIFICATE 문에 지정된 파일 이름을 시스템에 있는 폴더를 나타내도록 변경합니다. 그런 다음 이 코드를 실행하여 메시지를 암호화하는 데 사용되는 시작자 인증서를 만듭니다. 여기서 지정하는 폴더에는 Windows 계정이 아닌 계정과 데이터베이스 엔진 인스턴스가 실행 중인 Windows 계정에서 액세스하지 못하게 하는 권한이 설정되어 있어야 합니다. 3단원의 경우 InstInitiatorCertificate.cer 파일을 대상 인스턴스에서 액세스할 수 있는 폴더에 수동으로 복사해야 합니다.

    CREATE CERTIFICATE InstInitiatorCertificate
         AUTHORIZATION InitiatorUser
         WITH SUBJECT = N'Initiator Certificate',
              EXPIRY_DATE = N'12/31/2010';
    
    BACKUP CERTIFICATE InstInitiatorCertificate
      TO FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer';
    GO
    

메시지 유형 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. 그런 다음 실행하여 대화에 대한 메시지 유형을 만듭니다. 여기서 지정하는 메시지 유형 이름과 속성은 이전 단원의 InstTargetDB에서 만든 메시지 유형과 동일해야 합니다.

    CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage]
           VALIDATION = WELL_FORMED_XML;
    CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
           VALIDATION = WELL_FORMED_XML;
    GO
    

계약 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. 그런 다음 실행하여 대화에 대한 계약을 만듭니다. 여기서 지정하는 계약 이름과 속성은 다음 단원의 InstInitiatorDB에서 만들 계약과 동일해야 합니다.

    CREATE CONTRACT [//BothDB/2InstSample/SimpleContract]
          ([//BothDB/2InstSample/RequestMessage]
             SENT BY INITIATOR,
           [//BothDB/2InstSample/ReplyMessage]
             SENT BY TARGET
          );
    GO
    

시작자 큐 및 서비스 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. 그런 다음 실행하여 대상에 사용되는 큐와 서비스를 만듭니다. CREATE SERVICE 문은 서비스를 InstInitiatorQueue에 연결합니다. 따라서 서비스로 전송되는 모든 메시지는 InstInitiatorQueue에 전달됩니다. 또한 CREATE SERVICE는 앞에서 만든 //BothDB/ 2InstSample/SimpleContract를 사용하는 대화만 이 서비스를 대상 서비스로 사용할 수 있도록 지정합니다.

    CREATE QUEUE InstInitiatorQueue;
    
    CREATE SERVICE [//InstDB/2InstSample/InitiatorService]
           AUTHORIZATION InitiatorUser
           ON QUEUE InstInitiatorQueue;
    GO
    

대상 개체에 대한 참조 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. 1단원의 3단계에서 InstTargetCertficate.cer 파일을 복사한 폴더를 참조하도록 FROM FILE 절을 변경합니다. 그런 다음 이 코드를 실행하여 대상 사용자를 만들고 대상 인증서를 가져옵니다.

    CREATE USER TargetUser WITHOUT LOGIN;
    
    CREATE CERTIFICATE InstTargetCertificate 
       AUTHORIZATION TargetUser
       FROM FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer'
    GO
    

경로 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여 넣습니다. 대상 인스턴스를 실행하고 있는 컴퓨터의 이름으로 MyTargetComputer 문자열을 변경합니다. 그런 다음 이 코드를 실행하여 대상 서비스 및 시작자 서비스에 대한 경로와 TargetUser를 대상 서비스 경로에 연결하는 원격 서비스 바인딩을 만듭니다.

    다음 CREATE ROUTE 문은 대상 인스턴스에 중복된 서비스 이름이 없다고 간주합니다. 대상 인스턴스의 여러 데이터베이스에 같은 이름을 가진 서비스가 포함되어 있으면 BROKER_INSTANCE 절을 사용하여 대화를 열 데이터베이스를 지정해야 합니다.

    DECLARE @Cmd NVARCHAR(4000);
    
    SET @Cmd = N'USE InstInitiatorDB;
    CREATE ROUTE InstTargetRoute
    WITH SERVICE_NAME =
           N''//TgtDB/2InstSample/TargetService'',
         ADDRESS = N''TCP://MyTargetComputer:4022'';';
    
    EXEC (@Cmd);
    
    SET @Cmd = N'USE msdb
    CREATE ROUTE InstInitiatorRoute
    WITH SERVICE_NAME =
           N''//InstDB/2InstSample/InitiatorService'',
         ADDRESS = N''LOCAL''';
    
    EXEC (@Cmd);
    GO
    CREATE REMOTE SERVICE BINDING TargetBinding
          TO SERVICE
             N'//TgtDB/2InstSample/TargetService'
          WITH USER = TargetUser;
    
    GO
    

다음 단계

자습서에 사용할 시작자 데이터베이스를 성공적으로 만들었습니다. 이제 시작자 개체에 대한 종속성이 있는 대상 개체를 만들어 대상 데이터베이스 구성을 마칩니다. 자세한 내용은 3단원: 대상 대화 개체 완료를 참조하십시오.