Python, Django에 생성된 WSGI와 ASGI에 대한 간단 설명

이도현·2023년 10월 27일
0

파이썬 공부

목록 보기
4/7

0. WSGI와 ASGI

1) ASGI(Asynchnous Server Gateway Interface)

  • Python의 비동기 웹 서버와 애플리케이션 사이의 표준 인터페이스
  • 웹 소켓(WebSocket),롱 폴링(Long Polling)과 같은 실시간 기능을 보다 효과적으로 처리

    용어설명
    웹 소켓: 브라우저와 서버 간에 양방향 통신을 가능하게 하는 기술
    일반적인 HTTP 요청과 달리, 웹 소켓 연결은 지속적이며 실시간으로 데이터를 주고 받을 수 있습니다.
    롤 폴링: 웹소켓과 비슷한 실시간 통신 효과를 내기위한 기술. 클라이언트가 서버에 요청을 보내면, 서버는 새로운 데이터가 있을 때까지 응답을 보류 새로운 데이터가 생기면 응답을 하고, 클라이언트는 다시 요청을 보냅니다.

2) WSGI(Web Server Gateway Interface)

  • Python의 웹 애플리케이션과 웹 서버 사이의 표준 인터페이스
  • 다양한 웹 서버와 웹 애플리케이션(프레임워크)간의 호환성을 증가 시킴
  • 주로 동기적인 요청 처리에 적합

1. Django 프로젝트의 ASGI 및 WSGI 파일

1) aspi.py

  • Django 3.0 이상에서 사용
  • 비동기 처리가 필요한 어플리케이션(예: 실시간 채팅, 웹 소켓을 사용하는 기능 등)
  • 비동기 view, middleware 등을 설정할 수 있다.
  • 예시
import os
from django.core.asgi import get_asgi_application

# myproject는 Django 프로젝트 이름
# 웹 서버와 애플리케이션 간의 연결을 설정
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

# 객체를 사용하여 요청을 Django 애플리케이션으로 전달
application = get_asgi_application()
  • Daphene나 Unicorn을 사용하여 Django 애플리케이션을 호스팅할 때
daphne myproject.asgi
# 또는
uvicorn myproject.asgi:application

2) wsgi.py:

  • Django의 기본 웹 서버 인터페이스 파일

  • 주로 전통적인 동기적 요청 처리에 사용

  • wsgi.py를 사용하여 Django 애플리케이션을 WSGI 호환 웹 서버(Gunicorn, uWSGI 등)에 연결

    용어설명
    Gunicorn: Python WSGI HTTP 서버, Python 웹 어플리케이션을 호스팅하는데 사용
    uWSGI: Python WSGI를 지원하는 다목적 웹서버, 다양한 언어어와 프로토콜을 지원하며, 높은 성능과 확장성을 제공. 애플리케이션 서버, 메시지 브로커 등으로도 사용될 수 있습니다.

  • 예시

import os
from django.cor.wsfi import get_wsgi_application

# myproject는 Django 프로젝트 이름
# 웹 서버와 애플리케이션 간의 연결을 설정
os.environ.setdefault('Django_SETTING_MODULE', 'myproject.settings') 

# 객체를 사용하여 요청을 Django 애플리케이션으로 전달
application = get_wsgi_application() 
  • Gunicorn을 사용하여 Django 애플리케이션을 호스팅할 때
gunicorn myproject.wsgi

2. 결론

  • wsgi.py는 전통적인 동기적 웹 애플리케이션
  • aspi.py는 비동기 처리는 실시간 기능이 필요한 애플리케이션에 적합
profile
좋은 지식 나누어요

0개의 댓글