JAVA · 디자인패턴
마이크로서비스 통신 패턴
동기(REST)/비동기(메시지 큐) 통신과 선택 기준을 비교합니다.
디자인패턴고급마이크로서비스REST메시지큐비동기통신
핵심 설명
동기(REST)/비동기(메시지 큐) 통신과 선택 기준을 비교합니다.
Java code
import java.util.*;
import java.util.concurrent.*;
public class MicroserviceCommunication {
// 1. 동기 통신 (REST)
interface UserClient {
String getUser(String id); // HTTP GET 호출
}
// 2. 비동기 통신 (메시지 큐)
static class MessageBroker {
private final Map<String, List<java.util.function.Consumer<String>>> subscribers =
new ConcurrentHashMap<>();
void subscribe(String topic, java.util.function.Consumer<String> handler) {
subscribers.computeIfAbsent(topic, k -> new CopyOnWriteArrayList<>())
.add(handler);
}
void publish(String topic, String message) {
System.out.printf("[MQ] 발행 %s: %s%n", topic, message);
List<java.util.function.Consumer<String>> handlers = subscribers.get(topic);
if (handlers != null) {
handlers.forEach(h -> {
CompletableFuture.runAsync(() -> h.accept(message));
});
}
}
}
public static void main(String[] args) throws Exception {
MessageBroker broker = new MessageBroker();
// 주문 서비스 -> 이벤트 발행
broker.subscribe("order.created", msg ->
System.out.println("[재고서비스] 재고 차감: " + msg));
broker.subscribe("order.created", msg ->
System.out.println("[알림서비스] 이메일 발송: " + msg));
broker.subscribe("order.created", msg ->
System.out.println("[분석서비스] 데이터 수집: " + msg));
broker.publish("order.created", "주문#1234");
Thread.sleep(500); // 비동기 처리 대기
}
}학습 팁
동기(REST): 즉각 응답 필요 시, 비동기(메시지): 느슨한 결합/확장성 필요 시. 대부분의 시스템은 둘 다 사용합니다.
주의할 점
동기 통신으로만 마이크로서비스를 연결하면 한 서비스 장애가 전체로 전파됩니다. 비동기 이벤트를 적극 활용하세요.
자주 묻는 질문
마이크로서비스 통신 패턴란 무엇인가요?
동기(REST)/비동기(메시지 큐) 통신과 선택 기준을 비교합니다.
마이크로서비스 통신 패턴 학습 시 주의할 점은 무엇인가요?
동기 통신으로만 마이크로서비스를 연결하면 한 서비스 장애가 전체로 전파됩니다. 비동기 이벤트를 적극 활용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.