메세지 큐는 소프트웨어 간의 비동기적으로 메세지를 전달하기 위한 통신 시스템이다. 생산자와 소비자간의 데이터를 임시로 저장하는 중간 매개체 역할을 하며, 일반적으로 메세지의 안정적인 전달, 비동기 처리, 시스템 분산 및 확장성 향상에 도움이 된다.
메세지 큐의 구조
1. 생산자(Producer)
메세지를 생성하여 큐에 넣은 애플리케이션이나 서비스이다. 생산자는 특정 주제(Topic) 또는 메세지를 큐에 전달한다.
2. 소비자(Consumer)
큐에서 메세지를 읽고 처리하는 애플리케이션이다. 소비자는 메세지 큐로부터 메세지를 가져와 작업을 수행한다.
3. 메세지 브로커(Message Broker)
생산자와 소비자 사이에서 메세지를 전달하고 큐를 관리하는 시스템이다. 브로커는 메세지의 순서, 전달 보장, 재시도 처리를한다.
메세지 큐의 작동 원리
1. 메세지 생산 및 대기
- 생산자는 메세지를 생성하여 메세지 큐에 추가한다.
- 메세지는 큐의 특정 주제(Topic) 또는 라우팅 키(Routing Key)를 통해 적절한 큐에 전달된다.
2. 메세지 대기열 처리
- 큐는 FIFO(First In First Out) 방식으로 메세지를 관리한다.
- 필요에 따라 우선순위 큐나 지연 큐 같은 확장 기능이 추가된다.
3. 메세지 소비
- 소비자는 메세지를 가져와 작업을 수행하고 처리 완료 후 메세지를 큐에서 제거한다.
- 메세지가 처리되지 않거나 실패할 경우, 재시도 매커니즘이 동작할 수 있다.
메세지 큐의 특징
- 비동기성
생산자와 소비자가 동시성을 유지하지 않아도 된다. 생산자는 메세지를 큐에 추가한 후 즉시 작업을 종료할 수 있다. - 확장성
다수의 소비자를 통해 대량의 메세지를 병렬 처리할 수 있다. 이를 통해 수평적 확장이 용이해진다. - 내결함성(Fault Tolerance)
큐에 저장된 메세지는 장애가 발생하더라도 손실되지 않으며 소비자가 다시 시작하면 처리를 재개할 수 있다. - 순서 보장
대부분의 메세지 큐는 메세지의 순서를 보장한다. 일부 고성능 큐는 순서를 포기하고 성능을 극대화하기도 한다. - 메세지 전송 보장
메세지가 소비자에게 정확히 한 번(Exactly Once), 최소 한 번(At Lest Once) 또는 최대 한 번(At Most Once) 전달되도록 설정 가능하다.
주요 기능
- 메세지 재시도 및 만료
메세지가 처리되지 않을 경우 재전송하거나 만료되도록 설정할 수 있다. - 지연 전송
특정 시간 후에 메세지가 소비자에게 전달되도록 지연 처리 가능하다 - 우선순위 메세지
특정 메세지에 더 높은 우선 순위를 부여하여 먼저 처리되도록 설정할 수 있다. - 데드 레터 큐
처리되지 못하거나 실패한 메세지를 별도의 큐로 이동시켜 후속 조치를 취할 수 있도록 한다
사용사례
- 마이크로서비스 통신
서로 독립적으로 동작하는 마이크로서비스 간의 데이터 전달을 비동기 방식으로 처리 - 이벤트 기반 아키텍처
이벤트를 메세지 형태로 전송하여 실시간 반응이 필요한 시스템에서 활용 - 작업 처리 분산
대량의 작업을 여러 소비자가 분산 처리하여 병목 현상을 방지 - 비동기 작업 처리
이메일 발송, SMS 전송, 백그라운드 데이터 처리 등 - 스트리밍 데이터 처리
대용량 로그 데이터나 센서 데이터 처리
대표적인 메세지 큐 기술
1. Rabbit MQ
- AMQP 프로토콜을 지원하는 메세지 브로커
- 라우팅과 복잡한 메세지 전달이 필요할 때 적합
- 안정성, 플러그인 확장성
2. Apache Kafka
- 고성능 데이터 스트리밍 플랫폼으로 대규모 데이터를 처리하는 데 적합
- 로그 처리, 실시간 데이터 분석에 주로 사용
- 높은 처리량, 분산 시스템 지원
3. Amazon SQS
- AWS의 관리형 메세지 큐 서비스
- 서버리스 환경에서 메세지 큐를 손쉽게 사용 가능
- 간단한 설정, 관리 비용 감소
4. Redis Pub/Sub
- 인메모리 데이터 저장소인 Redis의 메세지 큐 기능
- 저지연 작업에 적합
- 빠른 처리 속도, 간단한 구현
'CS' 카테고리의 다른 글
[Design Pattern]팩토리 메서드 패턴 (0) | 2024.11.26 |
---|---|
[Design Pattern] 템플릿 메서드 패턴 (0) | 2024.11.26 |
[Design Pattern] 싱글톤(Singleton) 패턴 (0) | 2024.11.26 |
CS 알고리즘 시간복잡도 (0) | 2024.10.07 |
CS 오토 스케일링(Auto Scaling)이란 (0) | 2024.09.19 |