CS 정리

메세지 큐, Message Queue

문쿼리 2025. 4. 13. 00:08

메세지 큐, 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