연습 - Azure Relay 하이브리드 연결을 통한 요청 전송

완료됨

클라이언트 앱의 코드를 Azure Relay에 연결하여 인증해야 앱에서 메시지를 보내고 받을 수 있습니다.

신용 조회 서비스에 대한 릴레이를 만들었습니다. 이제 온-프레미스 수신기 구성 요소가 릴레이에 연결할 수 있도록 설정하면 요청을 수신하고 응답을 보낼 수 있습니다. 또한 클라이언트 앱에서 코드를 작성하여 신용 조회 요청을 릴레이로 보내고 응답을 기다릴 수 있습니다. 이러한 방식으로 릴레이 서비스에 연결하면 온-프레미스 방화벽에서 포트를 열지 않고도 서비스를 클라우드의 구성 요소에 노출할 수 있습니다. 이 방법은 신용 조회 서비스를 보호하는 데 도움이 됩니다.

이 단원에서는 Azure Relay 코드를 발신기 및 수신기 애플리케이션 모두에 작성합니다.

샘플 앱 복제

앞서 만든 릴레이로 메시지를 보내고 그로부터 오는 메시지를 수신 대기하는 두 개의 명령줄 앱이 있습니다. 대부분의 코드는 완료된 상태지만 Azure Relay 코드는 앱에 추가해야 합니다. 먼저 코드를 가져오겠습니다.

  • Azure Cloud Shell에서 오른쪽에 있는 git을 사용하여 샘플 앱을 복제합니다.

    git clone https://github.com/MicrosoftDocs/mslearn-expose-hybrid-services-with-azure-relay.git
    

수신기 앱 구성

먼저 수신기 앱이 릴레이에 연결할 수 있는지 확인해 보겠습니다. 앱에는 앞서 텍스트 파일에 저장한 네임 스페이스의 주소, 하이브리드 연결의 이름, 키 이름, 기본 연결 키가 필요합니다.

  1. 디렉터리를 수신기 앱에 대한 시작 코드로 변경한 다음, 코드 편집기를 시작합니다.

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/listener
    code Program.cs
    
  2. 코드에서 "// Details of the Azure Relay" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    private const string RelayNamespace = "<namespace>.servicebus.windows.net";
    private const string ConnectionName = "creditcheckconnection";
    private const string KeyName = "RootManageSharedAccessKey";
    private const string Key = "<your key here>";
    
  3. 코드에서 <namespace>를 앞에서 만든 릴레이의 이름으로 바꾸고 저장된 AccessKeys.txt 파일에서 키를 복사한 다음, 이를 붙여넣어 <your key here>를 바꿉니다.

이제 수신기 앱에는 Azure에서 릴레이에 연결하고 인증하는 데 필요한 모든 정보가 있습니다.

수신기 앱에서 요청에 응답

릴레이에 전송된 요청을 받을 수 있도록 신용 조회 서비스를 수신기로 릴레이에 추가해야 합니다. 코드는 이벤트를 구독하고 모든 요청을 처리하고 응답을 작성하도록 수신기를 구성해야 합니다. 예를 들어 신용 조회 서비스는 요청에서 이름을 가져온 다음 해당 사용자에 대한 신용 관련 기록을 사용해 응답해야 합니다. 수신기를 설정한 경우 OpenAsync() 메서드를 호출하여 요청에 대한 수신 대기를 시작합니다.

  1. 수신기 앱에 대한 Program.cs 코드 파일에서 "// Subscribe to the status events" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    listener.Connecting += (o, e) => { Console.WriteLine("Connecting"); };
    listener.Offline += (o, e) => { Console.WriteLine("Credit check service is offline"); };
    listener.Online += (o, e) => { Console.WriteLine("Credit check service is online"); };
    
  2. "// Obtain the name from the request" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    TextReader tr = new StreamReader(context.Request.InputStream);
    String requestedName = tr.ReadToEnd();
    Console.WriteLine("A request was received to check credit for: " + requestedName);
    
  3. "// Formulate and send the response" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    context.Response.StatusCode = HttpStatusCode.OK;
    context.Response.StatusDescription = "Credit check successful";
    using (var sw = new StreamWriter(context.Response.OutputStream))
    {
        sw.WriteLine("Credit check for {0}: {1}", requestedName, creditStatuses[index]);
    }
    
  4. "// Open the listener" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    await listener.OpenAsync();
    Console.WriteLine("Server listening");
    
  5. Ctrl+S를 선택하여 변경 내용을 저장한 후 Ctrl+Q를 선택하여 편집기를 닫습니다.

발신기 앱 구성

고객의 신용 기록을 확인하려는 앱이 릴레이에 요청을 보내고 릴레이는 이를 수신기에 전달합니다. 수신기의 경우 릴레이에 대한 연결 세부 정보를 사용하여 발신기 앱을 구성합니다.

  1. Cloud Shell에서 디렉터리를 발신기 앱에 대한 시작 코드로 변경한 다음 코드 편집기를 시작합니다.

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/sender
    code Program.cs
    
  2. 파일 창에서 Program.cs를 선택합니다.

  3. "// Details of the Azure Relay" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    private const string RelayNamespace = "<namespace>.servicebus.windows.net";
    private const string ConnectionName = "creditcheckconnection";
    private const string KeyName = "RootManageSharedAccessKey";
    private const string Key = "<your key here>";
    
  4. 코드에서 <namespace>를 앞에서 만든 릴레이의 이름으로 바꾸고 앞서 저장한 AccessKeys.txt 파일에서 키를 복사한 다음, 이를 붙여넣어 <your key here>를 바꿉니다.

AccessKeys.txt를 삭제하는 것을 잊지 마세요. 프로덕션 코드에서 이러한 값을 Azure Key Vault와 같은 안전한 위치에 유지합니다.

이제 발신기 앱에는 Azure에서 릴레이에 연결하고 인증하는 데 필요한 모든 정보가 있습니다.

발신기 앱에서 요청 보내기

신용 조회를 요청하기 위해 발신기 앱이 HTTP GET 요청 내의 이름을 릴레이로 보냅니다. 해당 요청을 작성하는 코드를 써 보겠습니다.

  1. 발신기 앱에 대한 Program.cs 코드 파일에서 "// Create an HttpClient and formulate the request" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    var client = new HttpClient();
    var request = new HttpRequestMessage()
    {
        RequestUri = uri,
        Method = HttpMethod.Get,
        Content = new StringContent(name)
    };
    request.Headers.Add("ServiceBusAuthorization", token);
    
  2. "// Send the request" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    var response = await client.SendAsync(request);
    
  3. "// Display the result" 주석을 찾습니다. 주석 바로 뒤에 다음 코드를 추가합니다.

    Console.WriteLine(await response.Content.ReadAsStringAsync());
    
  4. Ctrl+S를 선택하여 변경 내용을 저장한 후 Ctrl+Q를 선택하여 편집기를 닫습니다.

앱 시작

수신기 및 발신기 앱이 완성되었습니다. 이제 두 앱을 실행하고 발신기를 사용하여 신용 조회를 요청한 다음 두 앱에서 결과를 관찰할 수 있습니다. 두 앱을 한 번에 실행하려면 Cloud Shell의 두 번째 인스턴스를 사용하여 발신기를 호스트합니다.

  1. Cloud Shell에서 수신기 앱을 빌드하고 실행하려면 다음 명령을 실행합니다.

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/listener
    dotnet run
    
  2. "서버 수신 대기" 메시지가 수신되면 발신기를 시작할 수 있습니다. 브라우저의 새 인스턴스를 열고 Azure Cloud Shell 시작 페이지로 이동합니다.

  3. 디렉터리를 선택하라는 메시지가 표시되면 Microsoft Learn 샌드박스를 선택합니다.

  4. 발신기 앱을 빌드하고 실행하려면 다음 명령을 실행합니다.

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/sender
    dotnet run
    

앱 테스트

이제 앱이 둘 다 별도의 Cloud Shell 인스턴스에서 실행되므로 신용 기록을 확인하여 테스트해 보겠습니다.

  1. 둘 다 볼 수 있도록 브라우저 창을 정렬합니다.

  2. 발신기 앱에서 이름을 입력한 후 Enter 키를 누릅니다.

    수신기 앱에 입력한 이름이 나타납니다.

    발신기 앱에서 수신기의 회신이 신용 조회 결과와 함께 나타납니다.

  3. 발신기 앱을 종료하려면 Enter 키를 누릅니다. 앱을 다시 실행하여 다른 이름을 조회할 수 있습니다. 작업이 완료되면 브라우저 창을 닫습니다.

  4. 수신기 앱을 종료하려면 Ctrl+C를 선택합니다.