앰배서더 패턴(Ambassador Pattern)은 클라이언트와 외부 서비스 사이에 프록시 역할을 하는 헬퍼 서비스를 두어 네트워크 통신을 단순화하는 패턴이다. 재시도, 서킷 브레이커, 인증 등 크로스커팅 네트워크 관심사를 분리한다.
구조
애플리케이션
│
│ localhost
▼
┌─────────────┐
│ 앰배서더 │ ← 재시도, 타임아웃, TLS, 인증
│ 프록시 │ 모니터링, 로깅
└──────┬──────┘
│ 네트워크
▼
외부 서비스
(DB, API, ...)
yaml
# Envoy 앰배서더 설정
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 3000 # 앱이 이 포트로 연결
clusters:
- name: external_api
connect_timeout: 5s
load_assignment:
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: api.example.com
port_value: 443
transport_socket:
name: envoy.transport_sockets.tls # TLS 처리
# 재시도 정책
route_config:
retry_policy:
retry_on: 5xx
num_retries: 3
per_try_timeout: 2s
레거시 앱에 적용
python
# 레거시 앱: 단순히 localhost:3000 으로 연결
import requests
# TLS, 재시도, 인증을 앰배서더가 처리
response = requests.get('http://localhost:3000/api/data')
# 앰배서더 (Go):
# - localhost:3000 수신
# - api.example.com으로 TLS 연결
# - 3회 재시도
# - Bearer 토큰 자동 추가
사이드카 vs 앰배서더
| 비교 | 사이드카 | 앰배서더 |
|---|
| 목적 | 범용 보조 | 외부 통신 전문화 |
| 방향 | 양방향 | 주로 아웃바운드 |
| 예시 | 로그 수집기 | API 게이트웨이 프록시 |
관련 개념