메시징 시스템 활용 방식

시스템 간 데이터를 메시지 단위로 비동기 전달하여 서로 직접 연결 없이 통신할 수 있게 해주는 미들웨어입니다.

왜 필요한가?

[동기 방식]
A 서버 → B 서버 직접 호출
→ B가 죽으면 A도 실패
→ B가 느리면 A도 느려짐
→ 강한 결합

[메시징 시스템]
A 서버 → 메시지 큐 → B 서버
→ B가 죽어도 A는 정상 동작 O
→ B가 느려도 A는 영향 없음 O
→ 느슨한 결합

핵심 구성 요소

요소설명
Producer메시지를 생성하여 전송
Message전달되는 데이터 단위
Queue/Topic메시지를 저장하는 공간
Consumer메시지를 수신하여 처리
Broker메시지 전달을 중개하는 서버

동작 방식

Producer → [Broker(Queue)] → Consumer

1. Producer가 메시지 발행
2. Broker가 메시지 저장
3. Consumer가 메시지 소비
→ Producer와 Consumer는 서로 모름 (느슨한 결합)

Queue vs Topic

QueueTopic
전달 방식1:1 (하나의 Consumer만 수신)1:N (여러 Consumer 수신)
메시지 소비하나가 가져가면 삭제구독자 모두에게 전달
용도작업 분산이벤트 브로드캐스트
예시주문 처리알림 발송

대표 메시징 시스템

시스템특징
Kafka대용량 처리, 높은 처리량, 메시지 영구 저장
RabbitMQ다양한 라우팅, 낮은 지연시간
ActiveMQJMS 표준 지원, Java 친화적
Redis Pub/Sub초간단 구현, 메시지 저장 안됨

장점

장점설명
느슨한 결합시스템 간 의존성 감소
비동기 처리응답 대기 없이 다음 작업 진행
부하 분산여러 Consumer가 메시지 나눠 처리
내결함성Consumer 장애 시 메시지 보존
확장성Consumer 수평 확장 용이

Java 예시 (Kafka)

// Producer
@Service
public class OrderProducer {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendOrder(Order order) {
        kafkaTemplate.send("order-topic", order.toJson());
        // 전송 후 바로 리턴 (비동기) O
    }
}

// Consumer
@Service
public class OrderConsumer {
    @KafkaListener(topics = "order-topic")
    public void processOrder(String message) {
        // 메시지 수신 시 처리
        Order order = Order.fromJson(message);
        orderService.process(order);
    }
}

실사용 예시

주문 서비스 → [주문 메시지] → 재고 서비스
                            → 결제 서비스
                            → 알림 서비스
→ 각 서비스가 독립적으로 처리 O

메시징 시스템은 마이크로서비스 아키텍처에서 서비스 간 통신의 핵심으로, 직접 API 호출보다 느슨한 결합과 높은 안정성을 제공합니다.

CSLOG에서 보기