빠른 시작: 콘솔 앱에서 실시간 메시지 브로드캐스트
Azure SignalR Service는 브로드캐스트와 같은 서버-클라이언트 통신 시나리오를 지원하는 REST API를 제공합니다. REST API를 호출할 수 있는 모든 프로그래밍 언어를 선택할 수 있습니다. 연결된 모든 클라이언트, 이름별 특정 클라이언트 또는 클라이언트 그룹에 메시지를 게시할 수 있습니다.
이 빠른 시작에서는 명령줄 앱에서 C#으로 작성된 연결된 클라이언트 앱에 메시지를 보내는 방법을 알아보겠습니다.
Important
원시 연결 문자열 데모용으로만 이 문서에 표시됩니다.
연결 문자열에는 애플리케이션이 Azure Web PubSub 서비스에 액세스하는 데 필요한 권한 부여 정보가 포함됩니다. 연결 문자열 내의 액세스 키는 서비스의 루트 암호와 비슷합니다. 프로덕션 환경에서는 항상 액세스 키를 보호합니다. Azure Key Vault를 사용하여 키를 안전하게 관리 및 회전하고 Microsoft Entra ID를 사용하여 연결 문자열 보호합니다.
액세스 키를 다른 사용자에게 배포하거나 하드 코딩하거나 다른 사용자가 액세스할 수 있는 일반 텍스트로 저장하지 않도록 합니다. 키가 손상되었다고 생각되면 키를 교체하세요.
필수 조건
이 빠른 시작은 macOS, Windows 또는 Linux에서 실행할 수 있습니다.
- .NET Core SDK
- 선택하는 텍스트 편집기 또는 코드 편집기입니다.
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
Azure에 로그인
Azure 계정을 사용하여 Azure Portal에 로그인합니다.
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
이 섹션에서는 앱에 사용할 기본 Azure SignalR 인스턴스를 만듭니다. 다음 단계에서는 Azure Portal을 사용하여 새 인스턴스를 만들지만 Azure CLI를 사용할 수도 있습니다. 자세한 내용은 Azure SignalR Service CLI 참조에서 az signalr create 명령을 참조하세요.
- Azure Portal에 로그인합니다.
- 페이지의 왼쪽 상단에서 + 리소스 만들기를 선택합니다.
- 리소스 만들기 페이지의 검색 서비스 및 마켓플레이스 텍스트 상자에 signalr을 입력한 다음, 목록에서 SignalR Service를 선택합니다.
- SignalR Service 페이지에서 만들기를 선택합니다.
- 기본 사항 탭에서 새 SignalR Service 인스턴스에 대한 필수 정보를 입력합니다. 다음 값을 입력합니다.
필드 | 제안 값 | 설명 |
---|---|---|
구독 | 구독 선택 | 새 SignalR Service 인스턴스를 만드는 데 사용할 구독을 선택합니다. |
리소스 그룹 | SignalRTestResources라는 리소스 그룹 만들기 | SignalR 리소스에 대한 리소스 그룹을 선택하거나 만듭니다. 기존 리소스 그룹을 사용하는 대신 이 자습서에 대한 새 리소스 그룹을 만드는 것이 유용합니다. 자습서를 완료한 후 리소스를 확보하려면 리소스 그룹을 삭제합니다. 리소스 그룹을 삭제하면 해당 그룹에 속한 리소스도 모두 삭제됩니다. 이 작업은 취소할 수 없습니다. 리소스 그룹을 삭제하기 전에 유지하려는 리소스가 포함되어 있지 않은지 확인합니다. 자세한 내용은 리소스 그룹을 사용하여 Azure 리소스 관리를 참조하세요. |
리소스 이름 | testsignalr | SignalR 리소스에 사용할 고유한 리소스 이름을 입력합니다. 해당 지역에서 이미 testsignalr을 사용하고 있는 경우 이름이 고유해질 때까지 숫자나 문자를 추가합니다. 이름은 1~63자의 문자열로, 숫자, 영문자 및 하이픈( - ) 문자만 포함할 수 있습니다. 이름은 하이픈 문자로 시작하거나 끝날 수 없고 연속되는 하이픈 문자는 유효하지 않습니다. |
지역 | 지역 선택 | 새 SignalR Service 인스턴스에 적합한 지역을 선택합니다. Azure SignalR Service는 현재 일부 지역에서 사용할 수 없습니다. 자세한 내용은 Azure SignalR Service 지역 가용성을 참조하세요. |
가격 책정 계층 | 변경을 선택한 다음, 무료(개발/테스트 전용)를 선택합니다. 선택을 선택하여 선택한 가격 책정 계층을 확인합니다. | Azure SignalR Service에는 무료, 표준 및 프리미엄의 세 가지 가격 책정 계층이 있습니다. 자습서는 필수 구성 요소에 달리 명시되지 않는 한 무료 계층을 사용합니다. 계층과 가격 책정 간의 기능 차이에 대한 자세한 내용은 Azure SignalR Service 가격 책정을 참조하세요. |
서비스 모드 | 적절한 서비스 모드를 선택합니다. | 웹앱에서 SignalR 허브 논리를 호스팅하고 SignalR 서비스를 프록시로 사용하는 경우 기본값을 사용합니다. Azure Functions와 같은 서버리스 기술을 사용하여 SignalR 허브 논리를 호스팅하는 경우 서버리스를 사용합니다. 클래식 모드는 이전 버전과의 호환성만을 위한 것이므로 사용하지 않는 것이 좋습니다. 자세한 내용은 Azure SignalR Service의 서비스 모드를 참조하세요. |
SignalR 자습서의 네트워킹 및 태그 탭에서 설정을 변경할 필요가 없습니다.
- 기본 탭의 아래쪽에서 검토 + 만들기 단추를 선택합니다.
- 검토 + 만들기 탭에서 해당 값을 검토한 다음, 만들기를 선택합니다. 배포가 완료되는 데 몇 분 정도 걸립니다.
- 배포가 완료되면 리소스로 이동 단추를 선택합니다.
- SignalR 리소스 페이지의 Settings 아래 왼쪽 메뉴에서 Keys를 선택합니다.
- 기본 키의 연결 문자열을 복사합니다. 이 자습서의 뒷부분에서 앱을 구성하려면 이 연결 문자열이 필요합니다.
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
샘플 애플리케이션 복제
서비스가 배포되는 동안 코드를 준비해 보겠습니다. 먼저 GitHub의 샘플 앱을 복제합니다. 다음으로 SignalR Service 연결 문자열을 앱으로 설정합니다. 마지막으로 애플리케이션을 로컬로 실행합니다.
Git 터미널 창을 엽니다. 샘플 프로젝트를 복제할 폴더로 변경합니다.
다음 명령을 실행하여 샘플 리포지토리를 복제합니다. 이 명령은 컴퓨터에서 샘플 앱의 복사본을 만듭니다.
git clone https://github.com/aspnet/AzureSignalR-samples.git
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
샘플 빌드 및 실행
이 샘플은 Azure SignalR Service 사용을 보여 주는 콘솔 앱입니다. 다음 두 가지 모드를 제공합니다.
- 서버 모드: 단순 명령을 사용하여 Azure SignalR Service REST API를 호출합니다.
- 클라이언트 모드: Azure SignalR Service에 연결하고 서버로부터 메시지를 받습니다.
또한 Azure SignalR Service에 인증하기 위해 액세스 토큰을 생성하는 방법도 알아봅니다.
실행 파일 빌드
macOS osx.10.13-x64를 예제로 사용합니다. 다른 플랫폼에서 빌드하는 방법에 대한 참조를 확인할 수 있습니다.
cd AzureSignalR-samples/samples/Serverless/
dotnet publish -c Release -r osx.10.13-x64
클라이언트 시작
원시 연결 문자열 데모용으로만 이 문서에 표시됩니다. 프로덕션 환경에서는 항상 액세스 키를 보호합니다. Azure Key Vault를 사용하여 키를 안전하게 관리 및 회전하고 Microsoft Entra ID를 사용하여 연결 문자열 보호합니다.
cd bin/Release/netcoreapp2.1/osx.10.13-x64/
Serverless client <ClientName> -c "<ConnectionString>" -h <HubName>
서버 시작
cd bin/Release/netcoreapp2.1/osx.10.13-x64/
Serverless server -c "<ConnectionString>" -h <HubName>
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
게시하지 않고 샘플 실행
다음 명령을 실행하여 서버나 클라이언트를 시작할 수도 있습니다.
# Start a server
dotnet run -- server -c "<ConnectionString>" -h <HubName>
# Start a client
dotnet run -- client <ClientName> -c "<ConnectionString>" -h <HubName>
user-secrets를 사용하여 연결 문자열 지정
샘플의 루트 디렉터리에서 dotnet user-secrets set Azure:SignalR:ConnectionString "<ConnectionString>"
을 실행할 수 있습니다. 그 뒤에는 -c "<ConnectionString>"
옵션이 더 이상 필요하지 않습니다.
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
사용
서버가 시작된 후에 명령을 사용하여 메시지를 보냅니다.
send user <User Id>
send users <User List>
send group <Group Name>
send groups <Group List>
broadcast
각기 다른 클라이언트 이름으로 여러 클라이언트를 시작할 수 있습니다.
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
Microsoft 이외의 서비스와 통합
Azure SignalR Service를 사용하면 Microsoft 이외의 서비스를 시스템과 통합할 수 있습니다.
기술 사양 정의
다음 표에서는 현재 지원되는 모든 REST API 버전을 보여 줍니다. 각 특정 버전에 대한 정의 파일도 찾을 수 있습니다.
버전 | API 상태 | Door | Specific(특정) |
---|---|---|---|
1.0-preview |
사용 가능 | 5002 | Swagger |
1.0 |
사용 가능 | Standard | Swagger |
각 특정 버전에 사용 가능한 API 목록은 다음 목록에서 확인할 수 있습니다.
API | 1.0-미리 보기 | 1.0 |
---|---|---|
모두에게 브로드캐스트 | ✓ | ✓ |
그룹에 브로드캐스트 | ✓ | ✓ |
일부 그룹에 브로드캐스트 | ✓(사용되지 않음) | N / A |
사용자에게 보내기 | ✓ | ✓ |
일부 사용자에게 보내기 | ✓(사용되지 않음) | N / A |
그룹에 사용자 추가 | N / A |
✓ |
그룹에서 사용자 제거 | N / A |
✓ |
사용자 존재 확인 | N / A |
✓ |
모든 그룹에서 사용자 제거 | N / A |
✓ |
연결로 보내기 | N / A |
✓ |
그룹에 연결 추가 | N / A |
✓ |
그룹에서 연결 제거 | N / A |
✓ |
클라이언트 연결 닫기 | N / A |
✓ |
Service Health | N / A |
✓ |
모두에게 브로드캐스트
버전 | API HTTP 메서드 | 요청 URL | 요청 본문 |
---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name> |
{"target": "<method-name>", "arguments": [...]} |
그룹에 브로드캐스트
버전 | API HTTP 메서드 | 요청 URL | 요청 본문 |
---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/group/<group-name> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name> |
{"target": "<method-name>", "arguments": [...]} |
사용자에게 보내기
버전 | API HTTP 메서드 | 요청 URL | 요청 본문 |
---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/user/<user-id> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id> |
{"target": "<method-name>", "arguments": [...]} |
그룹에 사용자 추가
버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
그룹에서 사용자 제거
버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
그룹에 사용자가 있는지 확인
API 버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups/<group-name> |
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
응답 상태 코드 | 설명 |
---|---|
200 |
사용자가 있음 |
404 |
사용자가 없음 |
모든 그룹에서 사용자 제거
API 버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups |
연결로 메시지 보내기
API 버전 | API HTTP 메서드 | 요청 URL | 요청 본문 |
---|---|---|---|
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> |
{ "target":"<method-name>", "arguments":[ ... ] } |
그룹에 연결 추가
API 버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id> |
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name> |
그룹에서 연결 제거
API 버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id> |
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name> |
클라이언트 연결 닫기
API 버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> |
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>?reason=<close-reason> |
서비스 상태
API 버전 | API HTTP 메서드 | 요청 URL |
---|---|---|
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/health |
응답 상태 코드 | 설명 |
---|---|
200 |
서비스 양호 |
5xx |
서비스 오류 |
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
리소스 정리
이 앱을 계속 사용하지 않으려면 다음 단계에 따라 이 빠른 시작에서 만든 리소스를 모두 삭제하세요. 요금은 발생되지 않습니다.
Azure Portal에서 맨 왼쪽에 있는 리소스 그룹을 선택한 다음, 만든 리소스 그룹을 선택합니다. 또는 검색 상자를 사용하여 이름으로 리소스 그룹을 찾을 수 있습니다.
열린 창에서 리소스 그룹을 선택한 다음, 리소스 그룹 삭제를 클릭합니다.
새 창에서 삭제할 리소스 그룹의 이름을 입력한 다음, 삭제를 클릭합니다.
문제가 있나요? 문제 해결 가이드를 사용해 보거나 알려주세요.
다음 단계
이 빠른 시작에서는 REST API를 사용하여 SignalR Service에서 클라이언트로 실시간 메시지를 브로드캐스트하는 방법을 알아보았습니다. 다음으로, REST API를 기반으로 빌드되는 SignalR Service 바인딩을 사용하여 Azure Functions를 개발 및 배포하는 방법을 알아봅니다.