Service Broker의 역할

Service Broker를 통해 개발자는 독립적인 여러 구성 요소가 함께 작동하여 하나의 태스크를 완수할 수 있도록 느슨한 방식으로 연결된 비동기 응용 프로그램을 쉽게 구축할 수 있습니다. 이러한 응용 프로그램 구성 요소는 태스크를 완료하는 데 필요한 정보가 포함된 메시지를 서로 교환합니다. 이 항목에서는 Service Broker의 다음 기능에 대해 설명합니다.

  • 대화

  • 메시지 순서 지정 및 조정

  • 트랜잭션 비동기 프로그래밍

  • 느슨하게 연결된 응용 프로그램에 대한 지원

  • Service Broker 구성 요소

대화

Service Broker는 메시지를 보내고 받는 기본적인 기능을 기반으로 설계되었습니다. 각 메시지는 대화의 일부이며 각 대화는 안정적이고 지속적인 통신 채널입니다. 각 메시지와 대화에는 개발자가 안정적인 응용 프로그램을 작성할 수 있도록 Service Broker에서 적용하는 특정 유형이 있습니다.

새로운 Transact-SQL 문을 사용하면 응용 프로그램에서 이러한 메시지를 안정적으로 보내고 받을 수 있습니다. 응용 프로그램에서는 관련된 태스크 집합에 대한 이름인 서비스에 메시지를 보내고 내부 테이블 보기인 큐로부터 메시지를 받습니다.

같은 태스크에 대한 메시지는 같은 대화에 속합니다. 각 대화 내에서 Service Broker는 응용 프로그램이 모든 메시지를 각각 한 번씩만 받도록 합니다. 이때 메시지는 전송된 순서대로 받습니다. Service Broker의 장점에 설명된 대로 서비스를 구현하는 프로그램에서는 대화 그룹에서 동일한 서비스에 대해 관련된 대화를 연결할 수 있습니다.

인증서 기반 보안을 통해 중요한 메시지를 보호하고 서비스에 대한 액세스를 제어할 수 있습니다. 예를 들어 Service Broker를 우편 서비스라고 생각해 볼 수 있습니다. 멀리 있는 동료와 대화를 나누려면 우편 서비스를 통해 편지를 주고받으면 됩니다. 우편 서비스는 편지를 분류하고 배달합니다. 우편함에서 편지를 찾아 읽고 답장을 써서 새로 편지를 보내는 과정이 대화가 끝날 때까지 양쪽에서 이루어집니다. 편지 배달은 비동기적으로 이루어지므로 배달되는 동안 두 사람 모두 다른 태스크를 처리할 수 있습니다.

우편 서비스를 통해 메일을 교환하는 두 사용자

프로그램들은 다른 프로그램과의 비동기 대화를 지원하기 위해 Service Broker를 우편 서비스처럼 사용합니다. Service Broker 메시지는 편지와 같고 Service Broker 서비스는 우체국에서 편지를 배달하는 주소입니다. 큐는 배달된 편지가 보관되는 우편함입니다. 응용 프로그램은 메시지를 받고 메시지에 반응하고 응답을 보냅니다.

한 응용 프로그램이 메시지를 Service Broker 서비스로 보낼 때 이 응용 프로그램은 대화 상대인 응용 프로그램의 구현 세부 사항을 알지 못합니다. 따라서 수신 응용 프로그램은 전송 응용 프로그램에 영향을 주지 않으면서 동적으로 새 코드로 다시 구성하거나 바꿀 수 있습니다. 수신 응용 프로그램이 일시적으로 종료될 수도 있는데, 이 경우 Service Broker는 수신 응용 프로그램이 다시 시작될 때까지 큐에 새 메시지를 추가합니다.

메시지 순서 지정 및 조정

Service Broker는 일반적인 데이터베이스 프로그래밍 기술인 큐를 다음과 같이 중요한 두 가지 면에서 일반 제품과 다르게 처리합니다.

  • Service Broker 큐는 데이터베이스에 통합됩니다.

  • 관련 메시지를 조정하고 순서를 지정합니다.

큐가 통합된다는 것은 일반 데이터베이스 유지 관리 및 운영에 Service Broker도 포함된다는 의미입니다. 일반적으로 Service Broker에 대해서는 관리자가 일상적으로 수행해야 할 유지 관리 태스크가 없습니다.

Service Broker 프레임워크는 메시지를 보내고 받기 위한 간단한 Service Broker 인터페이스를 제공하며 메시지 배달과 처리를 보장하는 강력한 기능 집합도 결합되었습니다. Service Broker는 프로그램에서 각 메시지를 하나의 대화에서 한 번씩만 받도록 보장해 줍니다. 이때 메시지는 큐에 들어온 순서가 아니라 전송된 순서대로 받습니다. 큐 기능이 있는 일반 제품에서는 메시지를 큐에 들어온 순서대로 제공하므로 응용 프로그램에서 메시지의 순서와 그룹화를 결정해야 합니다. Service Broker에서는 두 개의 큐 판독기가 같은 대화 또는 관련된 대화 그룹의 메시지를 동시에 처리하지 못하도록 합니다.

각 Service Broker 대화에는 양측이 있습니다. 대화를 시작하는 측을 시작자라고 하고 다른 측을 대상이라고 합니다. 따라서 각 측에는 시작자 서비스와 대상 서비스가 있습니다. 각 서비스에는 연관된 메시지 큐가 있습니다.

다음은 일반적인 대화에서의 메시지 교환을 보여 줍니다.

  • 시작자에서:

    • 프로그램이 대화를 시작합니다.

    • 프로그램이 태스크 수행에 필요한 데이터가 포함된 메시지를 작성합니다.

    • 프로그램이 메시지를 대상 서비스로 보냅니다.

  • 대상에서:

    • 메시지가 대상 서비스와 관련된 큐에 배치됩니다.

    • 응용 프로그램이 큐에서 메시지를 받고 작업을 수행합니다.

    • 프로그램이 메시지를 시작자 서비스에 보내 응답합니다.

  • 시작자에서:

    • 응답 메시지가 시작자 서비스와 관련된 큐에 배치됩니다.

    • 프로그램이 응답을 받아 처리합니다.

이 주기는 대상으로 보내는 요청이 더 이상 없어서 시작자가 대화를 종료할 때까지 반복됩니다.

Service Broker는 각 대화에 대한 우선 순위를 1(낮음) - 10(높음) 범위에서 설정할 수 있도록 지원합니다. 이 경우 우선 순위가 낮은 작업은 우선 순위가 높은 작업을 차단할 수 없습니다. Service Broker 시스템은 다양한 수준의 서비스를 제공하도록 구성할 수 있습니다. 자세한 내용은 대화 우선 순위를 참조하십시오.

Service Broker는 메시징 응용 프로그램 작성과 관련하여 가장 까다로운 태스크를 처리합니다. 이러한 까다로운 태스크에는 메시지 조정, 안정적인 메시지 배달, 잠금 및 큐 판독기 시작 등이 해당합니다. 따라서 데이터베이스 개발자는 비즈니스 문제를 해결하는 데 집중할 수 있습니다.

트랜잭션 비동기 프로그래밍

Service Broker 인프라에서는 응용 프로그램 간의 메시지 배달이 트랜잭션 및 비동기 방식으로 수행됩니다. Service Broker 메시징은 트랜잭션이므로 트랜잭션이 롤백될 경우 해당 트랜잭션 내의 모든 Service Broker 작업도 롤백됩니다. 이러한 작업에는 보내기 및 받기 작업이 해당됩니다. 비동기 배달에서는 응용 프로그램이 계속 실행되는 동안 데이터베이스 엔진이 배달을 처리합니다. 확장성을 높이기 위해 Service Broker는 프로그램에서 수행할 유용한 작업이 있을 경우 큐를 처리하는 프로그램을 자동으로 시작하는 메커니즘을 제공합니다. 자세한 내용은 Service Broker 활성화을 참조하십시오.

비동기 프로그래밍을 통해 개발자는 큐를 사용하는 응용 프로그램을 쉽게 작성할 수 있습니다. 대부분의 데이터베이스 응용 프로그램에는 리소스가 허용될 때 수행할 작업에 대한 큐 역할을 하는 테이블이 포함되어 있습니다. 큐는 데이터베이스 응용 프로그램과 관련하여 다음 두 가지 이점을 갖습니다.

  • 작업 요청이 큐에 배치되면 응용 프로그램은 대화형 사용자에게 즉시 응답할 수 있습니다. 응용 프로그램은 응답하기 전에 요청과 관련된 모든 작업이 완료될 때까지 기다릴 필요가 없습니다. 리소스가 사용 가능해지면 큐에 대기 중인 요청이 처리됩니다. 따라서 데이터베이스는 대화형 사용자에 대해 응답할 수 있는 상태를 유지하면서 사용 가능한 리소스를 효율적으로 사용할 수 있습니다.

  • 경우에 따라 한 개의 요청과 관련된 작업을 여러 개의 작업 단위로 구분하여 별도의 트랜잭션으로 처리할 수 있습니다. 이 경우 데이터베이스 응용 프로그램은 요청을 큐에 배치하여 각 작업 단위를 시작할 수 있습니다. Service Broker에서는 이러한 개념을 확장하여 응용 프로그램이 작업을 별도의 컴퓨터에 있는 Service Broker의 여러 인스턴스에 분산시킬 수 있도록 합니다.

응용 프로그램을 큐의 시퀀스와 프로세스 항목으로 올바르게 코딩하는 것은 간단한 작업이 아닙니다. 개발자들은 데이터베이스 엔진에 구축된 Service Broker 기능을 사용하여 데이터베이스 큐를 성공적으로 구현하는 데 필요한 코딩을 쉽게 수행할 수 있습니다.

느슨하게 연결된 응용 프로그램에 대한 지원

Service Broker는 느슨하게 연결된 응용 프로그램을 지원합니다. 느슨하게 연결된 응용 프로그램은 서로 독립적으로 메시지를 주고받는 여러 프로그램으로 구성됩니다. 이러한 응용 프로그램들은 교환되는 메시지에 대해 동일한 정의를 가져야 하며 서비스 간의 상호 작용에 대해 전체적으로 동일한 구조를 정의해야 합니다. 그러나 동시에 실행되거나 같은 SQL Server 인스턴스 내에서 실행되거나 구현 정보를 공유해야 할 필요는 없습니다. 응용 프로그램이 대화의 다른 참가자에 대한 물리적 위치나 구현을 알 필요는 없습니다.

Service Broker 구성 요소

Service Broker는 다음 세 가지 유형의 구성 요소를 갖습니다.

  • 대화 구성 요소 - 대화 그룹, 대화 및 메시지는 Service Broker 응용 프로그램의 런타임 구조를 구성합니다. 응용 프로그램은 메시지를 대화의 일부로 교환합니다. 각 대화는 하나의 대화 그룹에 포함되며 한 개의 대화 그룹에는 여러 개의 대화가 포함될 수 있습니다. 각 Service Broker 대화는 둘 사이의 통신입니다. 즉 정확히 두 명의 참가자가 메시지를 주고 받습니다. 대화 구성 요소에 대한 자세한 내용은 대화(Conversation) 아키텍처를 참조하십시오.

  • 서비스 정의 구성 요소 - 이 구성 요소는 응용 프로그램에서 사용하는 대화의 기본 구조를 지정하는 디자인 타임 구성 요소입니다. 응용 프로그램에 대한 메시지 유형, 대화 흐름, 데이터베이스 저장소 등을 정의합니다. 서비스 정의 구성 요소에 대한 자세한 내용은 서비스 아키텍처를 참조하십시오.

  • 네트워킹 및 보안 구성 요소 - 이 구성 요소는 데이터베이스 엔진의 인스턴스 간에 메시지를 교환하는 데 사용되는 인프라를 정의합니다. 변화하는 환경을 데이터베이스 관리자가 쉽게 관리할 수 있도록 Service Broker에서는 관리자가 응용 프로그램 코드와 독립적으로 이러한 구성 요소를 구성할 수 있습니다. 네트워킹 및 보안 구성 요소에 대한 자세한 내용은 네트워킹 및 원격 보안을 참조하십시오.

서비스 정의 구성 요소, 네트워킹 구성 요소 및 보안 구성 요소는 데이터베이스 및 SQL Server 인스턴스에 대한 메타데이터의 일부입니다. 대화 그룹, 대화 및 메시지는 데이터베이스에 포함된 데이터의 일부입니다.