일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Til
- nginx
- Python
- github
- redis
- 코딩테스트
- 아티클 스터디
- docker
- flask
- CS
- SQL
- Doker
- django
- web
- Wil
- viewsets
- 연습
- 도커
- 장고
- 쿠키(cookie)
- 오블완
- 티스토리챌린지
- 세션(Session)
- 파이썬
- NoSQL
- git
- ERD
- 자료구조
- 개발공부
- JWT
- Today
- Total
SteadyDrills
장고(Django)의 미들웨어(Middleware) 본문
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 |