Node.js에서 Relay 하이브리드 연결 HTTP 요청 시작

이 빠른 시작에서는 HTTP 프로토콜을 사용하여 메시지를 보내고 받는 Node.js 받는 사람 및 보낸 사람 애플리케이션을 만듭니다. 애플리케이션은 Azure Relay 하이브리드 연결 기능을 사용합니다. Azure Relay에 대한 일반적인 내용은 Azure Relay를 참조하세요.

이 빠른 시작에서 수행하는 단계는 다음과 같습니다.

  1. Azure Portal을 사용하여 Relay 네임스페이스를 만듭니다.
  2. Azure Portal을 사용하여 해당 네임스페이스에 하이브리드 연결을 만듭니다.
  3. 메시지를 수신하는 서버(수신기) 콘솔 애플리케이션을 작성합니다.
  4. 메시지를 보내는 클라이언트(발신자) 콘솔 애플리케이션을 작성합니다.
  5. 애플리케이션을 실행합니다.

필수 조건

Azure Portal을 사용하여 네임스페이스 만들기

  1. Azure Portal에 로그인합니다.

  2. 왼쪽 메뉴에서 모든 서비스를 선택합니다. 통합을 선택하고 릴레이를 검색한 다음, 릴레이 위로 마우스 커서를 이동하여 만들기를 선택합니다.

    릴레이 선택을 보여 주는 스크린샷 - > 만들기 단추

  3. 네임스페이스 만들기 페이지에서 다음 단계를 수행합니다.

    1. 네임스페이스를 만들 Azure 구독을 선택합니다.

    2. 리소스 그룹의 경우 네임스페이스를 배치할 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.

    3. 릴레이 네임스페이스의 이름을 입력합니다.

    4. 네임스페이스를 호스팅해야 하는 지역을 선택합니다.

    5. 페이지 아래쪽에서 검토 + 만들기를 선택합니다.

      네임스페이스 만들기 페이지를 보여 주는 스크린샷

    6. 리뷰 + 생성 페이지에서 생성를 선택합니다.

    7. 몇 분 후에 네임스페이스에 대한 릴레이 페이지가 표시됩니다.

      릴레이 네임스페이스의 홈페이지를 보여 주는 스크린샷

관리 자격 증명 가져오기

  1. 릴레이 페이지의 왼쪽 메뉴에서 공유 액세스 정책을 선택합니다. `

  2. 공유 액세스 정책 페이지에서 RootManageSharedAccessKey를 선택합니다.

  3. 정책: RootManageSharedAccessKey 아래에서 기본 연결 문자열 옆에 있는 복사 단추를 선택합니다. 이 작업은 나중에 사용할 연결 문자열을 클립보드에 복사합니다. 메모장이나 기타 다른 위치에 임시로 이 값을 붙여 넣습니다.

  4. 앞의 단계를 반복하여 나중에 사용할 기본 키의 값을 복사하여 임시 위치에 붙여넣습니다.

    릴레이 네임스페이스의 연결 정보를 보여 주는 스크린샷

Azure Portal을 사용하여 하이브리드 연결 만들기

네임스페이스의 릴레이 페이지에서 다음 단계에 따라 하이브리드 연결을 만듭니다.

  1. 왼쪽 메뉴의 엔터티에서 하이브리드 연결을 선택한 다음, + 하이브리드 연결을 선택합니다.

    하이브리드 연결 페이지를 보여 주는 스크린샷

  2. 하이브리드 연결 만들기 페이지에서 하이브리드 연결 이름을 입력하고 만들기를 선택합니다.

    하이브리드 연결 만들기 페이지를 보여 주는 스크린샷

서버 애플리케이션(수신기) 만들기

릴레이에서 메시지를 수신 대기하고 받으려면 Node.js 콘솔 애플리케이션을 작성합니다.

Node.js 애플리케이션 만들기

listener.js라는 새 JavaScript 파일을 만듭니다.

릴레이 패키지 추가

프로젝트 폴더에 있는 노드 명령 프롬프트에서 npm install hyco-https를 실행합니다.

요청을 처리하는 일부 코드 작성

  1. 다음 상수를 listener.js 파일의 맨 위에 추가합니다.

    const https = require('hyco-https');
    
  2. 다음 상수를 하이브리드 연결 정보에 대한 listener.js 파일에 추가합니다. 대괄호 안의 자리 표시자를 하이브리드 연결을 만들 때 얻은 값으로 바꿉니다.

    • const ns - 릴레이 네임스페이스 정규화된 네임스페이스 이름을 사용해야 합니다. 예: {namespace}.servicebus.windows.net
    • const path - 하이브리드 연결의 이름
    • const keyrule - 공유 액세스 정책 키의 이름(기본적으로 RootManageSharedAccessKey)입니다.
    • const key - 이전에 저장한 네임스페이스의 기본 키입니다.
  3. listener.js 파일에 다음 코드를 추가합니다. :

    일반적인 createServer 함수 대신 createRelayedServer를 사용하는 것을 제외하고, 코드가 Node.js 초급자를 위한 자습서에서 확인할 수 있는 간단한 HTTP 서버 예제와 크게 다르지 않다는 것을 알 수 있습니다.

    var uri = https.createRelayListenUri(ns, path);
    var server = https.createRelayedServer(
        {
            server : uri,
            token : () => https.createRelayToken(uri, keyrule, key)
        },
        (req, res) => {
            console.log('request accepted: ' + req.method + ' on ' + req.url);
            res.setHeader('Content-Type', 'text/html');
            res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>');
        });
    
    server.listen( (err) => {
            if (err) {
              return console.log('something bad happened', err)
            }
            console.log(`server is listening on ${port}`)
          });
    
    server.on('error', (err) => {
        console.log('error: ' + err);
    });
    

    listener.js 파일은 다음과 같아야 합니다.

    const https = require('hyco-https');
    
    const ns = "{RelayNamespace}";
    const path = "{HybridConnectionName}";
    const keyrule = "{SASKeyName}";
    const key = "{SASKeyValue}";
    
    var uri = https.createRelayListenUri(ns, path);
    var server = https.createRelayedServer(
        {
            server : uri,
            token : () => https.createRelayToken(uri, keyrule, key)
        },
        (req, res) => {
            console.log('request accepted: ' + req.method + ' on ' + req.url);
            res.setHeader('Content-Type', 'text/html');
            res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>');
        });
    
    server.listen( (err) => {
            if (err) {
              return console.log('something bad happened', err)
            }
            console.log(`server is listening on ${port}`)
          });
    
    server.on('error', (err) => {
        console.log('error: ' + err);
    });
    

클라이언트 애플리케이션(보낸 사람) 만들기

Relay에 메시지를 보내려면 HTTP 클라이언트를 사용하거나 Node.js 콘솔 애플리케이션을 작성합니다.

Node.js 애플리케이션 만들기

릴레이를 만들 때 [클라이언트 인증 필요] 옵션을 사용하지 않도록 설정한 경우 임의 브라우저로 요청을 하이브리드 연결 URL에 보낼 수 있습니다. 보호된 엔드포인트에 액세스하기 위해서는 여기 표시된 ServiceBusAuthorization 헤더에 토큰을 만들고 전달해야 합니다.

시작하려면 sender.js라는 새 JavaScript 파일을 만듭니다.

릴레이 노드 패키지 관리자 패키지 추가

프로젝트 폴더에 있는 노드 명령 프롬프트에서 npm install hyco-https를 실행합니다. 이 패키지는 일반 https 패키지도 가져옵니다. 클라이언트 쪽에서 중요한 차이점은 패키지가 릴레이 URI 및 토큰을 생성하는 함수를 제공한다는 점입니다.

메시지를 보내는 코드 작성

  1. sender.js 파일 맨 위에 다음 constants를 추가합니다.

    const https = require('hyco-https');
    
  2. 다음 상수를 하이브리드 연결 정보에 대한 sender.js 파일에 추가합니다. 대괄호 안의 자리 표시자를 하이브리드 연결을 만들 때 얻은 값으로 바꿉니다.

    • const ns - 릴레이 네임스페이스 정규화된 네임스페이스 이름을 사용해야 합니다. 예: {namespace}.servicebus.windows.net
    • const path - 하이브리드 연결의 이름
    • const keyrule - 공유 액세스 정책 키의 이름(기본적으로 RootManageSharedAccessKey)입니다.
    • const key - 이전에 저장한 네임스페이스의 기본 키입니다.
  3. sender.js 파일에 다음 코드를 추가합니다. 코드는 Node.js HTTPS 클라이언트의 일반적인 사용과 크게 다르지 않습니다. 인증 헤더만 추가합니다.

    https.get({
         hostname : ns,
         path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path,
         port : 443,
         headers : {
             'ServiceBusAuthorization' : 
                 https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key)
         }
    }, (res) => {
         let error;
         if (res.statusCode !== 200) {
             console.error('Request Failed.\n Status Code: ${statusCode}');
             res.resume();
         } 
         else {
             res.setEncoding('utf8');
             res.on('data', (chunk) => {
                 console.log(`BODY: ${chunk}`);
             });
             res.on('end', () => {
                 console.log('No more data in response.');
             });
         };
    }).on('error', (e) => {
         console.error(`Got error: ${e.message}`);
    });
    

    sender.js 파일은 다음과 같아야 합니다.

    const https = require('hyco-https');
    
    const ns = "{RelayNamespace}";
    const path = "{HybridConnectionName}";
    const keyrule = "{SASKeyName}";
    const key = "{SASKeyValue}";
    
    https.get({
        hostname : ns,
        path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path,
        port : 443,
        headers : {
            'ServiceBusAuthorization' : 
                https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key)
        }
    }, (res) => {
        let error;
        if (res.statusCode !== 200) {
            console.error('Request Failed.\n Status Code: ${statusCode}');
            res.resume();
        } 
        else {
            res.setEncoding('utf8');
            res.on('data', (chunk) => {
                console.log(`BODY: ${chunk}`);
            });
            res.on('end', () => {
                console.log('No more data in response.');
            });
        };
    }).on('error', (e) => {
        console.error(`Got error: ${e.message}`);
    });
    

애플리케이션 실행

  1. Node.js 명령 프롬프트 형식 node listener.js의 서버 애플리케이션을 실행합니다.
  2. Node.js 명령 프롬프트 형식 node sender.js의 클라이언트 애플리케이션을 실행하고 일부 텍스트를 입력합니다.
  3. 서버 애플리케이션 콘솔이 클라이언트 애플리케이션에 입력된 텍스트를 출력하는지 확인합니다.

축하합니다. Node.js를 사용하여 엔드투엔드 하이브리드 연결 애플리케이션을 만들었습니다.

다음 단계

이 빠른 시작에서는 메시지를 보내고 받는 데 HTTP를 사용한 Node.js 클라이언트 및 서버 애플리케이션을 만들었습니다. Azure Relay의 하이브리드 연결 기능은 또한 WebSockets를 사용하여 메시지를 보내고 받을 수 있도록 지원합니다. Azure Relay 하이브리드 연결에 WebSockets를 사용하는 방법에 대한 자세한 내용은 WebSockets 빠른 시작을 참조하세요.

이 빠른 시작에서는 클라이언트 및 서버 애플리케이션을 만드는 데 Node.js를 사용했습니다. .NET Framework를 사용하여 클라이언트 및 서버 애플리케이션을 작성하는 방법은 .NET WebSockets 빠른 시작 또는 .NET HTTP 빠른 시작을 참조하세요.