미들웨어(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 |
---|