몰입공간

[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에서 다음과 같은 미들웨어 리스트를 볼 수 있습니다.

setting.py

 

참고로 미들웨어 리스트에 적힌 path의 순서는 정해져있습니다. 

request가 들어오면 위에서 아래로 처리가 진행되고, response를 내보내는 과정에서 아래에서 위로 처리가 진행되어

나가기 때문에 미들웨어를 정하는 순서가 매우 중요합니다.


#2. 미들웨어 작동원리

 

본래 웹서버와 파이썬 어플리케이션의 상호작용은 gunicorn이나 uWSGI와 같은 WSGI서버를 통해 이루어집니다.

 

wsgi.py

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. 참고

 

Comments