[WEB] CGI, WSGI, ASGI 란

Jaehyeong Kwon·2023년 2월 27일
0

INFRA

목록 보기
3/5

최근 ml 모델 서빙에 관한 관심이 늘어나면서 가볍고 빠른 프레임워크인 FastAPI가 관심받기 시작하였다. 회사에서는 flask를 사용해서 어떤 차이가 있는지 궁금하였고, 차이점을 공부하다가 wsgi 와 asgi에 대해 알게 되어 자세히 알아볼 겸 글을 남기게 되었다.


1. WEB SERVER

  • HTTP Request 에 맞는 웹페이지를 Response 해주는 기능을 가집니다. (Static, 정적)
  • 웹 서버에 있는 웹 페이지를 그대로 Response 합니다. 웹 페이지가 변경 되지 않는 동일한 웹 페이지를 보여줍니다.

2. WEB APPLICATION SERVER

  • WEB SERVER + WEB CONTAINER( = WEB SERVER + CGI) = WAS(WEB Application SERVER)
  • WEB SERVER가 동적으로 동작하면 WEB Application SERVER 입니다.
  • 요청에 따라 데이터를 가공하여 생성된 웹페이지를 반응해주는 것을 동적이라고 부릅니다.

WEB SERVER, WEB Application SERVER를 구분하는 이유

  • 다양한 로직 처리를 WEB Application SERVER로 단순한 정적처리를 WEB SERVER로 나누어 서버 부하 감소를 시킬 수 있습니다.
  • SSL 처리를 WEB SERVER 로 분리하여 보안강화가 가능합니다.
  • 자원 이용의 효율화, 유지 보수 편의성을 위해 구분합니다.

3. CGI(Common Gateway Interface)

  • 가장 오래된 Interface(=거의 모든 WEB SERVER 지원)
  • WEB SERVER와 이를 호출하는 Application 간의 인터페이스, WEB SERVER에서 Application을 실행하는데 필요한 Interface로 단순히 요청을 반응해주는 WEB SERVER의 역할을 동적으로하게 개선해주기 위한 목적을 가지고 있습니다.

CGI, WAS 차이

  • 동일한 요청이 많은 경우 CGI는 모든 요청에 대해 모두 실행하지만, WEB Application SERVER는 한번만 실행하므로 WAS가 더 효과적임

4. WSGI(Web Server Gateway Interface)

  • WEB SERVER의 요청을 Python Application으로 보내주고 요청을 받아서 WEB SERVER로 보내주는 Web Server Gateway Interface 라 부릅니다.

  • WEB SERVER의 요청을 Callable Object를 통해 Application에 전달하고 Callable Object는 Functiond이나 Object의 형태로 HTTP 요청에 대한 정보(Method, URL, data)를 Callback 함수 정보를 전달합니다.

  • 2003년 파이썬 표준으로 WSGI가 나온 이후 현재까지 사용 중입니다.

  • WSGI Middleware는 WSGI의 구현체로 요청을 Flask, Django와 같은 Web Framework에 연결하는 WSGI 서버의 역할을 함. (gunicorn, uWSGI, Werkzeug 등이 있음)

  • WSGI는 Synchronous(동기)하게 작동하기에 동시에 많은 요청을 처리하는 데 한계가 있음 (Celery를 이용하여 성능 향상이 가능합니다.)

Flask, Django에서 WSGI compatible server 기능이 있는데 WSGI Middleware를 써야할까?

  • Flask, Django만 사용해도 상관없지만,해당 프레임 워크의 WSGI compatible server는 개발을 목적으로 구현된 것이기 때문에 운영 환경의 트래픽을 감당하는데 적합하지 않을 수 있습니다.

WSGI Middleware 없이 Nginx 같은 Web Server를 써야하는가?

  • Flask/Django 같은 Web Framework의 경우 WSGI interface가 일부 구현된 compatible server 기능을 제공하고 있기 때문에 Nginx만 사용해도 됩니다.
  • Gunicorn/uWSGI을 이용하는 경우 멀티쓰레드를 지원하여 더 만흥ㄴ 요청을 처리할 수 있습니다.

5. ASGI(Asynchronous Server Gateway Interface)

  • WSGI와 비슷한 구조를 가지나 기본적으로 모든 요청을 Asynchronous(비동기)로 처리하는게 다릅니다.
  • WSGI에서 지원되지 않는 Websocket, HTTP 2.0을 지원합니다.
  • ASGI는 WSGI와 호환됩니다.
  • WSGI가 Synchronous하게 작동함으로써 발생하는 한계를 해결하기 위해 Uvicorn과 같은 Asynchronous Server Gateway Interface가 나옵니다. WSGI의 단점은 요청을 받고 응답을 반환하는 단일 동기 호출 방식입니다.
  • 단일 비동기 호출이 가능하므로 여러 이벤트를 주고 받을 수 있습니다. => 대용량 트래픽 처리를 유연하게 할 수 있습니다.
profile
나무와 같이 성장하는 사람

0개의 댓글