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 등

결론

  • 동기 통신은 실시간 데이터 요청-응답이 필요한 경우에 적합하며, 비동기 통신은 대규모 데이터 처리와 낮은 결합도가 요구되는 상황에서 유리하다
  • 마이크로서비스 아키텍처에서는 상황에 따라 두 방식을 혼합하여 사용하는 경우가 많다. 예를 들어, 사용자 요청에 대한 응답은 동기 방식으로 처리하고 부가적인 작업(예: 로그 저장)은 비동기 방식으로 처리하는 식.

 

반응형