1. 개요
1) MSA란?
MSA(Microservices Architecture)는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 구성하는 아키텍처 패턴이다.
각 서비스는 특정한 비즈니스 기능을 담당하며, 독립적으로 배포 및 확장이 가능하다.
하지만, 이러한 구조에서는 개별 서비스가 단독으로 동작하는 것이 아니라, 다른 서비스와 데이터를 주고받으며 협력해야 한다. 따라서 서비스 간 원활한 통신이 필수적이다.
서비스 간 통신이 필요한 이유는 다음의 예시로 설명할 수 있다.
1. 데이터 공유 및 처리
- 특정 서비스에서 관리하는 데이터를 다른 서비스에서도 활용해야 하는 경우
- ex) 주문 서비스가 사용자 서비스에서 고객 정보를 가져와야 하는 경우
2. 업무 프로세스의 연속성
- 하나의 비즈니스 로직이 여러 서비스에 걸쳐 수행될 때
- ex) 사용자가 상품을 결제하면, 결제 서비스 -> 주문 서비스 -> 배송 서비스 순으로 처리가 진행되는 경우
3. 확장성과 독립적 배포
- 각 서비스가 독립적으로 배포되기 때문에, 서로 다른 서비스 간의 인터페이스를 통해 협력해야 한다.
- ex) 특정 서비스가 트래픽이 증가해 확장이 필요하더라도, 다른 서비스와의 통신이 원활해야 한다.
4. 서비스 분리 및 유지보수성 향상
- 단일 애플리케이션에서는 모든 기능이 한 코드베이스에서 이루어지지만, MSA에서는 각 기능이 독립적인 서비스로 분리됨
- ex) 결제 서비스에 장애가 발생해도, 상품 서비스는 정상적으로 운영될 수 있다.
2) 서비스 간 통신 방식의 주요 분류
서비스 간 통신 방식은 크게 동기(Synchronous) 통신과 비동기(Asynchronous) 통신으로 나뉜다.
1. 동기(Synchronous) 통신
동기 방식은 요청을 보낸 서비스가 응답을 받을 때까지 기다리는 방식이다.
대표적인 방식은 아래와 같다.
- REST API (HTTP)
- 가장 일반적
- JSON 또는 XML 형태의 데이터를 주고 받는다.
- 구현이 간단하지만, 네트워크 지연에 취약
- gRPC
- Google에서 개발한 고성능 RPC(Remote Procedure Call) 프레임워크
- Protocol Buffers(ProtoBuf) 기반의 이진 데이터 전송을 사용하여 성능이 뛰어나다.
- 다중 언어 지원 가능
- GraphQL
- 클라이언트가 필요한 데이터만 요청할 수 있는 쿼리 언어
- REST API보다 유연하지만, 캐싱이 어렵고 복잡도가 증가할 수 있다.
실시간 응답이 필요하거나 요청과 응답의 흐름이 명확한 경우 적합하다.
2. 비동기(Asynchronous) 통신
비동기 방식은 요청을 보낸 후 즉시 반환하고, 응답이 준비되었을 때 비동기적으로 처리하는 방식.
대표적인 방식은 아래와 같다.
- 메시지 큐 (Kafka, RabbitMQ)
- 중간 브로커를 활용하여 서비스 간 데이터를 주고받는다
- 발행과 구독 방식으로 확장성 좋음
- 네트워크 지연이 발생해도 메시지가 손실되지 않음
- 이벤트 기반 아키텍쳐
- 특정 서비스에서 이벤트를 발생시키면, 다른 서비스가 이를 감지하고 처리함
- 이벤트 소싱(Event Sourcing), 이벤트 브로커 등을 활용
- 서비스 간 결합도를 낮추고 확장성을 높여줌
서비스 간 결합도를 낮추고 대량의 데이터를 처리할 때 좋음.
'Spring' 카테고리의 다른 글
MSA의 비동기적(Asynchronous) 통신 (0) | 2025.02.28 |
---|---|
MSA의 동기적 (Synchronous) 통신 (0) | 2025.02.28 |
OpenFeign으로 API 호출 자동화하기 (0) | 2025.02.27 |
낙관적 락과 비관적 락 (0) | 2025.02.26 |
Spring Boot에서 Kafka 설정하기! (0) | 2025.02.19 |