본문 바로가기

Study

[내일배움캠프 TIL] 마이크로서비스(MSA) 간 통신 방법 총정리

728x90
반응형

마이크로서비스 아키텍처에서는 시스템이 쪼개진 만큼 서비스 간 통신 방식이 매우 중요합니다. 통신 방식은 크게 동기(Synchronous)와 비동기(Asynchronous) 두 가지로 나뉩니다.

1. 동기 통신 (Synchronous Communication)

요청을 보낸 서비스가 응답이 올 때까지 가지 않고 기다리는(Blocking) 방식입니다. 구조가 직관적이라 가장 많이 쓰이지만, 호출 지연(Latency)이 연쇄적으로 늘어날 수 있습니다.

① HTTP / REST API (OpenFeign)

  • 개념: 가장 대중적이고 표준적인 통신 방식입니다. 스프링 생태계에서는 OpenFeign 라이브러리를 사용해 편리하게 구현합니다.
  • 장점: 웹 표준 준수, 구현 및 디버깅 용이, 기술 스택 무관.
  • 단점: 헤더가 무겁고 JSON 기반이라 데이터 크기가 큼. 블로킹(Blocking)으로 인한 성능 병목 가능성.

② gRPC (Google Remote Procedure Call)

  • 개념: HTTP/2 기반의 고성능 RPC 프레임워크입니다. JSON 대신 이진 형식인 Protocol Buffers를 사용합니다.
  • 장점: JSON보다 획기적으로 빠른 속도와 적은 대역폭 소모. 양방향 스트리밍 가능.
  • 단점: 바이너리 데이터라 디버깅이 까다로움. .proto 파일 동기화 및 관리 공수 발생.

2. 비동기 통신 (Asynchronous Communication)

요청을 보낸 뒤 응답을 기다리지 않고 자기 할 일을 바로 하는(Non-blocking) 방식입니다. 중간에 메시지 큐(Message Queue)를 두고 이벤트를 주고받습니다.

① 메시지 브로커 (Kafka, RabbitMQ)를 통한 이벤트 기반 통신

  • 개념: 발행자(Publisher)가 이벤트를 던지면 구독자(Subscriber)들이 가져가 처리하는 방식입니다.
  • 장점: 서비스 간 결합도 완벽 해소(Decoupling). 장애 격리 및 트래픽 버퍼 역할 수행.
  • 단점: 추가 인프라 관리 비용. 실시간 데이터 정합성 확인의 어려움(최종 일관성).

3. 어떤 상황에 어떤 통신 방법을 써야 할까?

REST API / gRPC가 적합한 상황:

  • 즉각적인 응답(결과 확인)이 반드시 필요한 경우 (예: 로그인 검증, 실시간 결제 승인, 주문 가능 수량 조회)

메시지 큐(Kafka)가 적합한 상황:

  • 부수적인 연쇄 작업이 많고 기다릴 필요가 없는 경우 (예: 알림톡 발송, 포인트 적립, 로그 전송 등)

4. 한눈에 보는 요약 표

반응형