이 빠른 시작에서는 Service Bus 큐로 메시지를 보내고 받는 간단한 시나리오에 대한 단계별 지침을 제공합니다. 이 빠른 시작에서는 다음 작업을 완료합니다.
Azure Portal을 사용하여 Service Bus 네임스페이스를 만듭니다.
Azure Portal을 사용하여 Service Bus 큐를 만듭니다.
javaScript 애플리케이션을 작성하여 @azure/service-bus 패키지를 사용하여 다음을 수행합니다.
- 큐에 메시지 집합을 보냅니다.
- 큐에서 해당 메시지를 받습니다.
GitHub의 Azure SDK for JavaScript 리포지토리에서 Azure Service Bus에 대한 미리 빌드된 JavaScript 및 TypeScript 샘플을 찾을 수 있습니다.
서비스를 접하는 경우 시작하기 전에 Service Bus 개요 를 참조하세요.
필수 조건
Azure 구독 이 빠른 시작을 완료하려면 Azure 계정이 필요합니다. Visual Studio 구독자에 대한 월간 Azure 크레딧을 활성화하거나 무료 계정에 등록할 수 있습니다.
사용자 고유의 Azure 계정으로 이 빠른 시작을 사용하려면 다음이 필요합니다.
- 개발자 머신에 암호 없는 인증을 제공하는 Azure CLI를 설치합니다.
- 명령 프롬프트에서 Azure 계정으로
az login
을 사용하여 로그인합니다. - 리소스에 적절한 데이터 역할을 추가할 때 동일한 계정을 사용합니다.
- 동일한 명령 프롬프트 창에서 코드를 실행합니다.
- Service Bus 네임스페이스의 큐 이름을 기록해 둡니다. 코드에 필요합니다.
참고 항목
이 자습서에서는 Nodejs를 사용하여 복사하고 실행할 수 있는 샘플을 사용합니다. Node.js 애플리케이션을 만드는 방법에 대한 지침은 Node.js 애플리케이션을 만들어 Azure 웹 사이트에 배포 또는 Windows PowerShell을 사용하는 Node.js 클라우드 서비스를 참조하세요.
Azure Portal에서 네임스페이스 만들기
Azure에서 Service Bus 메시징 엔터티 사용을 시작하려면 Azure 전체에서 고유한 이름으로 네임스페이스를 만듭니다. 네임스페이스는 애플리케이션에서 큐 및 토픽과 같은 Service Bus 리소스에 대한 범위 지정 컨테이너를 제공합니다.
네임스페이스를 만들려면
Azure Portal에 로그인합니다.
왼쪽 위에서 플라이아웃 메뉴를 선택하고 모든 서비스 페이지로 이동합니다.
왼쪽 탐색 모음에서 통합을 선택합니다.
메시징 서비스>Service Bus까지 아래로 스크롤하고 만들기를 선택합니다.
네임스페이스 만들기 페이지의 기본 사항 탭에서 다음 단계를 수행합니다.
구독에 대해 네임스페이스를 만들 Azure 구독을 선택합니다.
리소스 그룹의 경우 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
다음 명명 규칙을 충족하는 네임스페이스 이름을 입력합니다.
- 이름은 Azure에서 고유해야 합니다. 시스템에서 사용 가능한 이름인지 즉시 확인합니다.
- 이름 길이는 6~50자여야 합니다.
- 이름에는 문자, 숫자, 하이픈만 포함될 수 있습니다
-
. - 이름은 문자로 시작하고 문자 또는 숫자로 끝나야 합니다.
- 이름은
-sb>로 -mgmt
끝나지 않습니다.
위치의 경우 네임스페이스를 호스트할 지역을 선택합니다.
가격 책정 계층에 대해 네임스페이스에 대한 가격 책정 계층(기본, 표준 또는 프리미엄)을 선택합니다. 이 빠른 시작의 경우 표준을 선택합니다.
프리미엄 계층을 선택하는 경우 네임스페이스에 대해 지역에서 복제를 사용하도록 설정할 수 있습니다. 지역 복제 기능을 사용하면 네임스페이스의 메타데이터와 데이터가 주 지역에서 하나 이상의 보조 지역으로 지속적으로 복제됩니다.
중요합니다
토픽 및 구독을 사용하려면 표준 또는 프리미엄을 선택합니다. 기본 가격 책정 계층에서는 토픽 및 구독이 지원되지 않습니다.
프리미엄 가격 책정 계층을 선택한 경우 메시징 단위 수를 지정합니다. 프리미엄 계층은 CPU 및 메모리 수준에서 리소스 격리를 제공하므로 각 워크로드가 독립적으로 실행됩니다. 이 리소스 컨테이너를 메시징 단위라고 합니다. 프리미엄 네임스페이스에는 하나 이상의 메시징 단위가 있습니다. 각 Service Bus 프리미엄 네임스페이스에 대해 1, 2, 4, 8 또는 16개의 메시징 단위를 선택할 수 있습니다. 자세한 내용은 Service Bus 프리미엄 메시징 계층을 참조하세요.
페이지 아래쪽에서 검토 + 만들기를 선택합니다.
검토 + 만들기 페이지에서 설정을 검토하고 만들기를 선택합니다.
리소스 배포에 성공하면 배포 페이지에서 리소스로 이동을 선택합니다.
Service Bus 네임스페이스에 대한 홈페이지가 표시됩니다.
Azure Portal에서 큐 만들기
Service Bus 네임스페이스 페이지에서 탐색 메뉴의 엔터티를 왼쪽으로 확장하고 큐를 선택합니다.
큐 페이지의 도구 모음에서 + 큐를 선택합니다.
큐의 이름을 입력합니다. 다른 값은 기본값으로 둡니다.
선택하고생성합니다.
Azure에 앱 인증
이 문서에서는 Azure Service Bus에 연결하는 두 가지 방법, 즉 암호 없는 문자열과 연결 문자열을 보여줍니다.
첫 번째 옵션은 Microsoft Entra ID 및 RBAC(역할 기반 액세스 제어)의 보안 주체를 사용하여 Service Bus 네임스페이스에 연결하는 방법을 보여 줍니다. 코드, 구성 파일 또는 Azure Key Vault와 같은 보안 스토리지에 하드 코딩된 연결 문자열이 있는 것에 대해 걱정할 필요가 없습니다.
두 번째 옵션은 연결 문자열을 사용하여 Service Bus 네임스페이스에 연결하는 방법을 보여줍니다. Azure를 접하는 경우 연결 문자열 옵션을 더 쉽게 따를 수 있습니다. 실제 애플리케이션 및 프로덕션 환경에서는 암호 없는 옵션을 사용하는 것이 좋습니다. 자세한 내용은 Service Bus 인증 및 권한 부여를 참조하세요. 암호 없는 인증에 대한 자세한 내용은 .NET 앱 인증을 참조하세요.
Microsoft Entra 사용자에게 역할 할당
로컬로 개발할 때 Azure Service Bus에 연결하는 사용자 계정에 올바른 권한이 있는지 확인합니다. 메시지를 보내고 받으려면 Azure Service Bus 데이터 소유자 역할이 필요합니다. 이 역할을 자신에게 할당하려면 사용자 액세스 관리자 역할 또는 작업을 포함하는 Microsoft.Authorization/roleAssignments/write
다른 역할이 필요합니다.
Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 사용자에게 Azure RBAC 역할을 할당할 수 있습니다. 역할 할당에 사용 가능한 범위에 대해 자세히 알아보려면 Azure RBAC에 대한 이해 범위를 참조하세요.
다음 예에서는 Azure Service Bus 리소스에 대한 모든 권한을 제공하는 Azure Service Bus Data Owner
역할을 사용자 계정에 할당합니다. 실제 시나리오에서는 최소 권한 원칙 에 따라 사용자에게 더 안전한 프로덕션 환경에 필요한 최소 권한만 부여합니다.
Azure Service Bus에 대한 Azure 기본 제공 역할
Azure Service Bus의 경우 Azure Portal 및 Azure 리소스 관리 API를 통한 네임스페이스 및 관련된 모든 리소스의 관리는 이미 Azure RBAC 모델을 사용하여 보호되고 있습니다. Azure는 Service Bus 네임스페이스에 대한 액세스 권한을 부여하기 위해 다음과 같은 Azure 기본 제공 역할을 제공합니다.
- Azure Service Bus 데이터 소유자: 큐, 토픽, 구독 및 필터를 포함하여 Service Bus 네임스페이스 및 해당 엔터티에 대한 데이터 액세스를 사용하도록 설정합니다. 이 역할의 멤버는 큐 또는 토픽/구독에서 메시지를 보내고 받을 수 있습니다.
-
Azure Service Bus 데이터 발신자: 이 역할을 사용하여 Service Bus 네임스페이스 및 해당 엔터티에 대한 액세스 권한을 부여
send
합니다. -
Azure Service Bus 데이터 수신기: 이 역할을 사용하여 Service Bus 네임스페이스 및 해당 엔터티에 대한 액세스 권한을 부여
receive
합니다.
사용자 지정 역할을 만들려면 Service Bus 작업에 필요한 권한을 참조하세요.
Azure Service Bus 소유자 역할에 Microsoft Entra 사용자 추가
Service Bus 네임스페이스 수준에서 Azure Service Bus 데이터 소유자 역할에 Microsoft Entra 사용자 이름을 추가합니다. 이 구성을 사용하면 사용자 계정의 컨텍스트에서 실행되는 앱이 큐 또는 토픽에 메시지를 보낼 수 있습니다. 큐 또는 토픽의 구독(subscription)에서 메시지를 받을 수 있습니다.
중요합니다
대부분의 경우 역할 할당이 Azure에서 전파되는 데 1~2분이 걸립니다. 드문 경우지만 최대 8분까지 걸릴 수 있습니다. 코드를 처음 실행할 때 인증 오류가 발생하면 잠시 기다렸다가 다시 시도하세요.
Azure Portal에 Service Bus 네임스페이스 페이지가 열려 있지 않은 경우 기본 검색 창이나 왼쪽 탐색 모음을 사용하여 Service Bus 네임스페이스를 찾습니다.
개요 페이지의 왼쪽 메뉴에서 액세스 제어(IAM)를 선택합니다.
액세스 제어(IAM) 페이지에서 역할 할당 탭을 선택합니다.
상단 메뉴에서 + 추가 를 선택한 다음 역할 할당을 추가합니다.
검색 상자를 사용하여 결과를 원하는 역할로 필터링합니다. 이 예에서는
Azure Service Bus Data Owner
를 검색하고 일치하는 결과를 선택합니다. 다음을 선택합니다.다음에 대한 액세스 할당 아래에서 사용자, 그룹 또는 서비스 주체를 선택한 다음, + 멤버 선택을 선택합니다.
대화 상자에서 Microsoft Entra 사용자 이름(일반적으로 user@___domain 이메일 주소)을 검색한 다음, 대화 상자 하단에서 선택을 선택합니다.
검토 + 할당을 선택하여 최종 페이지로 이동한 다음, 검토 + 할당을 다시 선택하여 프로세스를 완료합니다.
NPM(Node Package Manager)을 사용하여 패키지 설치
Service Bus에 필요한 npm 패키지를 설치하려면 해당 경로에 있는
npm
명령 프롬프트 창을 열고 샘플을 사용할 폴더로 디렉터리를 변경합니다.다음 패키지를 설치합니다.
npm install @azure/service-bus @azure/identity
큐에 메시지 보내기
다음 샘플 코드는 큐에 메시지를 보내는 방법을 보여줍니다.
로컬 컴퓨터에 대한 Azure CLI 명령을 az login
사용하여 로그인하여 이 코드에 필요한 암호 없는 인증을 제공합니다.
Visual Studio Code와 같은 텍스트 편집기를 엽니다.
send.js
라는 파일을 만들고, 그 안에 다음 코드를 붙여넣습니다. 이 코드는 과학자의 이름을 메시지로 큐에 보냅니다.중요합니다
암호 없는 자격 증명은 DefaultAzureCredential을 사용하여 제공됩니다.
const { ServiceBusClient } = require("@azure/service-bus"); const { DefaultAzureCredential } = require("@azure/identity"); // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); // name of the queue const queueName = "<QUEUE NAME>" const messages = [ { body: "Albert Einstein" }, { body: "Werner Heisenberg" }, { body: "Marie Curie" }, { body: "Steven Hawking" }, { body: "Isaac Newton" }, { body: "Niels Bohr" }, { body: "Michael Faraday" }, { body: "Galileo Galilei" }, { body: "Johannes Kepler" }, { body: "Nikolaus Kopernikus" } ]; async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createSender() can also be used to create a sender for a topic. const sender = sbClient.createSender(queueName); try { // Tries to send all messages in a single batch. // Will fail if the messages cannot fit in a batch. // await sender.sendMessages(messages); // create a batch object let batch = await sender.createMessageBatch(); for (let i = 0; i < messages.length; i++) { // for each message in the array // try to add the message to the batch if (!batch.tryAddMessage(messages[i])) { // if it fails to add the message to the current batch // send the current batch as it is full await sender.sendMessages(batch); // then, create a new batch batch = await sender.createMessageBatch(); // now, add the message failed to be added to the previous batch to this batch if (!batch.tryAddMessage(messages[i])) { // if it still can't be added to the batch, the message is probably too big to fit in a batch throw new Error("Message too big to fit in a batch"); } } } // Send the last created batch of messages to the queue await sender.sendMessages(batch); console.log(`Sent a batch of messages to the queue: ${queueName}`); // Close the sender await sender.close(); } finally { await sbClient.close(); } } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
<SERVICE-BUS-NAMESPACE>
를 Service Bus 네임스페이스로 바꾸어야 합니다.<QUEUE NAME>
을 큐 이름으로 바꿉니다.이 파일에서 코드를 실행하려면 명령 프롬프트에서 다음 명령을 사용합니다.
node send.js
다음 출력이 표시되어야 합니다.
Sent a batch of messages to the queue: myqueue
큐에서 메시지 받기
로컬 컴퓨터에 대한 Azure CLI 명령을 az login
사용하여 로그인하여 이 코드에 필요한 암호 없는 인증을 제공합니다.
Visual Studio Code와 같은 텍스트 편집기를 엽니다.
receive.js
라는 파일을 만들고, 그 안에 다음 코드를 붙여넣습니다.const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus"); const { DefaultAzureCredential } = require("@azure/identity"); // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); // name of the queue const queueName = "<QUEUE NAME>" async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createReceiver() can also be used to create a receiver for a subscription. const receiver = sbClient.createReceiver(queueName); // function to handle messages const myMessageHandler = async (messageReceived) => { console.log(`Received message: ${messageReceived.body}`); }; // function to handle any errors const myErrorHandler = async (error) => { console.log(error); }; // subscribe and specify the message and error handlers receiver.subscribe({ processMessage: myMessageHandler, processError: myErrorHandler }); // Waiting long enough before closing the sender to send messages await delay(20000); await receiver.close(); await sbClient.close(); } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
<SERVICE-BUS-NAMESPACE>
를 Service Bus 네임스페이스로 바꾸어야 합니다.<QUEUE NAME>
을 큐 이름으로 바꿉니다.이 파일에서 코드를 실행하려면 명령 프롬프트에서 다음 명령을 사용합니다.
node receive.js
다음 출력이 표시되어야 합니다.
Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus
Service Bus 네임스페이스에 대한 Azure Portal의 개요 페이지에서 들어오는 메시지 및 나가는 메시지의 수를 확인할 수 있습니다. 1분 정도 기다린 다음 페이지를 새로 고쳐 최신 값을 확인해야 할 수 있습니다.
이 개요 페이지에서 큐를 선택하여 Service Bus 큐 페이지로 이동합니다. 이 페이지에도 들어오는 메시지 및 나가는 메시지의 수가 표시됩니다. 또한 큐의 현재 크기, 최대 크기, 활성 메시지 수 등과 같은 다른 정보도 표시됩니다.
문제 해결
암호 없는 버전의 JavaScript 코드를 실행할 때 다음 오류 중 하나가 표시되는 경우 Azure CLI 명령을 az login
사용하여 로그인합니다.
적절한 역할은 Azure 사용자 계정에 적용됩니다.
- 이 작업을 수행하려면 'Send' 클레임이 필요합니다.
- 이 작업을 수행하려면 'Receive 클레임'이 필요합니다.
리소스 정리
Azure Portal에서 Service Bus 네임스페이스로 이동하고 Azure Portal에서 삭제를 선택하여 네임스페이스와 그 안의 큐를 삭제합니다.
관련 콘텐츠
다음 설명서와 샘플을 참조하세요.