Node.js 모듈의 Edge 지원 이해

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

Apigee Edge에서 지원되는 Node.js 버전은 무엇인가요?

Edge는 현재 Node.js 0.10.32를 지원합니다.

Edge에서 지원되는 표준 Node.js 모듈은 무엇인가요?

다음 표를 사용하여 Edge에 포함된 표준 Node.js 모듈을 확인하세요. 포함된 모듈이 일부만 지원되는 경우도 있습니다. Node.js에 기본 제공되는 모듈입니다.

모듈 상태 Notes
assert 지원됨
buffer 지원됨
child_process 제한됨 하위 프로세스를 생성하려고 시도하면 예외가 발생합니다. 하지만 아래 첨자 생성에는 '포크'가 지원됩니다.
cluster 사용 중지됨 cluster.isMaster 메서드는 항상 true를 반환하며 다른 메서드는 구현되지 않습니다. 각 Node.js 스크립트의 사본 1개가 각 Edge 메시지 프로세서에 배포됩니다.
crypto 지원됨
dns 지원됨
domain 지원됨
dgram 제한됨 Apigee 환경의 Node.js 애플리케이션은 Google의 네트워크 아키텍처로 인해 UDP를 통해 인터넷 서비스에 액세스할 수 없습니다.
events 지원됨
fs 제한됨 파일 시스템 액세스는 스크립트가 실행된 디렉터리(/resources/node 디렉터리)로 제한됩니다. Node.js 스크립트는 이 디렉터리 내의 파일(예: 임시 스크래치 영역)을 읽고 쓸 수 있지만 파일이 유지되는 기간에 대한 보장은 없습니다.
http 지원됨 수신 요청의 가상 호스트와 경로는 HTTP 모듈이 아닌 API 프록시에서 지정됩니다. 자세한 내용은 'http 및 https 모듈 지원 이해'를 참고하세요.
https 지원됨 'https' 서버를 만들면 'http' 서버와 동일하게 작동합니다. 자세한 내용은 'http 및 https 모듈 지원 이해'를 참고하세요.
module 지원됨
net 제한됨 들어오는 TCP 연결을 수신 대기하려고 하면 예외가 발생합니다.
path 지원됨
module 지원됨
process 부분 지원 사용자 ID, 그룹 멤버십, 작업 디렉터리를 조작하는 기능은 지원되지 않습니다.
punycode 지원됨
querystring 지원됨
readline 사용 중지됨 Apigee Edge에서 실행되는 스크립트에는 표준 입력이 없습니다.
repl 사용 중지됨 Apigee Edge에서 실행되는 스크립트에는 표준 입력이 없습니다.
module 포함됨
STDIO 지원됨

표준 출력 및 오류는 Apigee Edge 인프라 내의 로그 파일로 라우팅됩니다. API 프록시의 Node.js 로그 버튼과 Apigee Edge 관리 UI를 클릭하여 로그를 볼 수 있습니다.

Apigee Edge에서 실행되는 스크립트에는 표준 입력이 없습니다. 그러나 TargetEndpoint의 ScriptTarget 요소를 사용하여 인수를 전달할 수 있습니다. 자세한 내용은 고급 ScriptTarget 구성을 참고하세요.

stream 지원됨
string_decoder 지원됨
timers 포함됨
tls 지원됨 전송 계층 보안 (TLS) 매개변수는 기본적으로 일반 Node.js에서 작동하는 방식과 동일하게 작동합니다. 자세한 내용은 Apigee Edge에서 TLS (SSL) Node.js 모듈 사용을 참조하세요.
tty 사용 중지됨 Apigee Edge에서 실행되는 스크립트에는 표준 입력이 없습니다.
url 지원됨
util 지원됨
vm 지원됨
zlib 지원됨

추가 지원 모듈

이 섹션에는 표준 Node.js에서는 지원되지 않지만 Apigee Edge에서 실행되는 Trireme 및 Trireme에서 지원되는 추가 모듈이 나와 있습니다. Trireme은 Apigee Edge에서 실행되는 오픈소스 Node.js 컨테이너입니다. Java 가상 머신 (JVM) 내에서 Node.js 스크립트를 실행하도록 설계되었습니다. 이 모듈은 모두 NPM에서 사용할 수 있습니다.

모듈 설명
apigee-access Apigee Edge 플랫폼에서 실행되는 Node.js 애플리케이션이 Apigee 관련 기능에 액세스할 수 있도록 허용합니다. 이 모듈을 사용하여 흐름 변수에 액세스 및 수정하고, 보안 저장소에서 데이터를 검색하고, 에지 캐시, 할당량, OAuth 서비스를 사용할 수 있습니다. apigee-access 모듈 사용도 참고하세요.
trireme-support Node.js 애플리케이션이 Trireme 고유의 기능을 활용할 수 있게 합니다. 현재 지원되는 기능은 자바로 빌드된 Node.js 모듈을 로드하는 기능입니다. 참고: loadJars는 Edge Cloud에서 지원되지 않습니다.
trireme-xlst XLST 처리의 추상화를 제공합니다. 특히 Java에서 Node.js 애플리케이션을 실행할 때 XSLT를 효율적으로 처리할 수 있도록 Trireme 플랫폼용으로 설계되었습니다.
trireme-jdbc Node.js에서 JDBC에 대한 액세스 권한을 제공합니다. 참고: Edge Cloud에서는 지원되지 않습니다. Edge Private Cloud의 경우 클래스 경로에 JDPC JAR 파일을 배치하고 이 모듈을 사용할 수 있습니다.

일반적으로 사용되는 Node.js 모듈 지원

Node.js 스크립트의 제한사항

하지만 Edge는 Node.js 스크립트에 다음과 같은 특정 제한사항을 적용합니다.

  • Apigee Edge 환경의 Node.js 애플리케이션은 에지 네트워크 아키텍처로 인해 UDP를 통해 인터넷 서비스에 액세스할 수 없습니다.
  • 파일 시스템 액세스는 Node.js 스크립트가 실행된 디렉터리(/resources/node 디렉터리)로 제한됩니다. Node.js 스크립트는 이 디렉터리 내의 파일(예: 임시 스크래치 영역)을 읽고 쓸 수 있지만 파일이 유지되는 기간에 대한 보장은 없습니다.
  • 들어오는 TCP 연결을 수신 대기하려고 하면 예외가 발생합니다.
  • 사용자 ID, 그룹 멤버십, 작업 디렉터리를 조작하는 기능은 지원되지 않습니다.
  • 표준 입력의 경우 TargetEndpoint의 ScriptTarget 요소를 사용하여 인수를 전달하는 것으로 제한됩니다. 자세한 내용은 고급 ScriptTarget 구성을 참고하세요.
  • 표준 출력의 경우 프록시의 에지 관리 UI에 있는 Node.js 로그 버튼만 사용하도록 제한됩니다. 'apigeetool getlogs' 명령어를 사용할 수도 있습니다. 자세한 내용은 독립형 Node.js 앱 배포를 참조하세요.
  • 네이티브 코드에 종속된 모듈은 지원되지 않습니다.
  • Promises 및 Generator와 같이 EcmaScript 6 기능을 사용하는 모듈은 지원되지 않습니다.
  • 'harmony-proxies'와 같은 Node.js 런타임 플래그는 지원되지 않습니다.

Private Cloud용 Edge에서 IP 연결 제한 설정

프라이빗 클라우드용 Edge는 Node.js 코드가 '10'으로 시작하는 IP 주소에 액세스하지 못하도록 제한할 수 있습니다. '192.168', localhost 이러한 IP 주소에 액세스하려고 하면 다음과 같은 형식의 오류가 표시됩니다.

{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }

이러한 제한사항을 수정하려면 각 메시지 프로세서의 message-processors.properties 파일에 있는 conf_nodejs_connect.ranges.denied 속성을 설정하여 수정할 수 있습니다. 기본적으로 이 속성의 값은 다음과 같습니다.

  • Edge 4.17.05 이하: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 이상: conf_nodejs_connect.ranges.denied= (제한 없음)

이 속성을 설정하는 방법은 다음과 같습니다.

  1. 편집기에서 message-processor.properties 파일을 엽니다. 파일이 존재하지 않으면 만듭니다.
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. 원하는 대로 속성을 설정합니다. 예를 들어 localhost에 대한 액세스만 거부하려면 다음과 같이 입력합니다.
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. 변경사항을 저장합니다.
  4. 속성 파일을 'apigee' 사용자가 소유해야 합니다.
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. 메시지 프로세서를 다시 시작합니다.
    > /<inst_root>/apigee/apigee-service/bin/apigee-service Edge-message-processor restart

http 및 https 모듈 지원 이해하기

Apigee Edge에서 실행되는 모든 Node.js 애플리케이션은 http 또는 https 모듈을 사용하여 수신 요청을 리슨해야 합니다. 들어오는 요청을 수신 대기하지 않는 스크립트를 배포하면 스크립트가 실행되고 종료되기만 하면 됩니다.

Node.js에서 httphttps 모듈의 listen 메서드는 포트 번호를 매개변수로 사용합니다. 예를 들면 다음과 같습니다.

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

Node.js에는 이 'port' 인수가 필요하지만 Apigee Edge는 이 매개변수를 무시합니다. 대신 Node.js 스크립트가 실행되는 API 프록시가 리슨하는 '가상 호스트'를 지정하고 Node.js 애플리케이션은 다른 Apigee Edge 프록시와 마찬가지로 동일한 가상 호스트를 사용합니다.

Apigee의 모든 환경에는 하나 이상의 가상 호스트가 있습니다. 가상 호스트는 Apigee 조직과의 연결을 위한 HTTP 설정을 정의합니다. 환경의 모든 API 프록시는 동일한 가상 호스트를 공유합니다. 기본적으로 각 환경마다 2개의 가상 호스트(defaultsecure)를 사용할 수 있습니다. 자세한 내용은 가상 호스트 가져오기API 개발 수명 주기를 참고하세요.

apigeetool deploynodeapp 명령어는 Node.js 애플리케이션 주위에 Apigee Edge 프록시 래퍼를 생성합니다. 배포되면 Node.js 애플리케이션이 환경에 정의된 기본 가상 호스트에서 리슨합니다. Node.js 애플리케이션의 URL은 항상 http://{org_name}-{env_name}.apigee.net입니다.

수신 요청 처리

다른 Apigee Edge 애플리케이션과 마찬가지로 프록시 애플리케이션이 secure 가상 호스트에서 리슨하도록 설정된 경우 HTTPS를 사용하여 수신 요청을 수락합니다.

발신 요청 처리

Apigee Edge 내부의 Node.js 애플리케이션은 수신 트래픽을 수신하는 것 외에도 httphttps 모듈을 사용하여 다른 Node.js 애플리케이션과 마찬가지로 아웃바운드 요청을 수행할 수 있습니다. 이러한 모듈은 Node.js 내에서 평소와 같이 작동합니다.

tls 모듈 지원 이해

Apigee Edge는 Node.js TLS 모듈을 지원합니다. 이 모듈은 OpenSSL을 사용하여 전송 계층 보안 (TLS) 또는 보안 소켓 레이어(SSL)로 암호화된 스트림 통신을 제공합니다. tls 모듈을 사용하여 Edge에서 실행되는 Node.js 애플리케이션에서 백엔드 서비스로의 보안 연결을 만들 수 있습니다.

Apigee Edge에서 tls 모듈이 작동하는 방식을 이해하려면 Apigee Edge에서 virtual hosts가 사용되는 방식을 이해해야 합니다. Apigee의 모든 환경에는 하나 이상의 가상 호스트가 있습니다. 가상 호스트는 Apigee 조직과의 연결을 위한 HTTP 설정을 정의합니다. 환경의 모든 API 프록시는 동일한 가상 호스트를 공유합니다. 기본적으로 각 환경에는 defaultsecure의 두 개의 가상 호스트를 사용할 수 있습니다. 가상 호스트에 관한 자세한 내용은 가상 호스트 가져오기API 개발 수명 주기를 참고하세요.

이제 Apigee Edge가 Node.js 애플리케이션에서 수신 및 발신 요청에 대해 TLS (SSL) 통신을 처리하는 방식을 살펴보겠습니다.

수신 요청 처리

조직에 가상 호스트가 구성된 방법에 따라 Edge는 다음 옵션을 제공합니다.

  • API 프록시가 default 가상 호스트에서 리슨하도록 구성된 경우 HTTP를 통해 요청을 수락합니다.
  • API 프록시가 secure 가상 호스트에서 리슨하도록 구성된 경우 HTTPS를 통한 요청을 수락합니다. URL은 apigee.net 도메인에 속하며 *.apigee.net의 와일드 카드 SSL 인증서가 사용됩니다. 앱이 apigee.net 도메인에 요청하는 한 SSL 인증서가 정상적으로 유효성을 검사합니다.

발신 요청 처리

일반적으로 Node.js에서와 동일한 방식으로 tls 모듈을 사용하여 발신 요청을 할 수 있습니다. 기본적으로 클라이언트 측 키와 인증서(.pem 파일)를 resources/node 디렉터리에 추가하고 스크립트 내에 로드해야 합니다. tls 모듈 및 메서드 사용에 대한 자세한 내용은 Node.js tls 모듈 문서를 참조하세요.

고급 ScriptTarget 구성

<TargetEndpoint> 정의에서 <ScriptTarget> 요소는 <ResourceURL> 외에 추가 선택적 매개변수를 사용합니다. <EnvironmentVariables> 및 <Arguments> 매개변수를 사용하여 명령줄 인수와 환경 변수를 Node.js 스크립트에 전달할 수도 있습니다.
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>