몰입공간
[Django] 미들웨어 (What has things to do with middleware in Django) 본문
Programming/Django
[Django] 미들웨어 (What has things to do with middleware in Django)
sahayana 2022. 5. 26. 16:25
#1. 미들웨어 (Middleware)
장고의 미들웨어(Middleware)는 HTTP 요청과 응답사이에 위치하여 여러 처리를 담당하는 일종의 인터페이스입니다.
커맨드로 프로젝트를 생성하게 되면 settings.py에서 다음과 같은 미들웨어 리스트를 볼 수 있습니다.
참고로 미들웨어 리스트에 적힌 path의 순서는 정해져있습니다.
request가 들어오면 위에서 아래로 처리가 진행되고, response를 내보내는 과정에서 아래에서 위로 처리가 진행되어
나가기 때문에 미들웨어를 정하는 순서가 매우 중요합니다.
#2. 미들웨어 작동원리
본래 웹서버와 파이썬 어플리케이션의 상호작용은 gunicorn이나 uWSGI와 같은 WSGI서버를 통해 이루어집니다.
wsgi.py를 통해 callable한 WSGIHandler 인스턴스가 생성되고, 이에 따라 settings.py에 설정한 middleware를
불러오는 방식으로 작동합니다.
#3. 커스텀 미들웨어
미들웨어 역시 사용자가 직접 커스터마이징하고 등록하여 사용할 수 있습니다.커스텀 미들웨어는 함수 혹은 클래스로 작성 가능하며 파이썬 데코레이터 생성방법과 비슷합니다.
# 함수
def simple_middleware(get_response):
# One-time configuration and initialization.
def middleware(request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
return middleware
# 클래스형 (__call__ 메서드)
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
현재 제작중인 API에서 커스터마이징 미들웨어가 적용가능한 부분이 있다면 한번 제작해서 포스팅할 예정입니다.
#4. 참고
- 공식문서
- Django middleware custom (https://ctsictai.medium.com/django-middleware-custom-ed959c16225c)
- Django middleware (https://dongsik93.github.io/til/2020/02/21/til-django-middleware(2)/)
'Programming > Django' 카테고리의 다른 글
[Django] 동시성 프로그래밍으로 성능 개선하기 ft. Async view (0) | 2023.04.27 |
---|---|
[Django] 비즈니스 로직에 대한 고찰 (Where to put business logics) (0) | 2023.04.25 |
[Django] 장고 모델 디자인 주의할 점 (Django model design principle) (0) | 2022.05.23 |
[Django] F() 객체와 annotation (Combined usage with F() and annotation in Django ORM) (0) | 2022.05.18 |
[Django] 장고 ORM cookbook - 1 (Django ORM recipes) (0) | 2022.05.17 |
Comments