Architecture
마이크로서비스 통신 패턴 (동기, 비동기)
TedDev
2024. 12. 25. 23:12
728x90
마이크로서비스 아키텍처에서 동기(Synchronous)와 비동기(Asynchronous) 통신 방식은 서로 다른 서비스 간 데이터 교환 및 작업 처리를 다루는 방식으로 각각의 특성과 용도가 있다.
1. 동기 호출(Synchronous)
특징
- 호출자가 요청을 보내고 응답을 받을 때까지 기다리는 방식.
- 서비스 간의 호출은 실시간으로 이루어지며 요청-응답 패턴이 명확.
- 일반적으로 HTTP/REST API가 동기 통신의 대표적인 예이다.
장점
- 구현이 간단하며 직관적.
- 호출 순서가 보장되고 응답 결과를 바로 처리할 수 있음.
- 디버깅이 상대적으로 쉬움 (문제가 발생한 지점 추적이 간단).
단점
- 의존성 문제 : 호출하는 서비스가 응답하지 않거나 느리면 호출자가 대기 상태에 빠짐.
- 성능 병목 : 여러 서비스가 연결되어 있으면 하나의 느린 서비스가 전체 시스템 성능에 영향을 줄 수 있음.
- 높은 결합도를 초래하여 확장성이 떨어질 수 있음.
사용 사례
- 실시간 데이터가 필요한 경우 (예: 사용자 인증, 상품 상세 조회).
- 작업의 결과를 즉시 확인해야 할 때.
2. 비동기 호출(Asynchronous)
특징
- 요청을 보내고 즉시 다음 작업을 수행하며 응답은 나중에 처리됨.
- 호출자는 응답을 기다리지 않고 비동기로 전달된 메시지가 처리되기를 기대한다.
- 메시지 브로커(RabbitMQ, Kafka, AWS SQS 등)를 사용하는 메시지 기반 통신이 일반적인 방식.
장점
- 서비스 간 독립성이 높아짐 (낮은 결합도).
- 높은 확장성과 유연성.
- 트래픽 급증 상황에서도 서비스 장애를 최소화 (비동기로 처리 대기열에 적재).
단점
- 복잡한 구현 (메시지 브로커나 큐 시스템 필요).
- 응답 시간이 명확하지 않을 수 있음.
- 장애 처리 및 메시지 유실 방지 등 추가적인 설계 요구.
사용 사례
- 비실시간 데이터 처리가 적합한 경우 (예: 이메일 발송, 로그 처리, 이벤트 알림).
- 작업이 긴 프로세스를 수반할 때 (예: 배치 작업, 비디오 처리).
3. 비교 요약
특성 | 동기 | 비동기 |
처리 흐름 | 요청-응답 즉시 처리 | 요청 후 나중에 응답 처리 |
결합도 | 높음 | 낮음 |
실시간성 | 실시간 처리 가능 | 지연 가능성 있음 |
성능 | 느린 서비스가 병목 유발 | 더 높은 처리량 및 확장성 |
구현 복잡도 | 비교적 간단 | 더 복잡 |
주요 기술 | HTTP/REST, gRPC | 메시지 큐, Kafka, RabbitMQ 등 |
결론
- 동기 통신은 실시간 데이터 요청-응답이 필요한 경우에 적합하며, 비동기 통신은 대규모 데이터 처리와 낮은 결합도가 요구되는 상황에서 유리하다
- 마이크로서비스 아키텍처에서는 상황에 따라 두 방식을 혼합하여 사용하는 경우가 많다. 예를 들어, 사용자 요청에 대한 응답은 동기 방식으로 처리하고 부가적인 작업(예: 로그 저장)은 비동기 방식으로 처리하는 식.
반응형