SteadyDrills

장고(Django)의 미들웨어(Middleware) 본문

웹개발

장고(Django)의 미들웨어(Middleware)

Drills 2025. 1. 22. 23:28

250122

 

미들웨어 (Middleware) 란?

소프트웨어 아키텍처에서 클라이언트와 서버 간의 요청(request)과 응답(response)을 중개하는 역할을 하는 컴포넌트이다. 주로 웹과 앱에 사용되며, 장고의 미들웨어는 요청(request)과 응답(response) 처리 과정 특정 지점에서 호출되어 다양한 기능(예: 인증, 세션 관리, 로깅, 보안 등)을 수행하는 훅(hook) 프레임워크이다. 미들웨어는 process_request와 process_response와 같은 메서드를 통해 요청과 응답을 처리한다.

 

 

미들웨어 (Middleware) 의 필요성

  • 애플리케이션 전반에 걸쳐 공통적으로 적용해야 하는 기능들을 효율적으로 구현. 
  • 공통 기능을 한 곳에서 관리. → 코드의 재사용성과 유지보수성이 향상. 
  • 요청/응답 처리 과정에 대한 세밀한 제어가 가능.

 

미들웨어 (Middleware) 의 주의점

  • 성능 고려: 미들웨어는 모든 요청에 대해 실행되므로, 무거운 작업을 수행하면 전체 애플리케이션의 성능이 떨어질 수 있다. 따라서 미들웨어 내에서는 가능한 한 가벼운 작업만 수행하는 것이 지향.
  • 순서 관리: 미들웨어의 실행 순서가 중요하다. 예를 들어, 인증 미들웨어가 세션 미들웨어보다 나중에 실행되지 않을 경우, 버그가 발생할 수 있다.
  • 예외 처리: 미들웨어에서 발생하는 예외를 적절하게 처리 되어야 한다. 
  • 디버깅의 어려움: 미들웨어는 전역적으로 동작하기 때문에, 문제가 발생했을 때 디버깅이 어려울 수 있다. 

 

장고(Django)의 미들웨어(Middleware)

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware", #보안 미들웨어
    "django.contrib.sessions.middleware.SessionMiddleware", #세션 미들웨어
    "django.middleware.common.CommonMiddleware",#공통 미들웨어
    "django.middleware.csrf.CsrfViewMiddleware",#CSRF 보호 미들웨어
    "django.contrib.auth.middleware.AuthenticationMiddleware",#인증 미들웨어
    "django.contrib.messages.middleware.MessageMiddleware",#메시지 미들웨어
    "django.middleware.clickjacking.XFrameOptionsMiddleware",#클릭재킹(Clickjacking)공격보안 미들웨어
]

 

SecurityMiddleware (보안 미들웨어): HTTPS redirection , XSS 방지를 위한 X-XSS-Protection 헤더 설정, 클릭재킹 방지를 위한 X-Frame-Options 헤더 설정 등을 담당.

 

SessionMiddleware (세션 미들웨어): 사용자 세션을 관리하는 미들웨어. 요청이 들어올 때 세션 정보를 데이터베이스나 캐시에서 가져와 request 객체에 연결하고, 응답이 나갈 때 세션 정보를 저장. 이를 통해 로그인 상태 유지나 장바구니 기능과 같은 상태 관리가 가능하다.

 

CommonMiddleware (공통 미들웨어): 일반적인 웹 서버의 기능들을 제공.URL 정규화(trailing slash 처리), APPEND_SLASH 설정에 따른 URL redirection , Content-Length 헤더 설정 등을 담당. 예를 들어, URL 끝에 슬래시(/)가 없는 요청이 들어오면 자동으로 슬래시를 추가하여 redirecte.  

 

CsrfViewMiddleware (CSRF 보호 미들웨어): Cross-Site Request Forgery 공격을 방지하는 중요한 보안 미들웨어.

POST 요청에 대해 CSRF 토큰을 확인하여 요청의 신뢰성을 검증하며, 템플릿에서 {% csrf_token %} 태그를 사용하면 이 미들웨어가 토큰을 검증한다.

 

AuthenticationMiddleware (인증 미들웨어): 현재 사용자의 인증 상태를 처리. 세션의 사용자 ID를 바탕으로 request.user 객체를 설정. 이를 통해 뷰에서 현재 로그인한 사용자의 정보에 쉽게 접근할 수 있다.

 

MessageMiddleware (메시지 미들웨어): 일회성 메시지(플래시 메시지)를 관리. 사용자에게 "저장되었습니다", "로그인이 필요합니다" 등의 피드백을 제공할 때 사용.

 

XFrameOptionsMiddleware(클릭재킹(Clickjacking) 공격 보안 미들웨어): 클릭재킹(Clickjacking) 공격을 방지하기 위한 장고의 보안 미들웨어.

 

*클릭재킹이란?

더보기

해커가 투명한 iframe을 이용해 사용자가 의도하지 않은 행동을 하도록 속이는 공격 방식. 예를 들어, 사용자가 "무료 상품 받기" 버튼을 클릭한다고 생각했는데, 실제로는 그 아래 숨겨진 다른 웹사이트의 "결제하기" 버튼을 클릭하게 되는 것.

 

 

'웹개발' 카테고리의 다른 글

크롤링(crawling)  (0) 2025.01.24
Swagger란?  (0) 2025.01.21
Django의 APIView, ViewSets, Generic View  (0) 2025.01.16
로컬 스토리지(LocalStorage)란?  (0) 2025.01.13
장고(Django)의 Routers  (0) 2025.01.10