WSGI와 ASGI

JeongJun Min·2024년 2월 6일

Techeer

목록 보기
6/9

WSGI와 ASGI는 무엇일까?

파이썬 Django에서 개발을 하다보면 WSGI ASGI를 자주 볼 수 있다. 하지만 정확한 개념을 모르는 상태에서 개발을 하기보다 어떤 방식인지 또한 웹소켓을 사용하기 위해 왜 asgi를 사용하는지 알아보려고 한다.


CGI(Common Gateway Interface)

서버와 애플리케이션 간에 데이터를 주고 받는 방식이다. 보통 웹 서버는 서버에 저장되어 있는 정적 파일을 보여주는 역할을 했는데, 웹 서버에서 정보를 찾거나 기록을 하는 등 그때그때 값이 달라지는 때 동적인 요청이 오면 그에 맞는 html을 리턴해 주어야한다. 서버마다 혹은 애플리케이션 언어마다 다른 형태를 가지게 되면 번거롭기 떄문에 공통 인터페이스를 제공하는 것이다. (Apache HTTPd)

그러나 CGI는 요청이 하나 들어 올 때마다 프로세스가 하나씩 실행되는 치명적인 단점을 가지고 있어 현재 쓰이지 않는다.

WSGI(Web Server Gateway Interface)

파이썬 어플리케이션이 웹 서버와 통신하기 위한 표준 인터페이스이다. Nginx 같은 웹 서버는 Django에서 이해하지 못하기 때문에 웹 서버와 통신할수 있는 규격을 만들어주는 것이다. 동적 페이지 요청이 들어오면 웹 서버 대신 파이썬 어플리케이션을 호출하는 wsgi 서버가 반드시 필요하다.

WSGI Server(Middleware)

WSGI는 서버와 통신하는 규격을 명세하고 있다면, WSGI Server가 쿠키, 세션, 인증, 라우팅 등 관리하는 역할을 한다.
동적 요청이 발생하면 웹 서버가 WSGI서버를, WSGI서버가 파이썬 프로그램을 호출하여 처리한다. (Gunicorn, uWSGI, Werkzeug)

ASGI(Asynchronous Server Gateway Interface)

WSGI로만 클라이언트 요청을 대부분 구성할 수 있지만, 비동기 처리나 웹 소켓 같은 실시간 통신을 구현하기에 어려움이 있다.
ASGI는 이러한 문제를 해결하기 위해 WSGI와 호환되고, 웹 소켓, HTTP2.0을 처리할 수 있는 인터페이스이다. (Uvicorn)

참고
CGI, WSGI, ASGI 정리
CGI, WSGI, ASGI 란 (CGI, WSGI, ASGI?)

profile
개발계발

0개의 댓글