안티패턴: 커스텀 코드 또는 대상으로 사용하여 프록시 내에서 프록시 호출

Apigee를 사용하면 다른 API 프록시에서 API 프록시 하나를 호출할 수 있습니다. 이 기능은 다른 API 프록시에서 사용할 수 있는 재사용 가능한 코드가 포함된 API 프록시가 있는 경우에 특히 유용합니다.

안티패턴

대상 엔드포인트 또는 커스텀 자바스크립트 코드에서 HTTPTargetConnection을 사용하여 API 프록시에서 다른 API 프록시를 호출하면 추가 네트워크 홉이 발생합니다.

HTTPTargetConnection을 사용하여 프록시 1에서 프록시 2 호출

다음 코드 샘플은 HTTPTargetConnection을 사용하여 프록시 1에서 프록시 2를 호출합니다.

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>https://api-test.example.com/proxy2</URL>
</HTTPTargetConnection>

자바스크립트 코드에서 프록시 1에서 프록시 2 호출

다음 코드 샘플은 자바스크립트를 사용하여 프록시 1에서 프록시 2를 호출합니다.

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('https://api-test.example.com/proxy2);
response.waitForComplete();

코드 흐름

코드 흐름의 고유한 단점이 있는 이유를 이해하려면 아래 다이어그램에 나와 있는 것처럼 요청이 라우팅되는 경로를 파악해야 합니다.

1) 클라이언트가 프록시 1에 요청 전송, 2) 프록시 1에서 프록시 2로 보내는 요청으로 인해 네트워크 홉 발생, 3) 프록시 2에서 대상으로 요청.
그림 1: 코드 흐름

다이어그램에서 볼 수 있듯이 요청은 라우터와 메시지 프로세서를 비롯한 여러 분산 구성요소를 통과합니다.

위의 코드 샘플에서 프록시 1을 프록시 2로 호출하면 런타임 시 기존 경로(라우터 > MP)를 통해 요청을 라우팅해야 한다는 의미입니다. 클라이언트에서 API를 호출하여 지연 시간에 추가되는 네트워크 홉을 여러 개 만들게 되는 것과 유사합니다. 이러한 홉은 프록시 1 요청이 이미 MP에 도달했을 것이기 때문에 필요하지 않습니다.

영향

API 프록시에서 다른 API 프록시를 호출하면 불필요한 네트워크 홉이 발생합니다. 이는 메시지 프로세서에서 다른 메시지 프로세서로 요청을 전달해야 하기 때문입니다.

권장사항

  • API 프록시에서 다른API 프록시를 호출할 때 프록시 연결 기능을 사용합니다. 프록시 연결은 로컬 연결을 사용하여 대상 엔드포인트(다른 API 프록시)를 참조하므로 더 효율적입니다.

    코드 샘플은 엔드포인트 정의에 LocalTargetConnection을 사용한 프록시 연결을 보여줍니다.

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>
    

    호출된 API 프록시는 동일한 메시지 프로세서 내에서 실행됩니다. 따라서 다음 그림과 같이 네트워크 홉이 방지됩니다.

    1) 클라이언트가 프록시 1에 요청 전송, 2) 의사 로컬 호출을 통해 프록시 1에서 프록시 2로 요청이 전송됨, 3) 프록시 2에서 대상으로 요청.
    그림 2: 프록시 연결을 사용하는 코드 흐름

추가 자료