기존 API 프록시에 Node.js 추가

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

소개

이 주제에서는 로컬 파일 시스템의 기존 프록시에 Node.js 애플리케이션을 추가하는 방법과 프록시를 Apigee Edge에 배포하는 방법을 설명합니다.

개발 환경 준비

이 주제에서는 로컬 시스템에 프록시 개발 환경이 이미 설정되어 있고 Node.js 애플리케이션을 통합하려고 한다고 가정합니다.

Node.js 앱이 포함된 프록시 애플리케이션의 기본 구조는 아래 그림의 패턴을 따르며 기본 /apiproxy 폴더와 하위 폴더는 리소스, 대상, 프록시로 지정됩니다. apiproxy/resources/node 폴더에는 Node.js 파일이 있어야 합니다. 다른 폴더에는 프록시 및 대상 엔드포인트, 프록시 흐름, 조건부 흐름 등을 정의하는 XML 파일이 포함됩니다. API 프록시 구조에 대한 자세한 설명은 API 프록시 구성 참조를 확인하세요.

프록시의 일부인 모든 Node.js 코드는 /apiproxy/resources/node 아래에 있어야 합니다. 배포 시 Edge가 이 위치를 찾을 것으로 예상합니다.

ScriptTarget으로 Node.js 대상 지정

Node.js를 프록시에 통합하기 위한 핵심은 타겟 엔드포인트의 XML 파일에 <ScriptTarget> 요소를 지정하는 것입니다. 프록시 파일 구조에서 이 XML 파일은 apiproxy/targets에 있습니다. 기본적으로 파일 이름은 default.xml입니다.

이해를 돕기 위해 대상 엔드포인트는 일반적으로 일종의 백엔드 서비스를 가리킵니다. 여기서는 Apigee 모의 대상 서비스를 사용합니다. 대상 엔드포인트 정의는 다음과 같습니다.

<TargetEndpoint name="default">
    <Description/>
    <Flows/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <HTTPTargetConnection>
        <URL>http://mocktarget.apigee.net/</URL>
    </HTTPTargetConnection>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</TargetEndpoint>

<HTTPTargetConnection> 요소는 백엔드 서비스의 URL인 Apigee 모의 대상 서비스를 지정합니다.

하지만 Node.js의 경우 Node.js 애플리케이션 자체 대상입니다. apiproxy/targets/default.xml 파일의 <ScriptTarget>을 사용하여 이를 지정합니다.

대상은 <HTTPTargetConnection> 요소를 사용하여 백엔드 서비스의 URL을 지정하는 대신, 다음과 같이 <ScriptTarget> 요소를 사용하여 직접 참조됩니다.

<TargetEndpoint name="default">
    <ScriptTarget>
         <ResourceURL>node://server.js</ResourceURL>
    </ScriptTarget>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
</TargetEndpoint>

<ResourceURL> 매개변수 앞에는 항상 node:// 프리픽스를 붙여야 하고 그 뒤에 기본 Node.js 스크립트의 이름이 와야 합니다. 앞에서 설명한 것처럼 Node.js 리소스는 API 프록시 범위의 /apiproxy/resources/node에 있어야 합니다.

ScriptTarget에서 추가 매개변수를 설정할 수 있습니다. 자세한 내용은 고급 ScriptTarget 구성을 참고하세요.

이 예에서 server.js라고 하는 기본 Node.js 파일의 소스 코드는 다음과 같습니다. 요청을 수신하면 'Hello World!'를 반환하는 기본 HTTP 서버입니다.

var http = require('http');
console.log('node.js application starting...');
var svr = http.createServer(function(req, resp) {
    resp.end('Hello, Node!');
});

svr.listen(process.env.PORT || 9000, function() {
    console.log('Node HTTP server is listening');
});

요약하자면, 기본 Node.js 애플리케이션이 server.js라는 파일에 구현되고 엔드포인트 구성의 이름이 모두 default.xml이라고 가정할 때, Node.js 스크립트가 포함된 API 프록시의 구조는 다음과 같습니다.

/apiproxy/proxyName.xml
/apiproxy/proxies/default.xml
/apiproxy/targets/default.xml
/apiproxy/resources/node/server.js

애플리케이션 배포 준비

대부분의 Node.js 앱에는 종속 항목 파일이 있으며 기본 디렉터리에 package.json 파일이 포함되어 있습니다. 이 경우 배포하기 전에 npm 유틸리티를 실행하여 최상위 node_modules 디렉터리에 종속 항목을 채우는 것이 좋습니다. node_modules에 포함되지 않은 원격 종속 항목이 있으면 Node.js 애플리케이션이 Edge에서 실행되지 않습니다.

npm 유틸리티를 사용하여 파일 시스템의 모든 종속 항목을 쉽게 검색할 수 있습니다.

  1. Node.js 애플리케이션의 기본 디렉터리에서 다음을 실행합니다.
$ npm install 

또는

$ npm update

종속 항목이 설치되면 Edge에 프록시를 배포할 수 있습니다.

Apigee Edge에 Node.js 앱 배포

배포하기 전에 Apigee Edge 계정의 조직 이름, 사용자 이름, 비밀번호를 알아야 합니다. 배포 도구 명령어를 올바르게 작성하려면 이 정보가 필요합니다.

명령어는 다음과 같습니다. -d 플래그를 사용하여 사용자가 프록시의 루트 디렉터리에 있다고 가정합니다. 프록시가 foo이면 foo 디렉터리에서 다음 명령어를 입력합니다.

$ apigeetool deployproxy -u username -p password -o org -e test -n hellonode -d .
각 명령어 플래그의 의미를 알아보려면 다음을 실행하세요.

$ apigeetool deployproxy -h

간단한 요약은 다음과 같습니다.

  • -n 이 플래그를 사용하면 앱이 배포될 때 생성될 프록시의 이름을 지정할 수 있습니다. 이 이름은 관리 UI에 표시됩니다.
  • -d는 API 프록시의 루트 디렉터리를 지정합니다.
  • -o, -e, -u, -p는 조직 이름, 배포 환경, 사용자 이름, 비밀번호를 지정합니다.
이제 모든 작업이 완료되었습니다. Node.js 앱이 API 프록시로 래핑되고 Edge에 배포되고 실행됩니다. 요청을 기다리고 있으며 테스트할 준비가 되었습니다.

새 API 프록시 테스트

Node.js 앱을 기존 API 프록시에 추가하고 프록시를 Apigee Edge에 배포했습니다. 테스트하려면 다음 cURL 명령어를 실행하세요. 기본 경로 (/)가 사용된다고 가정합니다 (기본 경로는 프록시 엔드포인트 구성 파일에 지정됨). org_name을 조직 이름으로 대체해야 합니다. cURL이 설치되어 있지 않으면 브라우저에 URL을 입력할 수 있습니다.

$ curl http://org_name-test.apigee.net/
Hello, Node!

관리 UI에서 새 프록시 보기

Apigee Edge 계정에 로그인하고 API 프록시 페이지로 이동합니다. 'hellonode'라는 프록시가 나열되어 있는 것을 확인할 수 있습니다.

'hellonode'를 클릭하여 프록시 세부정보를 확인합니다. 개발 뷰에서 업로드한 소스 코드를 확인하고, 정책을 추가하고, 흐름을 수정하는 등의 작업을 수행할 수 있습니다.

다음 단계

Apigee Edge에서 실행되는 Node.js 애플리케이션 디버깅에 대한 자세한 내용은 Node.js 프록시 디버깅 및 문제 해결을 참조하세요.