WSGI와 ASGI

Jiwon Jung·2022년 1월 21일
1

Web server와 WAS

용어 정리

  • Web Server : web browser(crome, edge, whale ...) 같은 클라이어트 부터 HTTP 요청을 받고 웹페이지(HTML문서)를 반환하는 컴퓨터 프로그램
  • WAS(Web Application Server) : 웹서버에서 요청을 받으면 애플리케이션(서버)에 로직을 실행하여 다시 웹서버로 반환해주는 소프트웨어, python 관련 framework는 사용을 하지 않았다.
  • CGI(Common Gateway Interface) : WAS 게이트웨이 중 소프트웨어 중 하나로 클라이언트 요청 하나당 process가 생기면서 통신을 처리한다.,
  • fastCGI(Fast Common Gateway Interface) : CGI의 상위 호환 버전으로, CGI는 하나의 클라이어튼 어플리케이션 통신당 하나의 프로세스가 생긴다. 결국 요청마다 Fork를 하여 커널 리소스를 사용하고 바납하면서 부담이 커지게 된다. fastCGI는 하나의 프로세스에서 여러 요청을 처리하면서 이의 단점을 보완한 게이트웨이다.

client와 application server 간 소통하기 위해서는 중간에 통역가 역할을 하는 gateway가 요구가 된다. 그러기 위해 사용 되는게 CGI이다. CGI는 common gateway interface로 웹서비스의 요청과 서버의 응답을 관리해주는 역할이다.

웹 서버로 많이 사용하는 apach server와 Tomcat 특성상 JVM 기반으로 만들어져서 Java spring의 지원은 해주지만 python을 지원하지 않았다.

WSGI

python으로 개발 되는 application은 한정적으로 web server를 사용할수 밖에 없었고 이를 해결하기 위해서 나온게 WSGI이다. WSGI는 web server과 python이 통신할수 있게 하는 middleware 역할을 하는 것이다. web server가 애플리케이션의 코드를 직접 읽을 수가 없기 때문에 해당 미들웨어가 대신 읽어 주고 반환해주는 역할이다.

ASGI

wsgi가 python의 web server 미들웨어의 표준으로 자리를 잡은 가운데 WSGI에서는 비동기 처리가 완벽하지 않다. 이를 보완하기 위한 asyncio와 coroutine을 지원하는 ASGI가 생긴것이다. wsgi에서 지원되지 않는 websocket 프로토콜과 HTTP 2.0을 지원한다. 즉 WSGI의 상위 호환 버전이라고 볼수가 있다. 아직 web app server인 gunicorn에서는 asgi에 적용이 안되지만 uvicorn이라는 새로운 server가 존재한다. C++ 기반이라 매우 빠른속도로 제공된다는 장점도 있다.

profile
Venire, Videre, Vincere

0개의 댓글