Azure Service Bus란?What is Azure Service Bus?

Microsoft Azure Service Bus는 메시지 큐와 게시-구독 토픽이 있는 완전 관리형 엔터프라이즈 메시지 broker입니다.Microsoft Azure Service Bus is a fully managed enterprise message broker with message queues and publish-subscribe topics. Service Bus는 애플리케이션과 서비스를 서로 분리하는 데 사용되며, 다음과 같은 이점을 제공합니다.Service Bus is used to decouple applications and services from each other, providing the following benefits:

  • 경쟁하는 작업자 간에 작업 부하 분산Load-balancing work across competing workers
  • 서비스 및 애플리케이션 경계에서 데이터 및 제어를 안전하게 라우팅하고 전송Safely routing and transferring data and control across service and application boundaries
  • 높은 수준의 안정성이 필요한 트랜잭션 작업 조정Coordinating transactional work that requires a high-degree of reliability

개요Overview

데이터는 메시지 를 사용하여 서로 다른 애플리케이션 및 서비스간에 전송됩니다.Data is transferred between different applications and services using messages. 메시지는 메타데이터로 데코레이팅된 컨테이너이며 데이터를 포함합니다.A message is a container decorated with metadata, and contains data. 다음과 같은 일반적인 형식으로 인코딩된 정형 데이터를 포함하여 모든 종류의 정보는 데이터가 될 수 있습니다: JSON, XML, Apache Avro, 일반 텍스트 등.The data can be any kind of information, including structured data encoded with the common formats such as the following ones: JSON, XML, Apache Avro, Plain Text.

몇 가지 일반적인 메시징 시나리오는 다음과 같습니다.Some common messaging scenarios are:

  • 메시징Messaging. 주문, 저널 판매 및 구입 또는 인벤토리 이동과 같은 비즈니스 데이터를 전송합니다.Transfer business data, such as sales or purchase orders, journals, or inventory movements.

  • 애플리케이션 분리.Decouple applications. 애플리케이션 및 서비스의 안정성과 확장성을 개선합니다.Improve reliability and scalability of applications and services. 생산자와 소비자가 반드시 온라인 상태이거나 동시에 자리에 있지 않아도 됩니다.Producer and consumer don't have to be online or readily available at the same time. 부하가 평준화되므로 트래픽 급증으로 인해 서비스 요금이 과도하게 부과되는 일이 없습니다.The load is leveled such that traffic spikes don't overtax a service.

  • 부하 분산.Load Balancing. 여러 경쟁하는 소비자가 한 큐에서 동시에 읽을 수 있으며, 각 소비자는 특정 메시지에 대한 배타적 소유권을 안전하게 획득합니다.Allow for multiple competing consumers to read from a queue at the same time, each safely obtaining exclusive ownership to specific messages.

  • 토픽 및 구독.Topics and subscriptions. 사용 1: 게시자와 구독자 간에 n 관계가 있으므로, 구독자는 게시된 메시지 스트림에서 특정 메시지를 선택할 수 있습니다.Enable 1:n relationships between publishers and subscribers, allowing subscribers to select particular messages from a published message stream.

  • 트랜잭션.Transactions. 원자성 트랜잭션의 범위에서 여러 작업을 수행할 수 있습니다.Allows you to do several operations, all in the scope of an atomic transaction. 예를 들어 트랜잭션 범위에서 다음 작업을 수행할 수 있습니다.For example, the following operations can be done in the scope of a transaction.

    1. 한 큐에서 메시지를 가져옵니다.Obtain a message from one queue.
    2. 처리 결과를 하나 이상의 서로 다른 큐에 게시합니다.Post results of processing to one or more different queues.
    3. 원래 큐의 입력 메시지를 이동합니다.Move the input message from the original queue.

    입력 메시지가 성공적으로 확인되는 경우를 포함하여 성공할 때만 다운스트림 소비자에게 결과가 표시되므로, 일회성 처리 의미 체계를 허용합니다.The results become visible to downstream consumers only upon success, including the successful settlement of input message, allowing for once-only processing semantics. 이 트랜잭션 모델은 더 큰 솔루션 컨텍스트에서 보정 트랜잭션 패턴을 구현하기 위한 강력한 기반입니다.This transaction model is a robust foundation for the compensating transactions pattern in the greater solution context.

  • 메시지 세션.Message sessions. 엄격한 메시지 정렬 또는 메시지 지연이 필요한 워크플로 및 멀티플렉싱 전송의 대규모 조정을 구현합니다.Implement high-scale coordination of workflows and multiplexed transfers that require strict message ordering or message deferral.

Apache ActiveMQ와 같은 다른 메시지 broker에 익숙한 분들에게는 Service Bus의 개념이 알고 있는 지식과 비슷할 것입니다.If you're familiar with other message brokers like Apache ActiveMQ, Service Bus concepts are similar to what you know. Service Bus는 PaaS(platform-as-a-service) 제품이므로 다음 작업에 대해 신경 쓸 필요가 없다는 점이 결정적인 차이점입니다.As Service Bus is a platform-as-a-service (PaaS) offering, a key difference is that you don't need to worry about the following actions. Azure가 이러한 작업을 알아서 처리합니다.Azure takes care of those chores for you.

  • 로그 배치 및 디스크 공간 관리Placing logs and managing disk space
  • 백업 처리Handling backups
  • 운영 체제 또는 제품 패치 유지Keeping the operating systems or the products patched
  • 하드웨어 오류 해결Worrying about hardware failures
  • 예약 머신으로 장애 조치(failover)Failing over to a reserve machine

표준 및 프로토콜 규정 준수Compliance with standards and protocols

Service Bus의 기본 유선 프로토콜은 오픈 ISO/IEC 표준인 AMQP(Advanced Messaging Queueing Protocol) 1.0입니다.The primary wire protocol for Service Bus is Advanced Messaging Queueing Protocol (AMQP) 1.0, an open ISO/IEC standard. 따라서 고객은 Service Bus와 ActiveMQ 또는 RabbitMQ 같은 온-프레미스 broker에 대해 작동하는 애플리케이션을 작성할 수 있습니다.It allows customers to write applications that work against Service Bus and on-premises brokers such as ActiveMQ or RabbitMQ. AMQP 프로토콜 가이드는 이러한 추상화를 구현하려 할 때 도움이 되는 자세한 정보를 제공합니다.The AMQP protocol guide provides detailed information in case you want to build such an abstraction.

Service Bus Premium은 Java/Jakarta EE JMS(Java Message Service) 2.0 API와 완벽하게 호환됩니다.Service Bus Premium is fully compliant with the Java/Jakarta EE Java Message Service (JMS) 2.0 API. 그리고 Service Bus Standard는 큐에 중점을 둔 JMS 1.1 하위 세트를 지원합니다.And, Service Bus Standard supports the JMS 1.1 subset focused on queues. JMS는 메시지 broker에 사용되는 일반적인 추상화이며 인기 있는 Spring 프레임워크를 포함하여 여러 애플리케이션 및 프레임워크와 통합됩니다.JMS is a common abstraction for message brokers and integrates with many applications and frameworks, including the popular Spring framework. 다른 broker에서 Azure Service Bus로 전환하려면 큐 및 토픽의 토폴로지를 다시 만들고 클라이언트 공급자 종속성 및 구성을 변경하기만 하면 됩니다.To switch from other brokers to Azure Service Bus, you just need to recreate the topology of queues and topics, and change the client provider dependencies and configuration. 예제는 ActiveMQ 마이그레이션 가이드를 참조하세요.For an example, see the ActiveMQ migration guide.

개념 및 용어Concepts and terminology

이 섹션에서는 Service Bus의 개념과 용어를 설명합니다.This section discusses concepts and terminology of Service Bus.

네임스페이스Namespaces

네임스페이스는 모든 메시징 구성 요소에 대한 컨테이너입니다.A namespace is a container for all messaging components. 여러 큐 및 토픽은 단일 네임스페이스에 있을 수 있으며 네임스페이스는 종종 애플리케이션 컨테이너로 사용됩니다.Multiple queues and topics can be in a single namespace, and namespaces often serve as application containers.

네임스페이스는 다른 broker의 용어로 "서버"와 비교할 수 있지만, 그 개념은 직접적으로 일치하지 않습니다.A namespace can be compared to a "server" in the terminology of other brokers, but the concepts aren't directly equivalent. Service Bus 네임스페이스는 수십 개의 전체 활성 가상 머신으로 구성된 대용량 클러스터의 고유한 용량 조각입니다.A Service Bus namespace is your own capacity slice of a large cluster made up of dozens of all-active virtual machines. 필요에 따라 세 개의 Azure 가용성 영역으로 확장할 수 있습니다.It may optionally span three Azure availability zones. 따라서 메시지 broker를 대규모로 실행할 때 얻게 되는 가용성 및 견고함이라는 이점을 모두 누릴 수 있습니다.So, you get all the availability and robustness benefits of running the message broker at enormous scale. 그리고 기본 복잡성에 대해 걱정할 필요가 없습니다.And, you don't need to worry about underlying complexities. Service Bus는 "서버리스" 메시지입니다.Service Bus is "serverless" messaging.

Queues

메시지는 간에서 전송 및 수신됩니다.Messages are sent to and received from queues. 큐는 수신 애플리케이션이 수신 및 처리할 수 있을 때까지 메시지를 저장합니다.Queues store messages until the receiving application is available to receive and process them.

큐

큐의 메시지는 도착 시 순서가 지정되고 타임스탬프가 지정됩니다.Messages in queues are ordered and timestamped on arrival. broker의 승인을 받은 메시지는 항상 삼중 중복 스토리지에 안전하게 보관되며, 네임스페이스가 영역을 사용하도록 설정되면 가용성 영역으로 확장됩니다.Once accepted by the broker, the message is always held durably in triple-redundant storage, spread across availability zones if the namespace is zone-enabled. Service Bus는 클라이언트에 수락된 것으로 보고된 메시지를 절대로 메모리 또는 휘발성 스토리지에 남겨 두지 않습니다.Service Bus never leaves messages in memory or volatile storage after they've been reported to the client as accepted.

메시지는 요청 시에만 메시지를 전송하는 끌어오기 모드에서 전송됩니다.Messages are delivered in pull mode, only delivering messages when requested. 다른 클라우드 큐의 사용 중-폴링 모델과 달리, 끌어오기 작업은 오래 걸릴 수 있으며 메시지를 사용할 수 있게 되면 완료됩니다.Unlike the busy-polling model of some other cloud queues, the pull operation can be long-lived and only complete once a message is available.

토픽Topics

토픽 을 사용하여 메시지를 보내고 받을 수도 있습니다.You can also use topics to send and receive messages. 큐는 종종 지점 간 통신에 사용되지만 토픽은 게시/구독 시나리오에서 유용합니다.While a queue is often used for point-to-point communication, topics are useful in publish/subscribe scenarios.

항목

토픽에는 여러 개의 독립 구독이 있을 수 있습니다. 이러한 독립 구독은 토픽에 연결되며, 그렇지 않으면 받는 사람 쪽의 큐와 정확히 같은 방식으로 작동합니다.Topics can have multiple, independent subscriptions, which attach to the topic and otherwise work exactly like queues from the receiver side. 토픽에 대한 구독자는 해당 토픽으로 전송된 각 메시지의 복사본을 수신할 수 있습니다.A subscriber to a topic can receive a copy of each message sent to that topic. 구독은 명명된 엔터티입니다.Subscriptions are named entities. 구독은 기본적으로 지속되지만, 만료되면 자동으로 삭제되도록 구성할 수 있습니다.Subscriptions are durable by default, but can be configured to expire and then be automatically deleted. JMS API를 통해 Service Bus Premium을 사용하면 연결 기간 동안 존재하는 휘발성 구독을 만들 수 있습니다.Via the JMS API, Service Bus Premium also allows you to create volatile subscriptions that exist for the duration of the connection.

구독에 대한 규칙을 정의할 수 있습니다.You can define rules on a subscription. 구독 규칙에는 구독으로 복사되는 메시지의 조건을 정의하는 필터 와 메시지 메타데이터를 수정할 수 있는 선택적 작업 이 포함되어 있습니다.A subscription rule has a filter to define a condition for the message to be copied into the subscription and an optional action that can modify message metadata. 자세한 내용은 토픽 필터 및 작업을 참조하세요.For more information, see Topic filters and actions. 이 기능은 다음과 같은 시나리오에서 유용합니다.This feature is useful in the following scenarios:

  • 토픽에 전송되는 메시지 중 일부는 구독에서 수신하지 않으려 합니다.You don't want a subscription to receive all messages sent to a topic.
  • 메시지가 구독을 통과할 때 추가 메타데이터로 메시지를 표시하려 합니다.You want to mark up messages with extra metadata when they pass through a subscription.

고급 기능Advanced features

Service Bus에는 보다 복잡한 메시징 문제를 해결할 수 있는 고급 기능이 있습니다.Service Bus includes advanced features that enable you to solve more complex messaging problems. 다음 섹션에서는 이러한 기능 일부를 설명합니다.The following sections describe several of these features.

메시지 세션Message sessions

Service Bus에서 FIFO(first-in, first-out) 보장을 만들려면 세션을 사용합니다.To create a first-in, first-out (FIFO) guarantee in Service Bus, use sessions. 메시지 세션을 사용하면 관련 메시지의 무제한 시퀀스를 독점적으로, 순서를 지정하여 처리할 수 있습니다.Message sessions enable exclusive, ordered handling of unbounded sequences of related messages. 또한 대규모 고가용성 시스템에서 세션을 처리할 수 있도록 세션 기능은 세션 상태를 저장할 수 있으며, 따라서 처리기 간에 세션을 안전하게 이동할 수 있습니다.To allow for handling sessions in high-scale, high-availability systems, the session feature also allows for storing session state, which allows sessions to safely move between handlers. 자세한 내용은 메시지 세션: FIFO(선입선출)를 참조하세요.For more information, see Message sessions: first in, first out (FIFO).

자동 전달Autoforwarding

자동 전달 기능은 큐 또는 구독을 같은 네임스페이스 내부의 다른 큐 또는 토픽에 연결합니다.The autoforwarding feature chains a queue or subscription to another queue or topic inside the same namespace. 이 기능을 사용하면 Service Bus는 자동으로 큐 또는 구독의 메시지를 대상 큐 또는 토픽으로 이동합니다.When you use this feature, Service Bus automatically moves messages from a queue or subscription to a target queue or topic. 이 모든 이동은 트랜잭션 방식으로 수행됩니다.All such moves are done transactionally. 자세한 내용은 자동 전달을 사용한 Service Bus 엔터티 연결을 참조하세요.For more information, see Chaining Service Bus entities with autoforwarding.

배달하지 못한 편지 큐Dead-letter queue

모든 Service Bus 큐 및 토픽 구독에는 DLQ(배달하지 못한 편지 큐)가 연결됩니다.All Service Bus queues and topic subscriptions have an associated dead-letter queue (DLQ). DLQ는 다음 기준을 충족하는 메시지를 보관합니다.A DLQ holds messages that meet the following criteria:

  • 받는 사람에게 성공적으로 배달할 수 없습니다.They can't be delivered successfully to any receiver.
  • 시간이 초과되었습니다.They timed out.
  • 수신 애플리케이션에서 명시적으로 열외로 취급됩니다.They're explicitly sidelined by the receiving application.

배달하지 못한 편지 큐의 메시지는 이 큐에 배치된 이유가 주석으로 추가됩니다.Messages in the dead-letter queue are annotated with the reason why they've been placed there. 배달하지 못한 편지 큐에는 특수 엔드포인트가 있습니다. 그렇지 않으면 일반 큐처럼 작동합니다.The dead-letter queue has a special endpoint, but otherwise acts like any regular queue. 애플리케이션 또는 도구는 DLQ를 찾아보거나 DLQ에서 큐를 제거할 수 있습니다.An application or tool can browse a DLQ or dequeue from it. 배달하지 못한 편지 큐에서 자동으로 전달할 수도 있습니다.You can also autoforward out of a dead-letter queue. 자세한 내용은 Service Bus 배달 못한 편지 큐의 개요를 참조하세요.For more information, see Overview of Service Bus dead-letter queues.

예약 배달Scheduled delivery

지연된 처리의 큐 또는 토픽에 메시지를 제출하고, 메시지를 사용할 수 있게 되는 시간을 설정할 수 있습니다.You can submit messages to a queue or topic for delayed processing, setting a time when the message will become available for consumption. 예약된 메시지를 취소할 수도 있습니다.Scheduled messages can also be canceled. 자세한 내용은 예약된 메시지를 참조하세요.For more information, see Scheduled messages.

메시지 지연Message deferral

큐 또는 구독 클라이언트는 받은 메시지 검색을 나중으로 연기할 수 있습니다.A queue or subscription client can defer retrieval of a received message until a later time. 메시지가 예상 순서대로 게시되지 않았기 때문에 클라이언트가 다른 메시지를 받을 때까지 대기하려는 것일 수 있습니다.The message may have been posted out of an expected order and the client wants to wait until it receives another message. 지연된 메시지는 큐 또는 구독에 남아 있으며 서비스에서 할당한 시퀀스 번호를 사용하여 명시적으로 다시 활성화해야 합니다.Deferred messages remain in the queue or subscription and must be reactivated explicitly using their service-assigned sequence number. 자세한 내용은 메시지 지연을 참조하세요.For more information, see Message deferral.

일괄 처리Batching

클라이언트 쪽 일괄 처리를 사용하면 큐 또는 토픽 클라이언트가 메시지 세트를 누적하고 함께 전송할 수 있습니다.Client-side batching enables a queue or topic client to accumulate a set of messages and transfer them together. 이 방법은 대역폭을 절약하거나 처리량을 늘리기 위해 자주 사용됩니다.It's often done to either save bandwidth or to increase throughput. 자세한 내용은 클라이언트 쪽 일괄 처리를 참조하세요.For more information, see Client-side batching.

트랜잭션Transactions

트랜잭션 그룹은 두 개 이상의 작업을 실행 범위 로 그룹화합니다.A transaction groups two or more operations together into an execution scope. Service Bus는 단일 트랜잭션 범위 내에서 여러 메시지 엔터티에 대한 작업을 그룹화할 수 있습니다.Service Bus allows you to group operations against multiple messaging entities within the scope of a single transaction. 메시지 엔터티는 큐, 토픽 또는 구독일 수 있습니다.A message entity can be a queue, topic, or subscription. 자세한 내용은 Service Bus 트랜잭션 처리의 개요를 참조하세요.For more information, see Overview of Service Bus transaction processing.

유휴 상태에서 자동 삭제Autodelete on idle

유휴 상태에서 자동 삭제를 사용하여 유휴 간격을 지정할 수 있습니다. 그러면 이 시간이 경과한 후 큐 또는 토픽 구독이 자동으로 삭제됩니다.Autodelete on idle enables you to specify an idle interval after which a queue or topic subscription is automatically deleted. 최소 기간은 5분입니다.The minimum duration is 5 minutes.

중복 검색Duplicate detection

중복 검색 기능을 사용하면 보낸 사람은 동일한 메시지를 다시 전송할 수 있고 broker는 잠재적 중복을 삭제할 수 있습니다.The duplicate detection feature enables the sender to resend the same message again and for the broker to drop a potential duplicate. 자세한 내용은 중복 검색을 참조하세요.For more information, see Duplicate detection.

지리적 재해 복구Geo-disaster recovery

Azure 지역에서 가동 중단이 발생하는 경우 재해 복구 기능은 다른 지역 또는 데이터 센터에서 데이터 처리가 계속 진행되도록 합니다.When an Azure region experiences downtime, the disaster recovery feature enables data processing to continue operating in a different region or data center. 이 기능은 보조 지역에 사용 가능한 네임스페이스의 구조적 미러를 유지하며 네임스페이스 ID를 보조 네임스페이스로 전환하는 것을 허용합니다.The feature keeps a structural mirror of a namespace available in the secondary region and allows the namespace identity to switch to the secondary namespace. 이미 게시된 메시지는 가용성 문제가 진정되면 복구할 수 있도록 이전 기본 네임스페이스에 유지됩니다.Already posted messages remain in the former primary namespace for recovery once the availability episode subsides. 자세한 내용은 Azure Service Bus 지역 재해 복구를 참조하세요.For more information, see Azure Service Bus Geo-disaster recovery.

보안Security

Service Bus는 표준 AMQP 1.0HTTP 또는 REST 프로토콜과 TLS(전송 수준 보안)를 비롯한 해당 보안 기능을 지원합니다.Service Bus supports standard AMQP 1.0 and HTTP or REST protocols and their respective security facilities, including transport-level security (TLS). 클라이언트는 공유 액세스 서명 또는 Azure Active Directory 역할 기반 보안을 사용하여 액세스 권한을 부여할 수 있습니다.Clients can be authorized for access using Shared Access Signature or Azure Active Directory role-based security.

원치 않는 트래픽으로부터 보호할 수 있도록 Service Bus는 IP 방화벽이나 가상 네트워크와의 통합 같은 보안 기능을 제공합니다.For protection against unwanted traffic, Service Bus provides security features such as IP firewall and integration with virtual networks.

클라이언트 라이브러리Client libraries

완전히 지원되는 Service Bus 클라이언트 라이브러리는 Azure SDK를 통해 사용할 수 있습니다.Fully supported Service Bus client libraries are available via the Azure SDK.

Azure Service Bus의 기본 프로토콜은 AMQP 1.0이며 모든 AMQP 1.0 규격 프로토콜 클라이언트에서 사용할 수 있습니다.Azure Service Bus' primary protocol is AMQP 1.0 and it can be used from any AMQP 1.0 compliant protocol client. 여러 오픈 소스 AMQP 클라이언트에서 Service Bus 상호 운용성을 명시적으로 보여주는 샘플을 제공합니다.Several open-source AMQP clients have samples that explicitly demonstrate Service Bus interoperability. AMQP 1.0 프로토콜 가이드를 검토하여 AMQP 1.0 클라이언트에서 직접 Service Bus 기능을 사용하는 방법을 알아보세요.Review the AMQP 1.0 protocol guide to understand how to use Service Bus' features with AMQP 1.0 clients directly.

언어Language 라이브러리Library
JavaJava Apache Qpid Proton-JApache Qpid Proton-J
C/C++C/C++ Azure uAMQP C, Apache Qpid Proton-CAzure uAMQP C, Apache Qpid Proton-C
PythonPython Azure uAMQP for Python, Apache Qpid Proton PythonAzure uAMQP for Python, Apache Qpid Proton Python
PHPPHP Azure uAMQP for PHPAzure uAMQP for PHP
RubyRuby Apache Qpid Proton RubyApache Qpid Proton Ruby
GoGo Azure Go AMQP, Apache Qpid Proton GoAzure Go AMQP, Apache Qpid Proton Go
C#/F#/VBC#/F#/VB AMQP .NET Lite, Apache NMS AMQPAMQP .NET Lite, Apache NMS AMQP
JavaScript/NodeJavaScript/Node RheaRhea

통합Integration

Service Bus는 다음과 같은 여러 Microsoft 및 Azure 서비스와 완벽하게 통합됩니다.Service Bus fully integrates with many Microsoft and Azure services, for instance:

다음 단계Next steps

Service Bus 메시징 사용을 시작하려면 다음 문서를 참조하세요.To get started using Service Bus messaging, see the following articles: