WS, WAS 그리고 WSGI

ddindo·2022년 4월 18일
0

WS(Web Server)

Web Server란 인터넷을 통해 웹 컨텐츠(Html, CSS, JS) 요청을 처리 해주는 소프트웨어 또는 이 소프트웨어를 실행하는 하드웨어를 말한다.

  • 기본적으로 WS는 정적으로 동작한다.
  • 클라이언트가 HTTP request를 보내면 그에 맞는 응답을 전송한다.

CGI(Command Gateway Interface)

위에서 말한 WS에서 동적인 기능을 추가하기 위해 등장한 개념이다. WS와 외부 애플리케이션의 중간자 역할을 한다.

  • 클라이언트 -> WS -> CGI -> External Application
  • CGI는 클라이언트의 요청이 들어올 때마다 Fork하여 동작하므로 오버헤드가 크다. 그래서 새로 등장한 개념이 Fast CGI로 FCGI는 fork 하지 않고 하나의 프로세스에서 모든 요청을 처리한다.
  • Java의 Tomcat은 WS + FCGI로 구성된다.

WAS(Web Application Server)

WAS는 WS + (CGI or FCGI)로 구성된다. 기존의 정적인 요청의 처리는 WS단에서 처리해주고 만약 동적인 요청이 들어온다면, CGI 나 FCGI를 통해 외부 애플리케이션과 연결하여 동적으로 처리 해준다.

  • 정적인 요청) 클라이언트 -> WAS(WS + CGI) -> Static file
  • 동적인 요청) 클라이언트 -> WAS(WS + CGI) -> External Application

WSGI(Web Server Gateway Interface)

안타깝게도 기존에 파이썬에는 CGI나 FCGI같은 기능이 없었고, 직접 구현하여 WS에 붙여 사용해야 했다. 하지만 WSGI와 같은 미들웨어를 통해 파이썬으로 작성된 애플리케이션도 쉽게 사용할 수 있게 됐다.

  • WSGI는 CGI의 디자인 패턴만 이어 받아서 기능은 비슷하지만 다르게 동작한다.
  • CGI의 경우 fork를 기반으로 하지만 WSGI는 하나의 프로세스에서 콜백을 통해 처리한다.
  • WSGI는 동기적으로 작동한다.
  • Werkzeug, gunicorn, etc

ASGI(Asynchronous Server Gateway Interface)

WSGI는 동기적이므로 현대의 대용량 트래픽 처리에 어려움이 있다. 그래서 ASGI가 등장하여 요청을 비동기적으로 처리할 수 있게 됐다.

  • 비동기적으로 동작하므로, WebSocket 프로토콜과 Http 2.0을 사용할 수 있게 된다.
  • Django >= 3.0 에서 부터 ASGI를 지원하는 만큼 다양한 파이썬 프레임워크에서 ASGI의 중요성을 반영하고 있다.
  • Django, FastApi, etc

0개의 댓글