JustDoEat

메세지 지향 미들웨어란?(Celery, RabbitMQ 간단한 사용경험 기록) 본문

Study/정보처리기사

메세지 지향 미들웨어란?(Celery, RabbitMQ 간단한 사용경험 기록)

kingmusung 2024. 6. 19. 21:30

미들웨어(MiddleWare)란?

애플리케이션과 하드웨어, 혹은 소프트웨어 사이에 위치하며 이들 사이의 통신을 중재하는 역할을 하는 징검다리 역할이다.

요약하자면 징검다리 역할을 하는 친구들을 미들웨어라고 한다.

 

이렇게만 보니까 영 친숙하지도 않고 정도 안 붙는다;

 

메시지큐에 대한 회고와 설명이 주로 있을 예정이다.

 

미들웨어(MiddleWare)의 종류

더보기

1. 메시지 지향 미들웨어(Message-Orient-Middleware)

2. 웹 서버 미들웨어(Web-Server-Middleware)

3. 애플리케이션 서버 미들웨어(Application-Server-Middleware)

4. 엔터프라이즈 서비스 버스

꼭 위에 있는 것만이 미들웨어는 아니다

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    "corsheaders.middleware.CorsMiddleware",
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django_prometheus.middleware.PrometheusBeforeMiddleware',
    'django_prometheus.middleware.PrometheusAfterMiddleware',

]

Django를 사용하여 프로젝트를 했을 때, Prometheus를 사용하기 위해서 미들웨어에 설정을 추가한 후 메트릭을 수집하도록 했는데.

이 또한 미들웨어이다.


메시지 지향 미들웨어(Message-Orient-Middleware)

메시지 기반의 통신을 기반으로 설계된 미들웨어이다.

 

RabbitMQ, 혹은 Kafka 등이 해당된다.

 

메시지

더보기

데이터의 단위를 의미, 이메일 시스템에서의 메시지는 우리가 아는 그 "메시지"이다.

API를 호출하는 관점에서의 메시지는, HTTP의 요청 혹은 응답, GET, POST, PUT 등의 요청이 있을 수 있고, JSON형식으로 무언가의 데이터를 전달하는 것이 있을 수 있다.

메시지 전달방식

더보기

1. 메시지 큐(Message Queue) 방식

-> 메시지는 큐에 저장이 되고, 소비자가 소비하기 전까지 큐에 남아있다. 

-> 큐, 생산자, 소비자로 구성되어 있다.

-> 하나의 메시지는 하나의 소비자가 소비할 수 있다.

 

2. 발행-구독 방식

-> 메시지는 토픽으로 생성이 된다.

-> 이를 구독하는 모든 소비자가 메시지를 받을 수 있다.

->각 메시지는 여러 소비자가 받을 수 있다.

 

3. 그 외

-라우팅 모델(라우팅 키를 기반으로 라우팅 키가 일치하면 해당하는 큐로 보내줌, 로그처리기에서 로그 분리에 이용!)

-브로드캐스트 모델(모든 소비자에게 메시지 전달)

-피어 투 피어 모델(중앙 브로커 없이, 직접적인 메시지 전달, P2P사이트에서 이용)

메시지 큐 + RabbitMQ 같은 중재자 == Middleware를 사용하는 이유는

더보기

1. 비동기적으로 메시지를 전달하며 순서를 보장함.

2. 분산된 환경에서 동시다발적으로 메시지요청을 보낼 시 이 또한 순서를 보장해 줌.

3. 작업 간의 의존성을 낮추어 준다.(메시지가 전달이 되면 큐에 저장이 되어있고 이 작업이 즉시 처리가 되지 않아도 되기 때문)

4. 중간다리 역할을 해줌.

 

+회고

(정처기 준비하면서 나와서 예전에 사용경험을 간단하게 적어보았다. RabbitMQ, Celery에 대한 깊이 있는 설명이 아니다!!)

출처: https://velog.io/@sdb016/RabbitMQ-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90

 

[RabbitMQ] 기초 개념

AMQP를 구현한 오픈소스 메세지 브로커이다.producers에서 consumers로 메세지(요청)를 전달할 때 중간에서 브로커 역할을 한다.사용하는 케이스는 다음과 같다.요청을 많은 사용자에게 전달할 때요청

velog.io

RabbitMQ를 사용했던 이유는 Django는 싱글스레드로 비동기 작업을 지원하지 않아 비동기 처리를 위해

Celery(메세지큐)+RabbitMQ(중개인) = Message Middleware를 사용하여 비동기 처리를 가능하도록 만들었다.

 

위에서 기설명 한 비동기적으로 메시지를 처리하고, 분산된 환경은 아니지만 동시다발적으로 요청이 들어왔을 때 순서를 보장해 주었다.

 

Celery, RabbitMQ 둘 다 메시지 큐의 역할을 하지만, 주로 Celery를 큐로 활용하고 RabbtMQ를 메시지 중개인으로 이용을 한다.

 

정보처리기사 준비를 하면서 내가 경험했던 기술들이 메시지 지향 미들웨어였다는 것을 다시 한번 상기할 수 있었다.

 

 

 

 

 

 

 

'Study > 정보처리기사' 카테고리의 다른 글

UML 다이어그램이란 무엇인지 알아보자  (1) 2024.06.18