메세지 큐, Message Queue
비동기 메시지 기반 통신 방식, 한쪽에서 메세지를 보내면 다른 한 쪽에서 꺼내서 처리하는 구조를 말함.
동작원리
생산자(Produce) -> 메세지 발행 ->
큐(Queue) -> 메세지 대기 ->
소비자(Consumer) -> 메세지 처리 ->
큐(Queue) -> ACK/NACK 매커니즘으로 성공 실패 분류, 성공 시 삭제/ 실패 시 옵션처리
- 생산자 : 메세지를 큐에 넣는 주체
- 큐 : 메세지를 임시 저장하는 중간 저장소
- 소비사 : 메세지를 꺼내 처리하는 주체
특징
생산자와 소비자가 직접 통신하지 않고 큐를 통해 간접적으로 연결됨.
이러한 구조를 통해 시스템 간 결합도를 낮추고 유연성을 높일 수 있음.
종류
- RabbitMQ
- Apache Kafka
- Amazon SQS (Simple Queue Service)
- Redis (as a queue)
장점
- 비동기 처리 : 요청과 처리의 분리로 유연한 시스템 구조를 가짐
- 결합도 감소 : 서비스 간 직접 연결이 없어 유지보수 용이
- 부하분산/확장성 : 소비자 수를 늘리면 자연스럽게 병렬 처리 가능
- 내결합성 강화 : 소비자의 메세지 처리 실패 시 메세지가 큐에 남아 장애 복구에 용이함
단점
- 메세지 순서 문제 : 메세지 순서 보장이 어려움
-> 메세지에 시퀀스 부여 후 소비자가 정렬처리
-> kafka : Partition + Key 기반 라우팅, 동일 key를 가진 메세지는 동일 파티션을 통해서 처리함으로 순서가 보장됨 - 중복 처리 고려 : 동일 메세지를 여러번 처리할 가능성이 있어서 안전 처리 필요
-> 메시지에 UniqueId를 통해 DB 등에서 중복 여부 확인 후 처리
-> 소비자 처리 시 멱등성을 고려한 로직 구현
-> kafka : Transactional Producer(전체 성공 or 전체 실패),
Consumer Offset Commit(어디까지 읽었는지 위치(offset)를 저장하여 이어처리할 수 있음) - 메세지 유실 : 큐나 소비자 장애로 유실 될 가능성 있음
-> DLQ 구성으로 처리 실패 메세지를 따로 저장 후 분석
-> kafka : 디스크 기반 저장, 메모리(RAM)이 아닌 디스크(HDD/SSD)에 저장함, 서버가 죽어도 메세지를 잃지 않음 - 지연 가능성 : 실시간 응답보다 지연이 발생할 수 있음
-> 소비자 수 증대, 우선순위 큐 활용 - 운영 복잡도 증대 : 별도의 큐 서버 운영, 모니터링, 장애 대응 필요
-> 모니터링 도구 연동(Prometheus + Grafana 등)
'CS 정리' 카테고리의 다른 글
Java 대용량 데이터 처리(0) (0) | 2025.04.19 |
---|---|
STW, Stop the world 제어하기 (2) | 2025.04.13 |
메모리 단편화, Fragmentation (0) | 2025.04.12 |
GC, Garbage Collection (0) | 2025.04.12 |
JVM, Java virtual machine (0) | 2025.04.11 |