3. 통신 및 통합
마이크로서비스는 서로 통신하여 비즈니스 로직을 완성합니다. 효과적인 통신 및 통합 전략은 MSA의 성공에 매우 중요합니다.
3.1. 서비스 간 통신 패턴: 동기 vs. 비동기
- 동기 통신 (Synchronous): 요청을 보낸 후 응답을 기다립니다. (예: HTTP/REST). 실시간 상호작용이 필요할 때 적합하지만, 서비스 간 의존성을 높이고 장애 전파 위험이 있습니다.
- 비동기 통신 (Asynchronous): 요청을 보내고 응답을 기다리지 않고 다음 작업을 진행합니다. (예: 메시지 큐, 이벤트 스트리밍). 서비스 간 결합도를 낮추고 복원력을 높이는 데 효과적입니다.
// 비동기 통신 (메시지 큐 예시)
// Order Service:
// send('order_placed_event', orderDetails);
// Notification Service:
// listen('order_placed_event', (orderDetails) => {
// sendEmail(orderDetails.customerEmail, 'Order Confirmation');
// });
3.2. API 게이트웨이 (API Gateway)
API 게이트웨이는 모든 클라이언트 요청을 받는 단일 진입점입니다. 요청 라우팅, 인증/인가, 로깅, 속도 제한 등 다양한 기능을 제공하여 클라이언트와 마이크로서비스 간의 복잡성을 숨겨줍니다.
3.3. 서비스 디스커버리 (Service Discovery)
마이크로서비스는 동적으로 생성되고 제거될 수 있으므로, 클라이언트나 다른 서비스가 특정 서비스의 인스턴스 위치를 찾아야 합니다. 서비스 디스커버리는 이를 자동화하는 메커니즘입니다.
- 클라이언트 측 디스커버리: 클라이언트가 서비스 레지스트리에서 서비스 인스턴스를 조회하여 직접 호출합니다. (예: Eureka, Consul)
- 서버 측 디스커버리: 라우터/로드 밸런서가 서비스 레지스트리에서 인스턴스를 조회하고 클라이언트 요청을 대신 라우팅합니다. (예: AWS ELB, Kubernetes Service)