Apigee X에서 ServiceCallout 및 FlowCallout을 사용하여 오케스트레이션을 어떻게 처리합니까?
Source: Dev.to
위의 링크에 포함된 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. 현재는 번역할 본문이 없으므로, 번역이 필요한 텍스트를 복사해서 알려 주세요.
소개
이 상황을 상상해 보세요: 클라이언트가 하나의 API를 호출하지만, 백엔드에서는 다음과 같은 작업을 수행해야 합니다:
- Customer Service 호출
- Order Service 호출
- Payment Service 호출
- 모든 응답을 결합
- 클라이언트에게 깔끔한 단일 응답 전송
백엔드가 이 모든 로직을 처리하면, 금세 느려지고, 결합도가 높아지며, 유지 관리가 어려워집니다. 바로 이런 상황에서 Apigee X가 빛을 발합니다. Apigee X는 백엔드 시스템 앞에 위치하여 스마트 트래픽 컨트롤러처럼 작동합니다:
- API 프록시 관리
- 보안 적용
- 트래픽 제어
- 다중 백엔드 호출 오케스트레이션
배울 내용
이 가이드를 마치면 다음을 이해하게 됩니다:
- API 오케스트레이션이 실제로 의미하는 바
- ServiceCallout과 FlowCallout을 언제 사용해야 하는지
- Apigee X 내에서 여러 백엔드 호출을 결합하는 방법
- 일반적인 오케스트레이션 실수를 피하기 위한 모범 사례
이 가이드는 초보자 친화적이며 실용적이고 바로 출판할 수 있습니다.
API 오케스트레이션 비유
- **당신(클라이언트)**이 하나의 주문을 합니다.
- 웨이터가 주방, 디저트 카운터, 결제 데스크와 소통합니다.
- 당신은 최종 한 접시를 받습니다.
Apigee X는 그 웨이터가 되어 여러 백엔드 서비스를 조정합니다.
API 프록시 개요
Apigee X의 API 프록시는 다음과 같은 계층입니다:
- 클라이언트 요청을 수신합니다
- 보안, 할당량 및 변환을 적용합니다
- 백엔드 서비스와 통신합니다
- 클라이언트에 응답을 반환합니다
클라이언트가 여러 서비스를 호출하는 대신, 단일 프록시를 호출합니다.
ServiceCallout vs FlowCallout
| Feature | ServiceCallout | FlowCallout |
|---|---|---|
| Purpose | 외부 REST/SOAP 서비스 호출 | 내부 헬퍼 로직 실행 (JS, 공유 플로우) |
| Typical Use | 다른 서비스에서 데이터 가져오기 | 정책, JavaScript, 공유 플로우 재사용 |
예시: 고객 요약 프록시
단일 API가 고객 상세 정보와 주문 요약을 반환해야 합니다. 내부적으로는 다음과 같이 동작합니다:
- Customer API 호출
- Order API 호출
- 응답을 결합
- 최종 응답 전송
클라이언트 요청: GET /customer-summary
Client → Apigee X → Multiple Backends → Final Response
ServiceCallout – 고객 조회
<ServiceCallout name="GetCustomer">
<Request>
<Set>
<Verb>GET</Verb>
<Path>/customers/{customerId}</Path>
</Set>
</Request>
<Response>customerResponse</Response>
<HTTPTargetConnection>
<URL>https://backend-customer-api</URL>
</HTTPTargetConnection>
</ServiceCallout>
무슨 일이 일어나고 있나요?
Apigee가 Customer API를 호출하고, 응답은 customerResponse에 저장됩니다. 아직 클라이언트는 관여하지 않습니다.
ServiceCallout – 주문 조회
<ServiceCallout name="GetOrders">
<Request>
<Set>
<Verb>GET</Verb>
<Path>/orders/{customerId}</Path>
</Set>
</Request>
<Response>orderResponse</Response>
<HTTPTargetConnection>
<URL>https://backend-order-api</URL>
</HTTPTargetConnection>
</ServiceCallout>
이제 Apigee는 고객 데이터와 주문 데이터를 모두 가지고 있습니다.
FlowCallout – 응답 결합
<FlowCallout name="CombineResponses">
<SharedFlow>combine-response-flow</SharedFlow>
</FlowCallout>
공유 흐름 내부 (JavaScript):
var customer = JSON.parse(context.getVariable("customerResponse.content"));
var orders = JSON.parse(context.getVariable("orderResponse.content"));
var finalResponse = {
customer: customer,
orders: orders
};
context.setVariable("response.content", JSON.stringify(finalResponse));
결과: 클라이언트는 여러 백엔드 호출을 알지 못한 채 단일 깔끔한 응답을 받습니다.
Best Practices
- 오케스트레이션을 가볍게 유지하세요 – Apigee를 전체 백엔드 대체물로 만들지 마세요.
- Shared Flows로 로직을 재사용하세요 – FlowCallout에 최적입니다.
- 실패를 우아하게 처리하세요 – 백엔드 타임아웃에
FaultRules를 사용합니다. - 타임아웃을 신중하게 설정하세요 – 다중 호출은 지연 위험을 증가시킵니다.
- 성능을 모니터링하세요 – 오케스트레이션은 처리 시간을 추가합니다.
- 문제 해결을 위해 중간 응답을 로그에 기록하세요.
피해야 할 일반적인 실수
- ❌ 순차적인 ServiceCallout을 너무 많이 수행하는 것.
- ❌ 백엔드 URL을 하드코딩하는 것.
- ❌ 타임아웃 및 재시도 정책을 무시하는 것.
- ❌ Apigee에 복잡한 비즈니스 로직을 포함하는 것.
- ❌ 중간 응답을 로깅하지 않는 것.
결론
Apigee X에서 API 오케스트레이션은 다음을 결합합니다:
- ServiceCallout – 외부 백엔드와 통신하기 위해.
- FlowCallout – 로직을 재사용하고 처리하기 위해.
이 패턴을 사용하면:
- 클라이언트 복잡성 감소
- API 일관성 향상
- 게이트웨이에서 제어 중앙화
이는 API 관리, 마이크로서비스 및 엔터프라이즈 통합에서 널리 사용됩니다.