서비스 간 통신은 여러 서비스가 서로 필요한 데이터를 주고받거나 기능을 요청하는 방식이다.
서비스 간 통신이 필요한 이유
모놀리식 구조에서는 하나의 애플리케이션 내부에서 메서드 호출로 기능을 실행할 수 있다.
하지만 MSA에서는 기능이 각각 분리되어있으므로 다른 서비스의 기능이 필요할 때 네트워크를 통해 요청해야한다.
서비스 간 통신 방식의 종류
서비스 간 통신은 크게 동기 통신과 비동기 통신으로 나눌 수 있다.
1. 동기 통신
동기 통신은 한 서비스가 다른 서비스에 요청을 보내고, 응답이 올 때까지 기다리는 방식이다.
즉, 요청한 서비스는 상태의 서비스 처리 결과를 바로 받아야 다음 작업을 진행할 수 있다.
대표적인 방식은 다음과 같다.
RESTAPI
HTTP 기반으로 요청과 응답을 주고받는 방식이다.
가장 많이 사용되며, 구현과 테스트가 비교적 쉽다.
특징
- 구현이 단순하다
- 브라우저, Postman등으로 테스트하기 편하다.
- 응답을 기다려야 하므로 상대 서비스가 느리거나 장애가 나면 영향받기 쉽다
GRPC
Rest와 마찬가지로 요청과 응답 방식이지만, 더 빠르고 효율적인 통신을 위해 사용하는 방식이다.
Protocol Buffers를 사용하여 데이터를 직렬화하므로, 일반적인 JSON 기반 REST보다 성능이 좋은 편이다.
특징
- 속도가 빠르다
- 데이터 크기가 작다
- 서비스 간 내부 통신에 적합하다
- 사람이 바로 읽기 어렵고 초기 학습 비용이 있다
2. 비동기 통신
비동기 통신은 요청을 보낸 뒤 즉시 응답을 기다리지 않고 다음 작업을 진행하는 방식이다.
보통 메시지 브로커를 통해 이벤트나 메시지를 전달한다.
대표적인 방식은 다음과 같다.
메시지 큐
서비스가 메시지를 큐에 넣고, 다른 서비스가 큐에서 메시지를 꺼내 처리하는 방식이다.
예시 : RabbitMQ, ActiveMQ
특징
- 서비스 간 결합도가 낮아진다
- 일시적으로 상대 서비스가 느려도 버퍼 역할을 할 수 있다
- 순서 보장, 재시도, 실패 처리 등을 따로 고려해야한다.
이벤트 기반 통신
특정 사건이 발생했을 때 이벤트를 발행하고, 이를 구독한 서비스들이 처리하는 방식이다.
예시 : kafka, RabbitMQ
특징
- 확장성이 좋다
- 서비스 간 직접 호출이 줄어든다
- 최종 일관성 구조와 잘 어울린다
- 흐름 추적이 어렵고 디버깅이 복잡해질 수 있다
동기통신과 비동기통신 비교
| 구분 | 동기통신 | 비동기통신 |
| 처리방식 | 응답을 기다림 | 응답을 기다리지 않음 |
| 대표 예시 | RESTAPI, gRPC | kafka, RabbitMQ |
| 장점 | 이해하기 쉽고 즉시 결과 확인 가능 | 결합도 낮고 확장성 좋음 |
| 단점 | 장애 전파 가능성 높음 | 흐름 파악과 에러 처리 복잡 |
'Study' 카테고리의 다른 글
| Websocket 정리 (0) | 2026.04.19 |
|---|---|
| 그래프 표현, DFS/BFS, 최단경로 (0) | 2026.04.17 |
| 분산 트랜잭션과 데이터 일관성 (0) | 2026.04.14 |
| 데드락 (0) | 2026.04.13 |
| 동기화 (0) | 2026.04.12 |