PHpullh
학습 라이브러리/Java/마이크로서비스 통신 패턴

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 메타데이터를 가집니다.