카테고리 없음

[Backend기초] CGI, WSGI, ASGI 용어 정리

필맆 2024. 10. 4. 15:17

 

Backend 세션을 들으며 FastAPI를 구현해나가기 시작하는데, 그 이전에 모르는 용어가 너무 많은 것 같아서 한 번 정리해보았다.

 

Web Server, WAS, CGI, WSGI, ASGI

 


 

 

Web Server

HTTP Request에 맞는 웹페이지를 Response 해주는 기능을 가짐 (Static, 정적)

  • 정적 이란, Web Server에 있는 변경되지 않는 동일한 웹페이지를 Response하는 것

 

Web Application Server (WAS)

 = Web Server + Web Container (= Web Server + CGI)

Web Server가 동적으로 작동하면 WAS라고 할 수 있음

  • 동적 이란, Request에 따라 데이터를 가공하여 생성된 웹페이지를 Response하는 것

 

Web Server와 Web Application Server 구분 이유
- 다양한 로직 처리를 WAS로, 단순한 정적 처리를 WS로 나누어 서버 부하 감소
- SSL 처리를 Web Server로 분리하여 보안 강화
- 자원 이용의 효율화, 유지 보수 편의성을 위해 구분

*SSL (Secure Sockets Layer, 보안 소켓 계층)이란,
웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술

 

 

 

CGI

CGI(Common Gateway Interface)는 서버에서 요청에 대한 응답을 보낼 때 표준 인터페이스를 제공해주기 위한 인터페이스라고 할 수 있다.

요청이 들어올 때마다 애플리케이션 프로세스를 다시 실행해야 하기 때문에 비효율적이라는 단점을 가지며, 파이썬과 같은 스크립트 언어에서 특히 비효율성이 부각됨됨.

 

WSGI

WSGI is the Web Server Gateway Interface. It is a specification that describes how a web server communicates with web applications, and how web applications can be chained together to process one request. (출처: https://wsgi.readthedocs.io/en/latest/what.html)

 

WSGI는 python application이 웹 서버와 통신하기 위한 표준 인터페이스이자, 파이썬 프레임워크.

프로토콜과 유사한 개념으로 파이썬과 애플리케이션이 통신하기 위한 규약의 역할을 한다.

CGI의 단점을 보완하기 위해 고안되었으며, 요청에 대한 정보를 환경 변수나 STDIN 등으로 처리하는 CGI와 달리, WSGI에서는 Callable object, 함수나 객체로 처리함.

 

cf. 이런 인터페이스를 구현하는 서버나 애플리케이션을 WSGI compatible하다고 하며, 애플리케이션은 WSGI applicaiton이라고 함

+ 서버와 어플리케이션 중간에서 인증나 쿠키 등을 관리하는 역할을 하는 것을 WSGI Middleware라고 함.이 또한 WSGI application의 일종이라고 할 수 있으며, 대표적으로 gunicorn이 있음.

 

 

ASGI

Asynchronous Server Gateway Interface의 약자로, 비동기적인 요청 처리에 약한 WSGI을 개선하기 위해 만들어진 인터페이스. 파이썬 웹 서버, 프레임워크, 어플리케이션 사이에 비동기적인 표준 인터페이스를 제공하며 동기성과 비동기성 모두에 대한 표준을 제공하여 WSGI와 호환성을 가지면서 비동기적인 요청까지 처리가 가능한 인터페이스라고 할 수 있음.

+ ASGI 서버로는 Uvicorn을 많이 사용함.z

[동기(sync) vs. 비동기(async)]
동기적 처리 : 현재 실행 중인 코드부터 완료하고 다음 코드를 처리하는 방식 (직렬 처리)
비동기적 처리 : 현재 실행 중인 코드가 완료인지 상관없이, 바로 다음 코드로 넘어가는 방식 (병렬 처리)

 

 

FastAPI의 속도가 빠른 것도 Starlette이라는 비동기 ASGI 프레임워크를 사용하기 때문!

 

 


 

 

 

출처

https://jellybeanz.medium.com/cgi-wsgi-asgi-%EB%9E%80-cgi-wsgi-asgi-bc0ba75fa5cd

https://asgi.readthedocs.io/en/latest/