[Django] 요청에서 응답 프로세스 살펴보기
요청에서 응답까지
장고에서 요청을 받고 응답하기까지의 프로세스를 살펴보자.
아래 이미지는 프로세스를 도식화했다.
요청을 받으면 가장 먼저 웹 애플리케이션 서버인 wsgi 서버를 만난다.
1. WSGI
WSGI는 웹 서버(apache, nginx)와 장고 프로젝트 간의 중계 역할을 한다. 웹 서버에서의 명령을 프레임워크가 이해할 수 없으니 그 사이를 메꿔주는 역할을 하는 것이다. gunicorn
나 uWSGI
가 wsgi 서버들이다. wsgi 서버에서 요청을 처리하기 위해 애플리케이션을 실행하고, 애플리케이션이 처리한 응답을 반환하는 역할을 한다.
wsgi 서버는 보통 운영에서 사용되며 개발할 때는
runserver
명령어로 대신한다. 장고 내장 서버 (runserver
)는 단일 프로세스를 사용하기 때문에 운영보다는 디버깅에 적합하다. 운영에서는 멀티프로세싱이 가능한 gunicorn이나 uWSGI등을 사용하여 많은 트래픽을 처리할 수 있도록 한다.
2. Middleware
Middleware는 뷰에서 요청 받기 전, 사용자에게 응답을 넘기기 전 등에 호출되어 다양하게 사용된다. 미들웨어를 활성화하기 위해서는 settings.py
에 MIDDLEWARE
를 추가한다. 아래는 예시 값이다.
#공식 문서 참고
#https://docs.djangoproject.com/en/3.1/topics/http/middleware/
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',
]
요청이 발생하면, wsgi 핸들러는 settings.py
파일을 임포트하고 MIDDELWARE
를 찾아 모든 미들웨어 클래스를 로드한다.
미들웨어에서 다음과 같은 메서드 등을 사용할 수 있다.
process_request
-요청이 들어오자 마자 처리하는 메서드(로그인 여부 확인 등)
-process_request
응답 후,urls.py
에서 요청을 처리할 뷰를 찾는다.
process_view
:
-뷰를 확인한 후, 뷰(views.py
)에 접근하기 전에 호출 되는 메서드(csrf확인 등)
-None
(뷰 호출) 또는HttpResponse
(그대로 응답) 반환
process_exception
-process_view
에서 예외를 발생시키면 호출되는 메서드
process_tempate_response
- 응답 객체에 render 메서드가 있는 경우에 호출되는 메서드
process_response
- 뷰에서 반환된 객체를 응답하기 전에 호출되는 메서드
3. View
요청을 처리하고 응답 객체HttpRequest
를 반환하는 것은 뷰이다. 뷰에서 DB를 읽거나 하여 요청에 필요한 처리를 한다. 템플릿을 반환하는 경우 아래처럼 render()
를 포함하여 응답한다.
...
return HttpResponse(template.render(context, request))
4. Template
템플릿은 html을 반환한다. 템플릿 경로는 settings.py
에서 아래와 같이 지정할 수 있다.
#공식 문서 참고
#https://docs.djangoproject.com/ko/3.1/topics/templates/
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# ... some options here ...
},
},
]
BACKEND
-템플릿 엔진 API 지정.- 기본 옵션으로는
django.template.backends.django.DjangoTemplates
와django.template.backends.jinja2.Jinja2
가 있음
- 기본 옵션으로는
DIRS
: template 디렉토리 위치APP_DIRS
: 엔진이 설치된 애플리케이션 내에서 템플릿 소스 파일을 찾을지에 대한 여부
마지막으로 미들웨어의 process_response
까지 호출하고 나면 응답을 반환한다.
끝!
요청부터 응답까지 프로세스를 간략하게 살펴 보았는데, 상세 내용은 시리즈로 계속 추가할 예정이다. 끝!
참고 : https://medium.com/@adamking0126/django-middlewares-and-the-request-response-cycle-fcbf8efb903f
Author And Source
이 문제에 관하여([Django] 요청에서 응답 프로세스 살펴보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@reowjd/Django-request에서-response까지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)