API 프록시 체이닝

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

한 프록시가 다른 프록시의 대상 엔드포인트임을 지정하여 프록시 체인에서 두 프록시를 효과적으로 연결할 수 있습니다. 이러한 방식으로 프록시를 연결하면 네트워크 홉을 피하고 전반적인 성능을 개선할 수 있습니다.

프록시 연결을 사용하여 하나의 프록시가 다른 프록시의 로컬 대상 엔드포인트임을 지정합니다. 두 번째 프록시를 호출하기 위해 HTTPTargetConnection 요소를 사용하는 대신 LocalTargetConnection 요소를 사용합니다.

<LocalTargetConnection>
    <APIProxy>myproxy2</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

다른 프록시가 사용하게 될 일부 개별 하위 수준 기능을 제공하는 프록시가 있는 경우 프록시 연결이 유용할 수 있습니다. 예를 들어 백엔드 데이터 저장소와 함께 생성/읽기/업데이트/삭제 작업을 노출하는 프록시는 클라이언트에 데이터를 노출하는 다른 여러 프록시의 대상 프록시가 될 수 있습니다.

동영상: API 프록시 연결에 대해 자세히 알아보려면 짧은 동영상을 확인하세요.

프록시 연결 작동 방식

프록시 연결은 한 프록시를 다른 프록시에서 호출할 때 로컬 연결을 사용하여 네트워크 오버헤드를 최소화합니다. 이 로컬 연결은 부하 분산기, 라우터, 메시지 프로세서와 같은 네트워크 기능을 우회하므로 더 효율적입니다.

다음은 HTTPTargetConnection을 통한 프록시 연결과 LocalTargetConnection(프록시 연결)의 차이점을 보여줍니다.

프록시 연결을 사용하지 않는 프록시 간 호출 다이어그램

프록시 연결을 사용하는 프록시 간 호출 다이어그램

한 프록시가 다른 프록시의 로컬 대상 엔드포인트임을 지정하여 프록시에 연결합니다. 위의 다이어그램(프록시 연결을 통한 프록시 간 호출)의 구성에서는 ProxyB(/proxyB)를 ProxyA(/proxyA)의 로컬 대상 엔드포인트로 지정해야 합니다. 이로 인해 ProxyA에 도착한 요청이 ProxyB로 전달됩니다.

다음 두 가지 방법으로 프록시 간에 로컬 연결을 만들 수 있습니다.

  • 대상 프록시 이름과 ProxyEndpoint 이름 지정
  • 대상 프록시 엔드포인트의 경로 지정

아래 설명된 대로 LocalTargetConnection 요소를 사용하여 TargetEndpoint 구성 내에서 대상 프록시를 연결합니다.

프록시 이름으로 프록시 연결

이름으로 대상 프록시를 지정할 수 있습니다. 이 방법은 처음부터 연결을 만들고 프록시를 같이 개발하는 경우에 가장 유용합니다. 이름을 모르거나 이름이 변경될 수 있는 경우 아래에 설명된 대로 대상 프록시의 엔드포인트 경로와 연결하는 것이 좋습니다.

이름으로 대상 프록시에 연결할 때 프록시 이름과 해당 ProxyEndpoint의 이름을 지정합니다.

다음 예시에서는 data-manager라는 대상 프록시와 data-manager에서 노출하는 ProxyEndpoint 이름을 지정합니다. 자세한 내용은 API 프록시 구성 참조를 확인하세요.

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <APIProxy>data-manager</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>
</TargetEndpoint>

경로로 프록시 연결

엔드포인트 경로를 사용하여 대상 프록시를 지정할 수 있습니다. 프록시 이름을 모르거나 이름이 변경될 수 있는 경우 이렇게 하는 것이 좋습니다.

프록시가 대상 프록시의 소비자가 되는 경우(개발자가 둘 다 개발하지 못한 경우) 경로 연결이 가장 안정적인 연결 방법일 수 있습니다. 예를 들어 연결 중인 프록시를 다른 팀에서 개발하고 유지보수하는 경우 신뢰할 수 있는 엔드포인트 경로를 사용하여 연결할 수 있습니다.

다음 예시에서는 /v1/streetcarts/foodcarts/data-manager에서 대상 프록시를 지정합니다. 여기서 호스트는 현재 프록시와 동일하다고 가정합니다. 관련 정보는 API 프록시 구성 참조를 확인하세요.

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <Path>/v1/streetcarts/foodcarts/data-manager</Path>
    </LocalTargetConnection>
</TargetEndpoint>

<LocalTargetConnection> 아래의 <Path> 요소는 문자열일 수 있으며, 메시지 템플릿을 사용하여 값을 동적으로 할당할 수 있습니다.

Apigee UI를 사용하여 프록시 연결

Apigee UI를 사용하여 프록시 이름 또는 경로로 프록시를 연결할 수도 있습니다. 다음 예시에서는 ProxyA와 ProxyB라는 2개의 프록시가 있고 ProxyB를 ProxyA의 대상 엔드포인트로 만들려고 합니다. 프록시를 프록시 이름으로 연결하려면 다음 단계를 따르세요.

  1. Apigee UI에 로그인합니다.
  2. 왼쪽 창에서 개발 > 프록시를 선택합니다.
  3. 프록시 목록에서 ProxyA를 선택합니다.
  4. 개발 탭을 클릭합니다.
  5. 코드 창에서 XML의 <TargetEndpoint> 섹션을 다음으로 바꿉니다.
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. 저장을 클릭합니다.

연결된 프록시, API 제품, 보안

프록시 연결은 두 프록시가 동일한 API 제품에 있는 경우에 가장 적합합니다. 기본적으로 클라이언트는 두 프록시 모두 사용할 수 있습니다. 현재 Apigee는 클라이언트가 액세스할 수 없는 별도 API 제품의 두 번째 프록시를 번들로 묶는 것을 지원하지 않습니다.

다이렉트 고객 요청에 대비해 두 번째 프록시를 보호해야 하는 경우, 두 번째 프록시가 클라이언트의 IP 주소를 검사하도록 로직을 추가하는 것이 좋습니다. 프록시 연결을 통해 이루어지는 호출의 경우 IP 주소가 로컬로 수행됩니다. 계속 진행하기 전에 코드로 로컬 여부를 검증할 수 있습니다. 그 방법은 AccessControl 정책을 참조하세요.